#!/bin/sh MYVERSION="0.1.3g" ################################################################################ # Sakis3G ################################################################################ # # Sakis3G All-in-one script, Version 0.1.3g, 2010/02/24. # Copyright (c) 2009, 2010 Sakis Dimopoulos (sakisd @domain tel4u.gr) # Under GNU GPL v2. # # URL: http://sakis.tel4u.gr/blog/ # License: http://www.gnu.org/licenses/gpl.txt # # This program is free software; you can 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: # # http://www.gnu.org/licenses/gpl.txt # # WITHOUT ANY WARRANTY statement above includes additional charges you # may receive from your operator by using this script, defects to your # SIM card including but not limited to being PIN blocked, defects on # your hardware, 3G service ban etc. USE WITH CARE. Author has no # responsibility for what may happen to you. # # Author is not related in any way with any of the companies, being # operators or modem manufacturers, other than being a customer to # some of them. # ################################################################################ # Usb-ModeSwitch ################################################################################ # # This script is embedded with 1.1.0 version of Usb-ModeSwitch made # by Josua Dietze, available at: # http://www.draisberghof.de/usb_modeswitch/ # under GNU GPL, and contains device database released on 2010/02/21. # #------------------------------------------------------------------------------- # # Whenever Usb-ModeSwitch or its database gets updated, you should # expect an updated version of Sakis3G after a while. If your modem # does not get switched (remains in storage mode), you should # contact Usb-ModeSwitch forums, at is might be a new device: # http://www.draisberghof.de/usb_modeswitch/bb/ # to receive further instructions for troubleshooting. If your modem # gets switched, still it does not work, you should contact the author # of Sakis3G. # # If your modem is not known to Sakis3G, still Usb-ModeSwitch includes # it in its device database, Sakis3G will attempt to initialize it, using # default initialization strings. # ################################################################################ # 9menu ################################################################################ # # This script is embedded with 1.8 version of 9menu. Source code # is available at: # ftp://ftp.freefriends.org/arnold/Source/9menu.shar.gz # # 9menu is free software, and is Copyright (c) 1994 by David Hogan and # Arnold Robbins. Permission is granted to all sentient beings to use # this software, to make copies of it, and to distribute those copies, # provided that: # # (1) the copyright and licence notices are left intact # (2) the recipients are aware that it is free software # (3) any unapproved changes in functionality are either # (i) only distributed as patches # or (ii) distributed as a new program which is not called 9menu # and whose documentation gives credit where it is due # (4) the authors are not held responsible for any defects # or shortcomings in the software, or damages caused by it. # # There is no warranty for this software. Have a nice day. # ################################################################################ # Sakis3G - More information ################################################################################ # # This script can be made better if you can supply information at # mail address seen above. Useful info can be: # * Vendor ID and Product ID of your modem. # * Initialization string required for your modem to establish # a PPP connection. # * User/password, phone number, AT+CGDCONT command required # for your operator. Also, operator name and operator URL. # # If you contribute in any way to this script, please, make sure you # inform me whether you want your name and/or email, be written in # next version or not. If you don't specify, I will include it by # default. # #------------------------------------------------------------------------------- # # Contributors up to this version: # * Dimitrios Tsolakis # - Confirmed Huawei E170 works with 0.0.9. # * Jean-Pierre VAISSIERE # - Confirmed GBC PL68 works with 0.1.2. # - Confirmed Tigo Honduras operator works with 0.1.2. # - Device only works properly the 1st time it gets physically connected # to computer. This is not a Sakis3G script problem. # * Josua Dietze # - Identified and fixed a regression issue, introduced by 0.1.2, that was # preventing correct tty device detection on several modems. Proposed fix # was included in 0.1.3. # #------------------------------------------------------------------------------- # # If you intend sending an email regarding this script, please # include "[sakis3g]" in subject. This allows my email rules to # make sure I see your email even if I am busy. # # Attach sakis3g.log if you want to help me help you: # $ DEBUG=on sakis3g connect 2>&1 | tee sakis3g.log # #------------------------------------------------------------------------------- # # This script is supposed to make your 3G connection work out-of-box, # as long as both your modem and operator are supported. You can find # list of supported modems and operators by calling this script with # the "help" argument. # #------------------------------------------------------------------------------- # # Fastest installation procedure on a desktop-enabled Linux system # is: # [Ubuntu ] $ sudo bash # [Ubuntu ] # apt-get install ppp sharutils xterm 9menu xosd-bin wget # [Debian ] # apt-get install ppp sharutils xterm 9menu xosd-bin wget # [openSUSE] # yast --install ppp sharutils xterm xosd wget # # cd /usr/bin # # wget "http://sakis.tel4u.gr/sakis3g/latest/sakis3g" # # chmod +x sakis3g # Executing it from your desktop, will ask you to enter root password, # in order to setup connection. If you intend using your bluetooth enabled # cellular phone as your modem, you also need to install bluez-utils package # and properly setup rfcomm communication with phone. # # You may find additional usage tips on blog mentioned above. # #------------------------------------------------------------------------------- # # This script has the following dependencies: # * "/bin/sh" as it is a shell script. # * Various common utils that should anyway be available, such as: # head, tail, cat, cut, wc, echo, printf, read, test, setsid, # getent, ps, which, sort, uniq. # * The following super user utils: lsusb, modprobe, netstat, # route. # * "chat" for negotiating with modem (supply PIN, manual operator # selection etc.) # * "PPPD" for establishing ppp connection. # * "wget" for receiving operator icons from the internet. # * If you want to use this script from your desktop, the following # are required: # - "9menu" or "aosd_cat" or "xosd_cat", # - If "uudecode" is available and "9menu" is not, an embedded # "9menu" binary is used instead, unless one of prefer_osd, # alwayssudo, stick_to_console variables are set. # - "9menu" requires "libx11-6" and "libxext6" found in all # X enabled systems. # - "xterm", # - "gksu" or "kdesu" are required unless option alwayssudo is # specified in configuration, in which case "sudo" is required # instead. # * If you execute this script from a terminal, the following are # required: # - "su" is required unless option alwayssudo is specified in # configuration, in which case "sudo" is required instead. # * If your modem needs switching, the following are also required: # - "uudecode" for decoding embedded Usb-ModeSwitch binary, # - "libusb" for Usb-ModeSwitch to work. # * "wvdial" is NOT required. However, if it is installed, by # default, "wvdial" is used instead of directly calling PPPD. # * "rfcomm" if you intend using your bluetooth phone as modem. # * hal utilities if you want hal to be updated: "lshal", "hal-device", # "hal-find-by-property", "hal-get-property", "hal-set-property". # #------------------------------------------------------------------------------- # # This script, by itself, may create the following files on your # filesystem: # * Various files inside your /tmp directory. # * .3gnet inside calling user's home directory (if writable). # * /etc/ppp/peers/sakis3g while ppp negotiation is taking place. # Only $HOME/.3gnet and /tmp/sakis3g.3gnet should persist when this # script is not running. # #------------------------------------------------------------------------------- # # Known limitations: # - For SIM card safety reasons, this script does its better to only # allow exactly 4-digit PIN numbers. # - This script does not allows sending SMS and does not intend to # do it in the future. # - This script does not in any way interfere with your iptables # configuration and does intend to do it in the future. As a note, # if you encounter problems sharing (do NAT on) your 3G ppp # connection, consider using the following command: # iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN \ # -j TCPMSS --clamp-mss-to-pmtu # - Author's English are not good enough, but should work for all # english speaking systems. # # Known problems: # - If you use this script, with 9menu interface, for several # connect/disconnect sessions, its memory footprint, process tree # and CPU usage increase due to recursive shell calls. # - If your modem recides on the same USB bus with another device # that also implements tty devices, and HAL is not installed on # your system, the wrong tty device may be selected. You may try # using another USB port of your computer as a workaround. To # review what else devices are on the same USB bus with your modem, # issue "lsusb -t". # - Embedded Usb-ModeSwitch binary is precompiled for i386. Will not work # on other platforms. # - Embedded 9menu binary is precompiled for i386. Will not work on other # platforms. # #------------------------------------------------------------------------------- # # Change log: # 2010/02/24 - 0.1.3g- * Upgraded to Usb-ModeSwitch device database that was # released on 2010/02/21. # # 2010/02/14 - 0.1.3f- * Added support for 85 networks across 25 countries: # * 21601: pannon (Hungary) # * 21630: T-Mobile (Hungary) # * 21670: Vodafone (Hungary) # * 21890: BH Mobile (Bosnia & Herzegovina) # * 22001: Telenor (Serbia) # * 22003: mts (Serbia) # * 22005: VIP (Serbia) # * 22601: Vodafone (Romania) # * 22603: COSMOTE (Romania) # * 22610: Orange (Romania) # * 22801: Swisscom (Switzerland) # * 22802: Sunrise (Switzerland) # * 22803: Orange (Switzerland) # * 23001: T-Mobile (Czech Republic) # * 23002: O2 (Czech Republic) # * 23003: Vodafone (Czech Republic) # * 23101: Orange (Slovakia) # * 23102: T-Mobile (Slovakia) # * 23104: T-Mobile (Slovakia) # * 24001: Telia (Sweden) # * 24002: 3 (Sweden) # * 24004: Sweden 3G (Sweden) # * 24005: Sweden 3G (Sweden) # * 24006: Telenor (Sweden) # * 24007: Tele2 (Sweden) # * 24008: Telenor (Sweden) # * 24201: Telenor (Norway) # * 24202: N COM (Norway) # * 24204: Network (Norway) # * 24205: Network (Norway) # * 24403: DNA (Finland) # * 24405: Elisa (Finland) # * 24421: Saunalahti (Finland) # * 24491: Sonera (Finland) # * 24701: LMT (Latvia) # * 24702: TELE2 (Latvia) # * 25001: MTS (Russia) # * 25002: Megafon (Russia) # * 25003: NCC (Russia) # * 25005: ETK (Russia) # * 25012: BWC (Russia) # * 25016: NTC (Russia) # * 25020: Tele2 (Russia) # * 25028: Beeline (Russia) # * 25035: Motiv (Russia) # * 25039: U-tel (Russia) # * 25099: Beeline (Russia) # * 25501: MTC (Ukraine) # * 25502: Beeline (Ukraine) # * 25503: Kyivstar (Ukraine) # * 25506: Life (Ukraine) # * 25507: Utel (Ukraine) # * 25701: VELCOM (Belarus) # * 25702: MTS (Belarus) # * 25703: Life (Belarus) # * 25901: Orange (Moldova) # * 25902: MOLDCELL (Moldova) # * 25904: Eventis (Moldova) # * 26001: Plus (Poland) # * 26002: ERA (Poland) # * 26003: Orange (Poland) # * 26006: Play Mobile (Poland) # * 27801: VODAFONE (Malta) # * 27821: GO Mobile (Malta) # * 29340: MOBITEL (Slovenia) # * 29341: SI MOBIL (Slovenia) # * 29701: ProMonte (Montenegro) # * 29702: T-Mobile (Montenegro) # * 29703: m:tel (Montenegro) # * 33402: TELCEL (Mexico) # * 33403: Movistar (Mexico) # * 50501: Telstra (Australia) # * 50502: Optus (Australia) # * 50503: Vodafone (Australia) # * 50506: 3 (Australia) # * 53000: Telecom (New Zealand) # * 53001: Vodafone (New Zealand) # * 53005: Telecom (New Zealand) # * 60400: Meditel (Morocco) # * 60401: IAM (Morocco) # * 65501: Voda (South Africa) # * 65507: Cell C (South Africa) # * 65510: MTN (South Africa) # * 71606: Movistar (Peru) # * 71610: Claro (Peru) # # 2010/02/11 - 0.1.3e- * Script now utilizes modems that while not advertizing # their GSM capabilities, they still provide their IMEI # number (which indicates GSM functionality). # # 2010/02/10 - 0.1.3d- * Updated settings for operators: # * 20205: Vodafone (Greece): Added prepay (CU) APN. # * Added support for operators: # * 20404: Vodafone (Netherlands) # * 20408: KPN (Netherlands) # * 20412: Telfort (Netherlands) # * 20416: T-Mobile (Netherlands) # * 20420: Orange (Netherlands) # * 20601: Proximus (Belgium) # * 20610: Mobistar (Belgium) # * 20620: Base (Belgium) # * 27001: LUXGSM (Luxemburg) # * 27077: Tango (Luxemburg) # * 27099: Orange (Luxemburg) # # 2010/02/07 - 0.1.3c- * Added support for operators: # * 20801: Orange (France) # * 20810: SFR (France) # * 20811: SFR (France) # * 20820: Bouygtel (France) # * 20821: Bouygtel (France) # * 21401: Vodafone (Spain) # * 21403: Orange (Spain) # * 21404: YOIGO (Spain) # * 21406: Vodafone (Spain) # * 21407: Movistar (Spain) # * 21408: Euskaltel (Spain) # * 21409: Orange (Spain) # * 21416: Telecable (Spain) # * 21417: R móbil (Spain) # * 21418: Ono (Spain) # * 21419: Simyo (Spain) # * 28001: Cytamobile Vodafone (Cyprus) # * 28010: MTN (Cyprus) # * Fixed following issues: # * Now checking if /usr/lib/kde4/libexec/kdesu is # available if no other graphical su is found. This # will allow using graphical su on KDE4 systems. # # 2010/02/05 - 0.1.3b- * Upgraded to Usb-ModeSwitch device database that was # released on 2010/02/03. # * Fixed the following issues: # * Notification appearing after connecting with # "toggle" argument, now also displays operator name. # * Whenever script awaits network logon (usually after # supplying PIN), instead of querying modem every one # second for a maximum of 15 seconds (15 tries, one # second difference), now queries every four seconds # for a maximum of 20 seconds (5 tries, 4 seconds # difference). This may help some modems. # * When Xterm window appears to prompt user for PIN # number, all required information are not read from # scratch. This eliminates issues where environment # is not passed to child process and accelerates # overall operation. # * When Xterm window appears to prompt user for PIN # number, while DEBUG variable is SET, user has to # press Ctrl+C for window to vanish. # * Script does not anymore jump to an existing X # session of user that invoked it, if it was invoked # from a tty console. # * If called from udevd, now properly captures access # to X DISPLAY :0. # * Uses xauth to gain access, if not having already, # and drops access when exiting, if it had not # access before. # * Only does so, if only one non-root user currently # has an X session running. # * Some initialization stuff is skipped when invoked # with a "don't-really-do-anything" argument like # "help", "status", "version". # * Script now makes sure PATH includes /bin, /usr/bin, # /sbin and /usr/sbin before proceeding. # * Timestamp information, when running with DEBUG set, # now only displays time information, skipping date # part. # # 2010/02/04 - 0.1.3 - * Improved udev integration. # * Added logposition configuration variable which # indicates log file that should be used when running # as a udev rule. # * A "debug" method now takes care of displaying debug # output when DEBUG variable is set. Displays PID and # timestamp along with message. Also reduced script # size for 5KB. # * Fixed the following issues: # * Josua Dietze provided a bug report and a patch for # serial device autodetection procedure which fixes # a regression issue, introduced by 0.1.2, preventing # many modems from having their correct tty device # chosen. # * Fixed a regression issue, introduced by 0.1.2, which # required a modem to be connected even when executing # with the "help" argument. # * When first using script, 9menu interface does not # any more appear as "Unnamed window". # * Configuration variable "debug" is now renamed to # "DEBUG". This allows for method "debug" to be # defined. # # 2010/02/01 - 0.1.2 - * Added better serial tty detection. This method will # allow more unknown modems to work. # * Added support for user defined modems. To use # a user defined modem, USBMODEM variable must # contain USB IDs in "XXXX:XXXX" hex form. # * If a specific driver is also required, USBDRIVER # variable can be used and should contain the module # required to be loaded. Examples: # By exporting variables: # $ export USBMODEM=1199:68a3 # $ export USBDRIVER=sierra # $ sakis3g connect # Or, in command line: # $ USBMODEM=1199:68a3 \ # > USBDRIVER=sierra \ # > sakis3g connect # Or, by editting this script and place them below # MYVERSION variable (especially if using sudo for # getting root privileges). # * When no known/switched modem is found, and USBMODEM # variable is not set, 9menu users are presented a # list of currently connected USB devices to choose # their modem from. # * An embedded 9menu binary is now included in script. # If: # * prefer_osd and stick_to_console are NOT set, and # * an X DISPLAY IS detected, and # * uudecode IS present, then # embedded 9menu binary is utilized. # * Added support for non-writable home directories. This # should allow better integration on LiveCD images. # * Added support for operators: # * 70401: Claro (Guatemala) # * 70402: Tigo (Guatemala) # * Added support for the following modems: # * 1c9e:f000 GBC PL68 # * Fixed the following issues: # * Drastically improved workflow to avoid executing # same things twice or more. Operation is now overally # faster. # * Does not any more randomly pickup a modem when more # than one modems are available. 9menu users are # provided a list of modems to choose from. OSD and # command line users must provide its name or USB IDs # as an extra command line argument. Argument must be # long enough to distinguish just one modem. # * Example: If two ZTE modems are connected, then # doing "sakis3g connect ZTE" will fail. # While "sakis3g connect MF636" will work # (if they are not both of the same model). # * Supported modems are not any more detected twice as # both their official name and as their SWITCHED # equivalent. # * If more than one modems are connected, does not any # more silently proceed with second one, if first one # failed to connect for whatever reason. # * Moved several parts, of autogenerated part, in the # first part. Released around 130 KB, given current # device database of Usb-ModeSwitch. # * Fixed a long existing issue preventing some # switchable devices from being properly switched. # Was providing wrong configuration file to # Usb-ModeSwitch. Affected devices are a subset of # devices with IDs: 05c6:1000 and 19d2:2000. # * Setting stick_to_console does not any more imply # alwayssudo. You must explicitly set alwayssudo for # sudo to be used. # * Less output should now appear when DEBUG or VERBOSE # are not set. # * User is now notified if tty device is occupied by # another process. This will help users understand # whether their modemmanager is messing with their # ports. # * Unknown, switched and user-defined modems are all # now given a 10 seconds period to settle connection # with driver. This increases time required to # connect, but sets more unsupported modems usable. # * When DEBUG variable is set, output is now more rich # during modem switching. # * Large pack of comments found on top part of script # are now more readable. # * Added copyright notices: # * when called with the "help" argument. # * on 9menu interface, before connecting. # # 2010/01/25 - 0.1.1 - * Updated to version 1.1.0 of Usb-ModeSwitch. # * Added support for operators offering more than # one APNs. # * FORCE_APN variable must be set if operator # provides more than one APNs, or if requires # subscriber number to be included in username # or password for ppp connection. # * VERXOSD option is renamed to VERBOSE and is now # turned off by default. # * Added support for operators: # * 22201: TIM (Italy) # * 22210: Vodafone (Italy) # * 22288: WIND (Italy) # * 22299: Tre (Italy) # * 26202: Vodafone (Germany) # * 26207: O2 (Germany) # * 26216: Vistream (Germany) # * 28601: Vodafone (Portugal) # * 28603: Optimus (Portugal) # * 28606: TMN (Portugal) # * 70802: Tigo (Honduras) # * Fixed the following issues: # * Script now waits for network logon even for # SIM cards that do not need PIN number. # * Script does not any more switch modem if # called with the "help" or "status" arguments. # # 2010/01/20 - 0.1.0 - * Added progress bar functionality for xosd # (osd_cat) users. # * Added support for operators: # * 20209: Wind (Greece) # * 23201: Mobilkom/A1 (Austria) # * 23203: T-Mobile (Austria) # * 23205: Orange (Austria) # * 23207: T-Mobile (Austria) # * 23210: Drei (Austria) # * 26201: T-Mobile (Germany) # * 26203: E-Plus (Germany) # * 26205: E-Plus (Germany) # * 26206: T-Mobile (Germany) # * 26277: E-Plus (Germany) # * 27602: Vodafone (Albania) # * Fixed the following issues: # * If "option" driver fails to create devices, # it removes it before attempting with driver # specified by modem configuration. # * Chown operations now do not define group # also. # * Desktop shortcut is now chmoded to 744. # * After supplying PIN number to modem, it now # waits for network logon prior to continuing. # # 2010/01/15 - 0.0.9 - * Fixed the following issues: # * Ironic messages appearing when cleaning up. # * Added wait interval support for devices # requiring it (only Huawei E170 and family # so far). # # 2010/01/14 - 0.0.8 - * Added support for modems: # * 12d1:1003: Huawei E170 E220 E230 E270 E870 # * Fixed the following issues: # * Does not mess with HAL for unknown modems. # * Now uses a combination of UID/EUID/USER for # determining if root. # # 2010/01/13 - 0.0.7 - * If no gksu/kdesu is found, switches to normal # su. Sudo is now used only when no X display # is found, or when stick_to_console is set, or # when alwayssudo is set. # * Fixed the following issues: # * Script had been checking for pppd/wvdial # existance, prior to being root. # * Script now checks for "chat" existance # before proceeding. # * Now relies on UID, instead of EUID for # determining being root or not. # # 2010/01/12 - 0.0.6 - * Added xosd support. xosd is used when if # neither 9menu nor aosd_cat are installed. It # is more popular among distributions. If xosd # is also not found, fallbacks to terminal. # * Fixed the following issues: # * Calls to "which" redirect stderr output to # /dev/null. This should eliminate spamming # occuring on some configurations. # * When "gksu" is not present, checks if "kdesu" # exists, and uses that one instead. This # should prevent it from using "sudo" on KDE # systems. # # 2010/01/10 - 0.0.5 - * Added HAL support (fallbacks to previous # method if HAL is not available): # - /dev/tty* device is determined by accessing # HAL devices. # - HAL is updated of modem capabilities if not # already set. This should make modem device # appear on Network Manager. # * Added command line argument "setup", which # only setups modem(s): # - Switches modem (if not switched). # - Loads kernel driver (if not loaded). # - Updates HAL for modem capabilities (if not # already aware). # Using this argument, can be used as udev rule # for setting up device and allow use of other # applications. # * Now uses option driver and if still no serial # devices appear, the one on config is used # instead. # * Fixed the following bugs: # * Now makes sure it has root privileges before # invoking Usb_ModeSwitch. # * If modem gets disconnected, while 9menu is # running, it scans if other usable hardware # is present. If not, aborts. # # 2010/01/09 - 0.0.4 - * Updated to version 1.0.7 of Usb_ModeSwitch # # 2010/01/04 - 0.0.3 - * Sakis3G now embeds whole Usb_ModeSwitch # database. This makes clear to whom one # should refer if not working. Issue a # "sakis3g connect" from a terminal and # watch for messages appearing. If your # modem gets switched, you should contact # Sakis3G author. If modem does not get # switched, is probably a new device and # you should contact Usb_ModeSwitch forum # for further troubleshooting instructions. # * If your modem is not supported by Sakis3G, # still Usb_ModeSwitch database includes it # in its database, default initialization # strings are sent to it. # * Sakis3G now detects tty devices appearing # from the USB Bus that your modem is attached # on, autodetecting appropriate tty device. This # should handle cases where other devices, USB # or not, create /dev/tty* nodes. If you still # have wrong /dev/tty* node selected, try using # another USB port. Try "lsusb -t" to see what # else devices reside on the same USB bus. # # 2010/01/02 - 0.0.2 - Initial version published to celebrate blog # creation. Only author's equipment and operators # are supported. # * Added comments and instructions within # shell script, to increase reusability. # # Don't know - 0.0.1 - Made initially by the author to allow his # family members to use 3G connections, and # easier installation accross different # home PCs. # ################################################################################ ################################################################################ ## User configuration START ## ## IMPORTANT: ## Those variables that are flags (that is, having their value ## equal to "1", or "yes", or "on"), their value is not really ## checked, just their presence. This means, if you want them ## to be toggled false, you should not use "0", or "no", or ## "off". Instead, you should completely comment them out. This ## script only checks if they were set or not, not their actual ## contents. As an example: alwayssudo=no, is considered a yes ## because alwayssudo variable is set. ## #------------------------------------------------------------------------------- ## ## SIM PIN ## # If your SIM card requires PIN, you should enter it here. # # ATTENTION: Entering the wrong PIN for a couple of times # will render your SIM unusable, until PUK is supplied. This # script does not provide a way to provide PUK. You may plug # blocked SIM into a cellular phone to enter PUK. # # If exists file named .3gpin inside calling user's home # directory, it overrides this value. This can be useful in # cases where each user has his own modem. # # If exists file /etc/3gpin, it overrides everything. This # can be useful in cases where you don't want to reveal PIN # to users, and in order to prevent them from blocking SIM by # subsequent wrong PIN requests. # # BEWARE: if DEBUG is on, PIN is revealed. # # If this field is empty, and none of the files above exists, # this script never attempts to unlock SIM, and finally aborts. # # If you can take the risk, you can increase SIM card's # integrity (and decrease time required for establishing # connection) by completely removing PIN from SIM. The easy # way to do it, is inserting the SIM card to a cellular # phone and permanently unlock it. # # Last, but not least, if instead of PIN, this variable, or # /home/dir/.3gpin, or /etc/3gpin contains the word "prompt", # user is prompted to enter PIN. However, this may be risky # on systems with many X displays, with the prompt window # appearing on the wrong DISPLAY, wrong user entering wrong # PIN and SIM finally getting blocked. # # BEWARE: If you use multiple SIM cards/modems, it may # happen that PIN is sent to the wrong SIM. If you intend # using more than one SIM cards, you should have set SIM_PIN # option set to "prompt". # #SIM_PIN="" SIM_PIN="prompt" #SIM_PIN="7471" #------------------------------------------------------------------------------- ## ## Force specific APN ## # Some operators offer multiple APNs (APNs are specified by # issuing AT+CGDCONT command to modem). They usually refer to # different billing plans, or to support Virtual Operators # served from within the same Real network. Thus, choosing the # corrent APN is crucial for your bill. Script cannot decide # for you, and will prompt you to specify it yourself. # # If you specify it within script (by uncommenting line below), # users will be unable to change it. This may lead connection # impossible if a SIM card from another network is inserted. # # User-friendlier way is to leave this entry commented, and let # users specify it by using environment variables. Both ways # below do the same: # # [Way #1] # $ FORCE_APN=internet::web:web /usr/sbin/sakis3g connect # # [Way #2] # $ export FORCE_APN=internet::web:web # $ /usr/sbin/sakis3g connect # # NOTE: Some operators require subscriber number (that is your # phone number) be included as (part of the) username or # as (part of the) password. If this is the case for you, # then you really need to use this variable. # # NOTE: If you use "alwayssudo" option below, the only way to # specify APN is by including it to this script. # # NOTE: If 9menu interface is installed on your system, you # only need to specify this value to avoid selecting it # each time, or to prevent users from selecting it # themselves. If you don't specify it, you will be prompt # to select it, each time you attempt connect. # # Each APN should consist of four colon-separated fields. 1st is # actual APN that should be sent to modem, second is a friendlier # title (spaces should be replaced with undescores), third is # username, fourth is password. # # e.g. # internet.myoperator.com:My_Operator_(Internet):wap:wap # # If your operator offers multiple APNs, you can get a list of # possible values by executing this script from command line. # #FORCE_APN=internet:My_Connection:mynumber:mypassword #------------------------------------------------------------------------------- ## ## Force specific ISP code ## # If your modem does not support AT+COPS commands, which # is required for autodetecting your operator, you can still # force this script to use your exact operator. Uncomment this # line to force your operator, see list of supported operators # on ISP config section below. # # ATTENTION: This option *should* (is not tested, and it also # depends on modem) prevent your modem from roaming. However, # if you are out of country, you may be unable to connect. # # e.g # FORCE_ISP=20201 forces GR COSMOTE #FORCE_ISP=20201 #------------------------------------------------------------------------------- ## ## 3G over bluetooth phone ## # If you have a bluetooth phone, already set up, with its # dial up interface binded to a /dev/rfcomm node, you can # enter this port here. Bluetooth phone will only be used # in case no other supported modem is connected. #BLUETOOTH_PHONE_rfcomm="/dev/rfcomm2" #------------------------------------------------------------------------------- ## ## Custom DNS servers ## # You can request from this script to set specific DNS # servers, overriding those that may be supplied by # your ISP. Uncomment both dnsserver1 and dnsserver2 # if you don't want to use ISP supplied list. # A good choice for fast surfing are google DNS servers # located at 8.8.8.8 and 8.8.4.4. dnsserver1="8.8.8.8" dnsserver2="8.8.4.4" #------------------------------------------------------------------------------- ## ## Sick connections ## # Some modems have trouble getting the IPs of remote peer and # DNS servers, leading into default values: # Peer IP: 10.64.64.64 # DNS #1: 10.11.12.13 # DNS #2: 10.11.12.14 # It is generally safe to leave sick connections alone if you # have selected your own DNS servers (see above). If your # connection works ok, even when a sick connection is made, # you can safely uncomment the following option. This can also # save time durign connection if your modem makes sick # connections often enough. sick_are_ok=yes #------------------------------------------------------------------------------- ## ## Root priviledges claiming method ## # This script needs root priviledges for some of its # functionalities. If X DISPLAY is found, it attempts # to get root priviledges using gksu/kdesu popup functionality. # If no X DISPLAY is found, it attempts to sudo call itself. # # For sudo to succeed, you need to add to sudo file the # following line, and users that should be able to establish # 3G connections to dialout group: # %dialout ALL=(root) NOPASSWD: /absolute/path/to/this/script # All users belonging to dialout group will be able to # properly execute this script. # (dialout group is used as an example, you can use whatever # is convinient for you) # # If you want this script to always use sudo, instead of # gksu/kdesu, uncomment the following line. This has the added # bonus that you don't need to reveal root password to users. #alwayssudo=yes #------------------------------------------------------------------------------- ## ## DEBUG ## # Uncomment the following line to enable DEBUG messages to appear # on calling tty. # # BEWARE: Too much spamming, you may see errors that are actually # intended, or handled. Don't panic. PIN is revealed if # DEBUG is used. #DEBUG=on #------------------------------------------------------------------------------- ## ## Display log console ## # Uncomment the following line to enable connection console to # appear on your X display. Closing console, cancels connection. # This option allows you to observe what wvdial and pppd are # doing and is useless if this script is already running on a # terminal. #log_connection=on #------------------------------------------------------------------------------- ## ## Force script to ignore X displays of the system ## # Uncomment line below to force this script to remain in console # and do not attempt to use an X-session. Do not use it if you # intend to use this script from your desktop. #stick_to_console=yes #------------------------------------------------------------------------------- ## ## Notification method preference ## # If an X display is found, script attempts to locate 9menu for # creating a little window to guide you through connection with # your ISP. If 9menu is not found, it attempts to locate aosd_cat # or xosd_cat, for displaying messages on X display instead. # # Uncomment line below if you have both 9menu and aosd-cat/xosd_cat # installed but you prefer OSD. This allows different users of the # system to utilize different behaviour, by having each, his own # copy of this script (this however needs multiple entries in # sudoers file). # # This variable is useless if stick_to_console is used. #prefer_osd=1 #------------------------------------------------------------------------------- ## ## Menu font ## # Specifies font used when displaying 9menu. For a list of # supported values, use xfontsel or xlsfonts to find a valid # one for your system. # #menufont="-unknown-freesans-medium-r-normal-*-17-*-*-*-*-*-*-*" menufont="-monotype-arial-medium-r-normal-*-18-*-*-*-*-*-*-*" #menufont="-dejavu-sans-medium-r-normal-*-18-*-*-*-*-*-*-*" #------------------------------------------------------------------------------- ## ## Verbose mode ## # Enable this option to utilize verbose mode. This enables # messages displaying in terminal. Not that much detailed # as in DEBUG mode, but helps understand what script is # currently doing. # # If verbose mode is enabled, xosd (osd-cat) is installed # and this script is running through an X session, osd-cat # is used to present a progress bar while establishing # connections. #VERBOSE=yes #------------------------------------------------------------------------------- ## ## XOSD Font ## # Defines font name and size used when displaying OSD # text using xosd. For a list of supported values, use # xfontsel or xlsfonts to find a valid one for your system. # #XOSDFONT="-*-helvetica-*-r-*-*-36-*-*-*-*-*-*-*" XOSDFONT='-*-freesans-bold-r-*-*-36-*-*-*-*-*-*-*' #XOSDFONT='-adobe-helvetica-*-r-*-*-24-*-*-*-*-*-*-*' #XOSDFONT='-misc-fixed-medium-r-semicondensed--36-*-*-*-c-*-*-*' #XOSDFONT='-monotype-arial-medium-r-normal-*-36-*-*-*-*-*-*-*' #------------------------------------------------------------------------------- ## ## AOSD Font ## # Defines font name and size used when displaying OSD # text using aosd-cat. OSDFONT='DejaVuSans 36' #------------------------------------------------------------------------------- ## ## Wvdial/pppd attempts ## # Number of subsequent wvdial/pppd tries that will be # performed before calling the connection attempt failed. wvdialattempts=3 #------------------------------------------------------------------------------- ## ## Wvdial/pppd wait interval ## # Amount of time (in seconds) given to wvdial/pppd in order to # establish connection. This time depends, among others, on # your hardware, signal reception strength, band available, # bluetooth overhead and SIM lock. # # Ten seconds should be enough for good signaled 3G USB # connections. You may need to increase it if wvdial/pppd needs # more time (i.e. this script kills wvdial/pppd while it is in # the middle of negotiation). wait_interval=10 #------------------------------------------------------------------------------- ## ## Connect hook ## # This option defines command to be executed after connection # is established. Whenever connection is succesful, this # command will be block-executed (use setsid to avoid it). # This is useful if, for example, you want to setup NAT for # sharing your ppp connection. # All variables are exported to that command e.g. $pppint # will contain ppp interface. If you want to see variables # use "set" as connection_hook. # # BEWARE: Make sure your command does not contain syntax # errors. # # ATTENTION: Whatever you enter here, will be executed as # root. You are warned. # #connection_hook="set" #------------------------------------------------------------------------------- ## ## PPP interface ## # This should match the interface name that your version of # pppd is creating. Chances are that this needs to be ppp0. # # BEWARE: This script will kill all pppd instances when # "disconnect" is selected, thus eliminating any other ppp # connections you might have running. If you have a complex # setup (i.e. bridging accross ppp connections), you should # NOT (need to) use this script, as it also messes up with # your routing tables: you were warned. pppint="ppp0" #------------------------------------------------------------------------------- ## ## Communication backend ## # This option allows directly using pppd instead of going # through wvdial. This allows less dependencies, by relying # only to pppd. This option is automatically set if wvdial # is not installed. However, it may make it impossible for you # to connect, if logic embedded inside wvdial is required. # After all, this is just a shell script :) #direct_pppd=yes #------------------------------------------------------------------------------- ## ## Log position ## # Full filename of log file location that should be used whenever # this script is executed by udev. logposition="/var/log/sakis3g.log" #------------------------------------------------------------------------------- ## User configuration END ## You should normally not need to edit below this marker, ## unless: ## ## - You have a USB modem not supported by this script. ## - You use an operator not known to this script. ## - All of the above ################################################################################ ################################################################################ ## ISP setup START ################################################################################ # ISP related init strings. This script asks modem on # what operator it is connected. It then expects to find # variables having the following syntax: # # Required: # ISP__name # ISP__phone # ISP__apn # # Optional: # ISP__product # ISP__menufgcolor # ISP__menubgcolor # ISP__icon # # Thus, editing one of the variables below will be useless if you # are not indeed using that operator. # # To retrieve the name of your operator, open up minicom, kermit, # or your own serial terminal and enter the following commands: # # AT+COPS=0,2 # AT+COPS? # # Output should look like this: # # ATZ # OK # AT+CPIN? # +CPIN: SIM PIN # OK # AT+CPIN=1234 # +CPIN: READY # OK # AT+COPS=0,2 # OK # AT+COPS? # +COPS: 0,2,"20201",0 # OK # AT+COPS=0,0 # OK # AT+COPS? # +COPS: 0,0,"GR COSMOTE",2 # OK # # Then, use reported operator ID, to create corresponding # variables. # # _apn variable is a space separated list of available APNs # for this operator. Each APN should consist of four colon # separated fields. 1st is actual APN that should be sent to # modem, second is a friendlier title (spaces should be replaced # with undescores), third is username, fourth is password. # # If you made it, consider emailing required information for # your operator, back to the author of this script. # # Confirmed by Sakis ISP_20201_name="GR COSMOTE" ISP_20201_product="Cosmote Internet on the Go" ISP_20201_apn="internet:Internet:user:pass" ISP_20201_phone="*99#" ISP_20201_menufgcolor=white ISP_20201_menubgcolor=rgb:8D/C9/19 ISP_20201_icon="http://www.cosmote.gr/cosmote/resources/images/sm_logo_on_green.gif" # Confirmed by Sakis ISP_20205_name="VODAFONE GR" ISP_20205_product="VODAFONE Live" ISP_20205_apn="internet.vodafone.gr:Internet:user:pass webkarta.vodafone.gr:CU_Internet:user:pass" ISP_20205_phone="*99#" ISP_20205_menufgcolor=white ISP_20205_menubgcolor=red ISP_20205_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Confirmed by Sakis ISP_20209_name="WIND GR" ISP_20209_product="Wind ADSM" ISP_20209_apn="gint.b-online.gr::web:web" ISP_20209_phone="*99***1#" ISP_20209_menufgcolor=blue ISP_20209_menubgcolor=white ISP_20209_icon="http://www.wind.com.gr/wind_amea/images/logo_1.gif" # Confirmed by Sakis ISP_20210_name="WIND GR" ISP_20210_product="Wind ADSM" ISP_20210_apn="gint.b-online.gr::web:web" ISP_20210_phone="*99***1#" ISP_20210_menufgcolor=blue ISP_20210_menubgcolor=white ISP_20210_icon="http://www.wind.com.gr/wind_amea/images/logo_1.gif" # Unconfirmed, based on information found on Internet ISP_20404_name="Vodafone NL" ISP_20404_product="Vodafone Mobiel Internet" ISP_20404_apn="live.vodafone.com:Non-business:vodafone:vodafone office.vodafone.nl:Business:vodafone:vodafone" ISP_20404_phone="*99#" ISP_20404_menufgcolor=white ISP_20404_menubgcolor=red ISP_20404_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_20408_name="NL KPN" ISP_20408_product="KPN Mobiel Internet" ISP_20408_apn="internet:KPN:KPN:gprs internet:Telfort:telfortnl:pass portalmmm.nl:Hi:user:pass umts.xs4all.nl:XS4ALL:user:pass" ISP_20408_phone="*99#" ISP_20408_menufgcolor=white ISP_20408_menubgcolor=rgb:29/aa/2b ISP_20408_icon="http://www.kpn.com/v2/static/kpncom/images/kpn_logo.png" # Unconfirmed, based on information found on Internet ISP_20412_name="Telfort NL" ISP_20412_product="T-Mobile Mobiel Internet" ISP_20412_apn="internet::telfortnl:pass" ISP_20412_phone="*99#" ISP_20412_menufgcolor=white ISP_20412_menubgcolor=blue ISP_20412_icon="http://www.prepaidgsm.net/loghi/logo_telfort.gif" # Unconfirmed, based on information found on Internet ISP_20416_name="T-Mobile NL" ISP_20416_product="T-Mobile Mobiel Internet" ISP_20416_apn="internet:Internet:user:pass internet.ben:Ben:user:pass" ISP_20416_phone="*99#" ISP_20416_menufgcolor=white ISP_20416_menubgcolor=pink ISP_20416_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_20420_name="Orange NL" ISP_20420_product="Orange Mobiel Internet" ISP_20420_apn="internet::orange:orange" ISP_20420_phone="*99#" ISP_20420_menufgcolor=white ISP_20420_menubgcolor=orange ISP_20420_icon="http://i5.woopic.com/I/Header/orange.gif" # Unconfirmed, based on information found on Internet ISP_20601_name="BEL PROXIMUS" ISP_20601_product="Proximus Mobile Internet" ISP_20601_apn="internet.proximus.be:Inter:user:pass intraprox.be:Intra:user:pass" ISP_20601_phone="*99#" ISP_20601_menufgcolor=white ISP_20601_menubgcolor=rgb:2f/20/7b ISP_20601_icon="http://customer.proximus.be/img3ldr/paw30/logos/proximus.png" # Unconfirmed, based on information found on Internet ISP_20610_name="B mobistar" ISP_20610_product="Mobistar Mobile Internet" ISP_20610_apn="internet.be:Mobistar_Personal:mobistar:mobistar web.pro.be:Mobistar_Business:mobistar:mobistar iew.be:Mobistar_Internet_Everywhere:mobistar:mobistar telenetwap.be:Telenet_Mobile:user:pass" ISP_20610_phone="*99#" ISP_20610_menufgcolor=black ISP_20610_menubgcolor=rgb:f0/f0/f0 ISP_20610_icon="http://www.mobistar.be/nl/e-services/spage/images/logo/mobistar.gif" # Unconfirmed, based on information found on Internet ISP_20620_name="Base" ISP_20620_product="Base Mobile Internet" ISP_20620_apn="gprs.base.be:BASE:user:pass orangeinternet:Orange:user:pass" ISP_20620_phone="*99#" ISP_20620_menufgcolor=rgb:43/5f/79 ISP_20620_menubgcolor=rgb:dd/e6/f7 ISP_20620_icon="http://www.prepaidgsm.net/loghi/logo_base.gif" # Unconfirmed, based on information found on Internet ISP_20801_name="Orange F" ISP_20801_product="Orange Internet 3G+" ISP_20801_apn="orange.fr:Orange_Contract:orange:orange internet-entreprise:Orange_Business_Contract:orange:orange orange:Orange_Mobicarte:orange:orange orange-mib:Orange_MIB:mportail:mib orange.ie:Orange_Internet_Everywhere_3G:user:pass orange.fr.mnc001.mcc208.gprs:France_Telecom_GPRS:gprs:pass ao.fr:TEN:orange:orange ofnew.fr:TEN_Pay-by-MB:orange:orange" ISP_20801_phone="*99#" ISP_20801_menufgcolor=white ISP_20801_menubgcolor=orange ISP_20801_icon="http://i5.woopic.com/I/Header/orange.gif" # Unconfirmed, based on information found on Internet ISP_20810_name="F SFR" ISP_20810_product="Clé Internet 3G+" ISP_20810_apn="websfr:Web_SFR:user:pass wap65:A_Mobile:user:pass" ISP_20810_phone="*99#" ISP_20810_menufgcolor=white ISP_20810_menubgcolor=red ISP_20810_icon="http://www.sfr.fr/mobile/edito/img/logoSFR.png" # Unconfirmed, based on information found on Internet ISP_20811_name="F SFR" ISP_20811_product="Clé Internet 3G+" ISP_20811_apn="websfr:Web_SFR:user:pass wap65:A_Mobile:user:pass" ISP_20811_phone="*99#" ISP_20811_menufgcolor=white ISP_20811_menubgcolor=red ISP_20811_icon="http://www.sfr.fr/mobile/edito/img/logoSFR.png" # Unconfirmed, based on information found on Internet ISP_20820_name="Bouygtel FR" ISP_20820_product="Internet Mobile 3G+" ISP_20820_apn="ebouygtel.com:ebouygtel:user:pass b2bouygtel.com:B2Bouygtel:user:pass" ISP_20820_phone="*99#" ISP_20820_menufgcolor=rgb:02/a9/bc ISP_20820_menubgcolor=white ISP_20820_icon="http://www.bouyguestelecom.fr/client/homev2/imagesSite/header/logo-bouygues-telecom.png" # Unconfirmed, based on information found on Internet ISP_20821_name="Bouygtel FR" ISP_20821_product="Internet Mobile 3G+" ISP_20821_apn="ebouygtel.com:ebouygtel:user:pass b2bouygtel.com:B2Bouygtel:user:pass" ISP_20821_phone="*99#" ISP_20821_menufgcolor=rgb:02/a9/bc ISP_20821_menubgcolor=white ISP_20821_icon="http://www.bouyguestelecom.fr/client/homev2/imagesSite/header/logo-bouygues-telecom.png" # Unconfirmed, based on information found on Internet ISP_21401_name="Vodafone ES" ISP_21401_product="Vodafone Internet en el Móvil" ISP_21401_apn="airtelnet.es:Vodafone:vodafone:vodafone gprs.pepephone.es:Pepephone:user:pass" ISP_21401_phone="*99#" ISP_21401_menufgcolor=white ISP_21401_menubgcolor=red ISP_21401_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_21403_name="Orange ES" ISP_21403_product="Orange Internet Everywhere" ISP_21403_apn="internet:Orange:CLIENTE:AMENA internetmas:Másmovil:user:pass gprs-service.com:Simyo:user:pass" ISP_21403_phone="*99#" ISP_21403_menufgcolor=white ISP_21403_menubgcolor=orange ISP_21403_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_21404_name="YOIGO ES" ISP_21404_product="Yoigo internet móvil" ISP_21404_apn="Internet::user:pass" ISP_21404_phone="*99#" ISP_21404_menufgcolor=pink ISP_21404_menubgcolor=white ISP_21404_icon="http://www.prepaidgsm.net/loghi/logo_yoigo.gif" # Unconfirmed, based on information found on Internet ISP_21406_name="Vodafone ES" ISP_21406_product="Vodafone Internet en el Móvil" ISP_21406_apn="airtelnet.es:Vodafone:vodafone:vodafone gprs.pepephone.es:Pepephone:user:pass" ISP_21406_phone="*99#" ISP_21406_menufgcolor=white ISP_21406_menubgcolor=red ISP_21406_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_21407_name="Movistar ES" ISP_21407_product="Movistar internet móvil" ISP_21407_apn="movistar.es:Movistar:movistar:movistar Internet:Yoigo:user:pass" ISP_21407_phone="*99#" ISP_21407_menufgcolor=blue ISP_21407_menubgcolor=white ISP_21407_icon="http://www.movistar.es/flot/terminales_multiidioma/img/logo_movistar_term_multiidioma.jpg" # Unconfirmed, based on information found on Internet ISP_21408_name="Euskaltel ES" ISP_21408_product="Euskaltel internet móvil" ISP_21408_apn="internet.euskaltel.mobi::CLIENTE:EUSKALTEL" ISP_21408_phone="*99#" ISP_21408_menufgcolor=white ISP_21408_menubgcolor=orange ISP_21408_icon="http://www.euskaltel.com/webektest/Galeria/Imagenes/homes/empresa/tximeleta_gris.jpg" # Unconfirmed, based on information found on Internet ISP_21409_name="Orange ES" ISP_21409_product="Orange Internet Everywhere" ISP_21409_apn="internet:Orange:CLIENTE:AMENA internetmas:Másmovil:user:pass gprs-service.com:Simyo:user:pass" ISP_21409_phone="*99#" ISP_21409_menufgcolor=white ISP_21409_menubgcolor=orange ISP_21409_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_21416_name="Telecable ES" ISP_21416_product="Telecable internet móvil" ISP_21416_apn="internet.telecable.es::telecable:telecable" ISP_21416_phone="*99#" ISP_21416_menufgcolor=blue ISP_21416_menubgcolor=white ISP_21416_icon="http://web.telecable.es/pages/img/es/portal/logoEmpresa.gif" # Unconfirmed, based on information found on Internet ISP_21417_name="R móbil ES" ISP_21417_product="mundo R internet móvil" ISP_21417_apn="internet.mundo-r.com::user:pass" ISP_21417_phone="*99#" ISP_21417_menufgcolor=black ISP_21417_menubgcolor=white ISP_21417_icon="http://particulares.mundo-r.com/WCR/imx/r.gif" # Unconfirmed, based on information found on Internet ISP_21418_name="Ono ES" ISP_21418_product="Ono Banda Ancha Movil" ISP_21418_apn="internet.ono.com::user:pass" ISP_21418_phone="*99#" ISP_21418_menufgcolor=black ISP_21418_menubgcolor=white ISP_21418_icon="http://www.ono.es/img/ono_logo.png" # Unconfirmed, based on information found on Internet ISP_21419_name="Simyo ES" ISP_21419_product="Simyo internet móvil" ISP_21419_apn="gprs-service.com::user:pass" ISP_21419_phone="*99#" ISP_21419_menufgcolor=orange ISP_21419_menubgcolor=white ISP_21419_icon="http://www.simyo.es/documentos/logos_prensa/simyo_logo_small.jpg" # Unconfirmed, based on information found on Internet ISP_21601_name="pannon HU" ISP_21601_product="pannon internet" ISP_21601_apn="netx:átalánydíjas:user:pass net:Normál:user:pass snet:Tömörített:user:pass" ISP_21601_phone="*99#" ISP_21601_menufgcolor=white ISP_21601_menubgcolor=rgb:00/99/ff ISP_21601_icon="http://www.pannon.hu/i/site_logo.jpg" # Unconfirmed, based on information found on Internet ISP_21630_name="T-Mobile HU" ISP_21630_product="T-Mobile Mobilinternet" ISP_21630_apn="internet:Internet:user:pass mms-westel:MMS:mms:pass" ISP_21630_phone="*99#" ISP_21630_menufgcolor=white ISP_21630_menubgcolor=pink ISP_21630_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_21670_name="Vodafone HU" ISP_21670_product="Vodafone Internet" ISP_21670_apn="standardnet.vodafone.net:Előf._Normál:vodawap:vodawap internet.vodafone.net:Előf._töm.:vodawap:vodawap vitamax.snet.vodafone.net:Felt._norm.:user:pass vitamax.internet.vodafone.net:Felt._töm.:user:pass" ISP_21670_phone="*99#" ISP_21670_menufgcolor=white ISP_21670_menubgcolor=red ISP_21670_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_21890_name="BH Mobile" ISP_21890_product="BH mobilni internet" ISP_21890_apn="mms.bhmobile.ba::user:pass" ISP_21890_phone="*99#" ISP_21890_menufgcolor=white ISP_21890_menubgcolor=orange ISP_21890_icon="http://www.prepaidgsm.net/loghi/logo_bhtelecom.gif" # Unconfirmed, based on information found on Internet ISP_22001_name="RS Telenor" ISP_22001_product="Telenor Internet" ISP_22001_apn="internet::telenor:gprs" ISP_22001_phone="*99#" ISP_22001_menufgcolor=white ISP_22001_menubgcolor=rgb:00/99/ff ISP_22001_icon="http://www.telenor.co.yu/images/logo.gif" # Unconfirmed, based on information found on Internet ISP_22003_name="mts RS" ISP_22003_product="mts Surf" ISP_22003_apn="gprsinternet::mts:064" ISP_22003_phone="*99#" ISP_22003_menufgcolor=white ISP_22003_menubgcolor=red ISP_22003_icon="http://www.prepaidgsm.net/loghi/logo_telekomsrbija.gif" # Unconfirmed, based on information found on Internet ISP_22005_name="RS VIP" ISP_22005_product="VIP Internet" ISP_22005_apn="vipmobile::vipmobile:vipmobile" ISP_22005_phone="*99#" ISP_22005_menufgcolor=white ISP_22005_menubgcolor=rgb:b4/51/6b ISP_22005_icon="http://www.vipmobile.rs/images/basic/logo_trim.png" # Unconfirmed, based on information found on Internet ISP_22201_name="I TIM" ISP_22201_product="TIM Internet" ISP_22201_apn="ibox.tim.it:ibox:user:pass wap.tim.it:WAP:WAPTIM:pass" ISP_22201_phone="*99#" ISP_22201_menufgcolor=white ISP_22201_menubgcolor=blue ISP_22201_icon="http://www.tim.it/showimg/55933.gif" # Unconfirmed, based on information found on Internet ISP_22210_name="Vodafone IT" ISP_22210_product="Vodafone Internet" ISP_22210_apn="web.omnitel.it::user:pass" ISP_22210_phone="*99#" ISP_22210_menufgcolor=white ISP_22210_menubgcolor=red ISP_22210_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_22288_name="I WIND" ISP_22288_product="Wind Internet Mobile" ISP_22288_apn="internet.wind:Internet:Wind:Wind internet.wind.biz:Business_Internet:Wind:Wind" ISP_22288_phone="*99#" ISP_22288_menufgcolor=white ISP_22288_menubgcolor=orange ISP_22288_icon="http://www.wind.com.gr/wind_amea/images/logo_1.gif" # Unconfirmed, based on information found on Internet ISP_22299_name="3 ITA" ISP_22299_product="Tre Internet Mobile" ISP_22299_apn="tre.it:Tre(Ricaricabile):user:pass datacard.tre.it:Tre(Abbonamento):user:pass apn.fastweb.it:Fastweb(Voce/dati):user:pass datacard.fastweb.it:Fastweb(Solo_dati):user:pass" ISP_22299_phone="*99#" ISP_22299_menufgcolor=rgb:00/ff/ff ISP_22299_menubgcolor=white ISP_22299_icon="http://www.tre.it/imgs/logo.jpg" # Unconfirmed, based on information found on Internet ISP_22601_name="Vodafone RO" ISP_22601_product="Vodafone Internet" ISP_22601_apn="internet.vodafone.ro::internet.vodafone.ro:vodafone" ISP_22601_phone="*99#" ISP_22601_menufgcolor=white ISP_22601_menubgcolor=red ISP_22601_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_22603_name="COSMOTE RO" ISP_22603_product="Cosmote Connect" ISP_22603_apn="internet::user:pass" ISP_22603_phone="*99#" ISP_22603_menufgcolor=white ISP_22603_menubgcolor=rgb:8D/C9/19 ISP_22603_icon="http://www.cosmote.gr/cosmote/resources/images/sm_logo_on_green.gif" # Unconfirmed, based on information found on Internet ISP_22610_name="Orange RO" ISP_22610_product="Orange Internet" ISP_22610_apn="internet::user:pass" ISP_22610_phone="*99#" ISP_22610_menufgcolor=white ISP_22610_menubgcolor=orange ISP_22610_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_22801_name="SWISS GSM" ISP_22801_product="Swisscom mobile internet" ISP_22801_apn="gprs.swisscom.ch::gprs:gprs" ISP_22801_phone="*99#" ISP_22801_menufgcolor=rgb:00/00/49 ISP_22801_menubgcolor=white ISP_22801_icon="http://de.swisscom.ch/img/logo_swisscom.gif" # Unconfirmed, based on information found on Internet ISP_22802_name="Sunrise CH" ISP_22802_product="Sunrise Internet" ISP_22802_apn="internet::internet:internet" ISP_22802_phone="*99#" ISP_22802_menufgcolor=white ISP_22802_menubgcolor=rgb:72/12/3d ISP_22802_icon="http://www1.sunrise.ch/is-bin/intershop.static/WFS/Sunrise-Residential-Site/-/de_CH/images/branding.gif" # Unconfirmed, based on information found on Internet ISP_22803_name="Orange CH" ISP_22803_product="Orange Internet Everywhere" ISP_22803_apn="mobileoffice3g::user:pass" ISP_22803_phone="*99#" ISP_22803_menufgcolor=white ISP_22803_menubgcolor=orange ISP_22803_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_23001_name="T-Mobile CZ" ISP_23001_product="T-Mobile Internet" ISP_23001_apn="internet.t-mobile.cz:T-Mobile_Internet:user:pass internet.click.cz:Paegas_Internet:user:pass profil.click.cz:Paegas_Profil:user:pass" ISP_23001_phone="*99#" ISP_23001_menufgcolor=white ISP_23001_menubgcolor=pink ISP_23001_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_23002_name="O2 CZ" ISP_23002_product="O2 Internet" ISP_23002_apn="gointernet:Go:user:pass internet:Contract:user:pass internet.open:Open_Contract:user:pass" ISP_23002_phone="*99#" ISP_23002_menufgcolor=white ISP_23002_menubgcolor=rgb:17/7d/b9 ISP_23002_icon="http://www.o2online.de/nw/assets/header/header-small-o2-logo-bild.gif" # Unconfirmed, based on information found on Internet ISP_23003_name="Vodafone CZ" ISP_23003_product="Vodafone Internet" ISP_23003_apn="internet:Postpaid:wap:wap ointernet:Prepaid:user:pass" ISP_23003_phone="*99#" ISP_23003_menufgcolor=white ISP_23003_menubgcolor=red ISP_23003_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_23101_name="Orange SK" ISP_23101_product="Orange mobilný internet" ISP_23101_apn="internet::user:pass" ISP_23101_phone="*99#" ISP_23101_menufgcolor=white ISP_23101_menubgcolor=orange ISP_23101_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_23102_name="T-Mobile SK" ISP_23102_product="T-Mobile mobilný internet" ISP_23102_apn="internet::user:pass" ISP_23102_phone="*99#" ISP_23102_menufgcolor=white ISP_23102_menubgcolor=pink ISP_23102_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_23104_name="T-Mobile SK" ISP_23104_product="T-Mobile mobilný internet" ISP_23104_apn="internet::user:pass" ISP_23104_phone="*99#" ISP_23104_menufgcolor=white ISP_23104_menubgcolor=pink ISP_23104_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_23201_name="Mobilkom/A1" ISP_23201_product="A1 Breitband" ISP_23201_apn="a1.net::ppp@a1plus.at:ppp" ISP_23201_phone="*99#" ISP_23201_menufgcolor=orange ISP_23201_menubgcolor=black ISP_23201_icon="http://www.a1.net/final/de/Images/Layout/a1_logo.png" # Unconfirmed, based on information found on Internet ISP_23203_name="T-Mobile AT" ISP_23203_product="T-Mobile SURF" ISP_23203_apn="gprsinternet:GPRS_Internet:t-mobile:tm web:Former_tele.ring:web@telering.at:web" ISP_23203_phone="*99#" ISP_23203_menufgcolor=white ISP_23203_menubgcolor=pink ISP_23203_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_23205_name="Orange AT" ISP_23205_product="Orange Mobiles Internet" ISP_23205_apn="web.one.at:Orange:web:web web.yesss.at:Yesss!:user:pass" ISP_23205_phone="*99#" ISP_23205_menufgcolor=white ISP_23205_menubgcolor=orange ISP_23205_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_23207_name="T-Mobile AT" ISP_23207_product="T-Mobile SURF" ISP_23207_apn="gprsinternet:GPRS_Internet:t-mobile:tm web:Former_tele.ring:web@telering.at:web" ISP_23207_phone="*99#" ISP_23207_menufgcolor=white ISP_23207_menubgcolor=pink ISP_23207_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_23210_name="Drei AT" ISP_23210_product="Drei 3Data" ISP_23210_apn="drei.at::user:pass" ISP_23210_phone="*99#" ISP_23210_menufgcolor=orange ISP_23210_menubgcolor=white ISP_23210_icon="http://www.drei.at/portal/media/960/images_1/logo_drei_1.png" # Unconfirmed, based on information found on Internet ISP_24001_name="Telia SE" ISP_24001_product="Telia Mobilt Bredband" ISP_24001_apn="online.telia.se:Telia:user:pass halebop.telia.se:Halebop:user:pass" ISP_24001_phone="*99#" ISP_24001_menufgcolor=white ISP_24001_menubgcolor=rgb:cf/05/66 ISP_24001_icon="http://www.telia.se/img/header/telia_logo.gif" # Unconfirmed, based on information found on Internet ISP_24002_name="3 SE" ISP_24002_product="3Bredband" ISP_24002_apn="data.tre.se:Mobil:user:pass bredband.tre.se:Bredband:user:pass net.tre.se:Bredband_Kontantkort:user:pass" ISP_24002_phone="*99#" ISP_24002_menufgcolor=orange ISP_24002_menubgcolor=white ISP_24002_icon="http://www.drei.at/portal/media/960/images_1/logo_drei_1.png" # Unconfirmed, based on information found on Internet ISP_24004_name="Sweden 3G" ISP_24004_product="Sweden 3G internet" ISP_24004_apn="internet.telenor.se:Telenor_Mobilt_Bredband:user:pass services.telenor.se:Telenor_Mobilsurf_med_maxtaxa:user:pass data.tre.se:3Mobil:user:pass bredband.tre.se:3Bredband:user:pass net.tre.se:3Bredband_Kontantkort:user:pass internet.se:TDC:user:pass internet.tele2.se:Tele2:user:pass online.telia.se:Telia:user:pass halebop.telia.se:Halebop:user:pass" ISP_24004_phone="*99#" ISP_24004_menufgcolor=white ISP_24004_menubgcolor=black ISP_24004_icon="" # Unconfirmed, based on information found on Internet ISP_24005_name="Sweden 3G" ISP_24005_product="Sweden 3G internet" ISP_24005_apn="internet.se:TDC:user:pass internet.tele2.se:Tele2:user:pass online.telia.se:Telia:user:pass halebop.telia.se:Halebop:user:pass" ISP_24005_phone="*99#" ISP_24005_menufgcolor=black ISP_24005_menubgcolor=white ISP_24005_icon="" # Unconfirmed, based on information found on Internet ISP_24006_name="Telenor SE" ISP_24006_product="Telenor Mobilt Bredband" ISP_24006_apn="internet.telenor.se:Telenor_Mobilt_Bredband:user:pass services.telenor.se:Telenor_Mobilsurf_med_maxtaxa:user:pass data.tre.se:3Mobil:user:pass bredband.tre.se:3Bredband:user:pass net.tre.se:3Bredband_Kontantkort:user:pass" ISP_24006_phone="*99#" ISP_24006_menufgcolor=white ISP_24006_menubgcolor=rgb:16/16/16 ISP_24006_icon="http://www.telenor.no/Images/logo_tcm38-4340.png" # Unconfirmed, based on information found on Internet ISP_24007_name="Tele2 SE" ISP_24007_product="Tele2 Mobilt Internet" ISP_24007_apn="internet.tele2.se:Tele2:user:pass internet.se:TDC:user:pass" ISP_24007_phone="*99#" ISP_24007_menufgcolor=black ISP_24007_menubgcolor=white ISP_24007_icon="http://www.tele2.lv/images/e220_modems_tele2_logo.png" # Unconfirmed, based on information found on Internet ISP_24008_name="Telenor SE" ISP_24008_product="Telenor Mobilt Bredband" ISP_24008_apn="internet.telenor.se:Telenor_Mobilt_Bredband:user:pass services.telenor.se:Telenor_Mobilsurf_med_maxtaxa:user:pass data.tre.se:3Mobil:user:pass bredband.tre.se:3Bredband:user:pass net.tre.se:3Bredband_Kontantkort:user:pass" ISP_24008_phone="*99#" ISP_24008_menufgcolor=white ISP_24008_menubgcolor=rgb:16/16/16 ISP_24008_icon="http://www.telenor.no/Images/logo_tcm38-4340.png" # Unconfirmed, based on information found on Internet ISP_24201_name="N Telenor" ISP_24201_product="Telenor Mobilt Bredbånd" ISP_24201_apn="internet::user:pass" ISP_24201_phone="*99#" ISP_24201_menufgcolor=white ISP_24201_menubgcolor=rgb:16/16/16 ISP_24201_icon="http://www.telenor.no/Images/logo_tcm38-4340.png" # Unconfirmed, based on information found on Internet ISP_24202_name="N COM" ISP_24202_product="NetCom Mobilt Bredbånd" ISP_24202_apn="internet.netcom.no:NetCom:netcom:netcom internet:Lebara:user:pass internet:OneCall:user:pass" ISP_24202_phone="*99#" ISP_24202_menufgcolor=orange ISP_24202_menubgcolor=white ISP_24202_icon="http://mmslss.netcom.no/mms.mnc002.mcc242.gprs/no/webnonsubscriber/img/NetCom-logo3.gif" # Unconfirmed, based on information found on Internet ISP_24204_name="Network NO" ISP_24204_product="NetworkNorway" ISP_24204_apn="internet::user:pass" ISP_24204_phone="*99#" ISP_24204_menufgcolor=red ISP_24204_menubgcolor=white ISP_24204_icon="http://www.networknorway.no/getfile.php/Bilder/Logo/nwn_logo.png" # Unconfirmed, based on information found on Internet ISP_24205_name="Network NO" ISP_24205_product="NetworkNorway" ISP_24205_apn="internet::user:pass" ISP_24205_phone="*99#" ISP_24205_menufgcolor=red ISP_24205_menubgcolor=white ISP_24205_icon="http://www.networknorway.no/getfile.php/Bilder/Logo/nwn_logo.png" # Unconfirmed, based on information found on Internet ISP_24403_name="DNA FI" ISP_24403_product="DNA Internet" ISP_24403_apn="internet::user:pass" ISP_24403_phone="*99#" ISP_24403_menufgcolor=white ISP_24403_menubgcolor=rgb:e2/00/70 ISP_24403_icon="http://www.dna.fi/Style%20Library/Images/Dna/dna_logo.gif" # Unconfirmed, based on information found on Internet ISP_24405_name="Elisa FI" ISP_24405_product="Elisa Internet" ISP_24405_apn="internet:Elisa:user:pass internet.saunalahti:Saunalahti:user:pass" ISP_24405_phone="*99#" ISP_24405_menufgcolor=white ISP_24405_menubgcolor=rgb:0e/8a/d4 ISP_24405_icon="http://www.elisa.fi/etusivu/assets/img/global-logo-trans.png" # Unconfirmed, based on information found on Internet ISP_24421_name="Saunalahti FI" ISP_24421_product="Saunalahti Internet" ISP_24421_apn="internet.saunalahti:Saunalahti:user:pass" ISP_24421_phone="*99#" ISP_24421_menufgcolor=white ISP_24421_menubgcolor=rgb:f2/58/22 ISP_24421_icon="http://img.saunalahti.fi/pic_gen/logo_saastoa_joka_minuutti.png" # Unconfirmed, based on information found on Internet ISP_24491_name="Sonera FI" ISP_24491_product="Sonera Internet" ISP_24491_apn="internet:Internet:user:pass prointernet:Prointernet:user:pass" ISP_24491_phone="*99#" ISP_24491_menufgcolor=red ISP_24491_menubgcolor=white ISP_24491_icon="http://www.sonera.fi/images/sonera.gif" # Unconfirmed, based on information found on Internet ISP_24701_name="LMT" ISP_24701_product="LMT Internets telefonā" ISP_24701_apn="internet.lmt.lv::user:pass" ISP_24701_phone="*99#" ISP_24701_menufgcolor=rgb:a9/00/31 ISP_24701_menubgcolor=white ISP_24701_icon="http://www.lmt.lv/images/design/lmt-logo.png" # Unconfirmed, based on information found on Internet ISP_24702_name="TELE2" ISP_24702_product="TELE2 Internets telefonā" ISP_24702_apn="internet.tele2.lv::gprs:internet" ISP_24702_phone="*99#" ISP_24702_menufgcolor=black ISP_24702_menubgcolor=white ISP_24702_icon="http://www.tele2.lv/images/e220_modems_tele2_logo.png" # Unconfirmed, based on information found on Internet ISP_25001_name="MTS RU" ISP_25001_product="MTS Интернет" ISP_25001_apn="internet.mts.ru::mts:mts" ISP_25001_phone="*99#" ISP_25001_menufgcolor=white ISP_25001_menubgcolor=red ISP_25001_icon="http://www.mts.ru/upload/images/design/i/logo.gif" # Unconfirmed, based on information found on Internet ISP_25002_name="Megafon RU" ISP_25002_product="Мегафон Интернет" ISP_25002_apn="internet.nw:NW_Северо-Запад:user:pass internet.ugsm:UGSM_Урал:user:pass internet.usi.ru:usi:user:pass internet.dv:DV_Дальний_Восток:user:pass internet.kvk:kvk_Кавказ:user:pass internet.ltmsk:ltmsk:user:pass internet.sib:sib_Сибирь:user:pass internet.volga:volga_Поволжье:user:pass internet.mc:mc_Центр:user:pass internet:Moscow_Москва:gdata:gdata" ISP_25002_phone="*99#" ISP_25002_menufgcolor=white ISP_25002_menubgcolor=green ISP_25002_icon="http://www.prepaidgsm.net/loghi/logo_megafon.gif" # Unconfirmed, based on information found on Internet ISP_25003_name="NCC RU" ISP_25003_product="NCC Интернет" ISP_25003_apn="internet::ncc:pass" ISP_25003_phone="*99#" ISP_25003_menufgcolor=white ISP_25003_menubgcolor=rgb:b1/00/42 ISP_25003_icon="http://ncc-volga.ru/bitrix/templates/ncc/img/logo.gif" # Unconfirmed, based on information found on Internet ISP_25005_name="ETK RU" ISP_25005_product="Енисей Телеком Интернет" ISP_25005_apn="internet.etk.ru:Internet:etk:pass wap.etk.ru:Wap:user:pass" ISP_25005_phone="*99#" ISP_25005_menufgcolor=white ISP_25005_menubgcolor=rgb:00/66/ae ISP_25005_icon="http://www.etk.ru/pictures/etc_pictures/logo.gif" # Unconfirmed, based on information found on Internet ISP_25012_name="BWC RU" ISP_25012_product="БайкалВестКом Интернет" ISP_25012_apn="inet.bwc.ru::bwc:bwc" ISP_25012_phone="*99#" ISP_25012_menufgcolor=rgb:00/75/ab ISP_25012_menubgcolor=white ISP_25012_icon="http://www.bwc.ru/f/1/gsm/bwc_vsegda.jpg" # Unconfirmed, based on information found on Internet ISP_25016_name="NTC RU" ISP_25016_product="NTC Интернет" ISP_25016_apn="internet.ntc::user:pass" ISP_25016_phone="*99#" ISP_25016_menufgcolor=rgb:19/44/93 ISP_25016_menubgcolor=white ISP_25016_icon="http://www.vntc.ru/images/skin/logo.png" # Unconfirmed, based on information found on Internet ISP_25020_name="Tele2 RU" ISP_25020_product="Теле2 Интернет" ISP_25020_apn="wap.tele2.ru::gprs:pass" ISP_25020_phone="*99#" ISP_25020_menufgcolor=rgb:00/a4/ee ISP_25020_menubgcolor=white ISP_25020_icon="http://novgorod.tele2.ru/system_images/logo_t2.gif" # Unconfirmed, based on information found on Internet ISP_25028_name="Beeline RU" ISP_25028_product="Билайн Интернет" ISP_25028_apn="internet.beeline.ru::beeline:beeline" ISP_25028_phone="*99#" ISP_25028_menufgcolor=black ISP_25028_menubgcolor=white ISP_25028_icon="http://www.beeline.ru/media/design/beeline_logo_bs.gif" # Unconfirmed, based on information found on Internet ISP_25035_name="Motiv RU" ISP_25035_product="Мотив Интернет" ISP_25035_apn="inet.ycc.ru::motiv:pass" ISP_25035_phone="*99#" ISP_25035_menufgcolor=white ISP_25035_menubgcolor=orange ISP_25035_icon="http://www.ycc.ru/i/ami/logo.gif" # Unconfirmed, based on information found on Internet ISP_25039_name="U-tel RU" ISP_25039_product="U-tel Интернет" ISP_25039_apn="internet.usi.ru::user:pass" ISP_25039_phone="*99#" ISP_25039_menufgcolor=white ISP_25039_menubgcolor=rgb:d1/12/28 ISP_25039_icon="http://www.u-tel.ru/images/logo.gif" # Unconfirmed, based on information found on Internet ISP_25099_name="Beeline RU" ISP_25099_product="Билайн Интернет" ISP_25099_apn="internet.beeline.ru::beeline:beeline" ISP_25099_phone="*99#" ISP_25099_menufgcolor=black ISP_25099_menubgcolor=white ISP_25099_icon="http://www.beeline.ru/media/design/beeline_logo_bs.gif" # Unconfirmed, based on information found on Internet ISP_25501_name="MTC UA" ISP_25501_product="MTC Мобільний GPRS-Інтернет" ISP_25501_apn="internet:Internet:internet:pass www.umc.ua:umc:user:pass www.jeans.ua:Jeans:user:pass hyper.net:Hyper:user:pass" ISP_25501_phone="*99#" ISP_25501_menufgcolor=white ISP_25501_menubgcolor=red ISP_25501_icon="http://www.mts.com.ua/img/tmpl/logo_ukr.gif" # Unconfirmed, based on information found on Internet ISP_25502_name="Beeline UA" ISP_25502_product="Beeline Мобільний інтернет" ISP_25502_apn="internet.beeline.ua::user:pass" ISP_25502_phone="*99#" ISP_25502_menufgcolor=black ISP_25502_menubgcolor=white ISP_25502_icon="http://www.beeline.ua/media/design/ua/beeline_logo.gif" # Unconfirmed, based on information found on Internet ISP_25503_name="UA Kyivstar" ISP_25503_product="Kyivstar Интернет 3G" ISP_25503_apn="www.ab.kyivstar.net:Ace&Base:igprs:internet www.djuice.com.ua:Djuice:user:pass" ISP_25503_phone="*99#" ISP_25503_menufgcolor=white ISP_25503_menubgcolor=rgb:02/95/df ISP_25503_icon="http://www.prepaidgsm.net/loghi/logo_kyivstar.gif" # Unconfirmed, based on information found on Internet ISP_25506_name="Life UA" ISP_25506_product="life;) Інтернет" ISP_25506_apn="internet:Standard:user:pass speed:Faster:user:pass" ISP_25506_phone="*99#" ISP_25506_menufgcolor=white ISP_25506_menubgcolor=red ISP_25506_icon="http://www.life.com.ua/i/newh/logo.uk.png" # Unconfirmed, based on information found on Internet ISP_25507_name="Utel UA" ISP_25507_product="Utel Інтернет" ISP_25507_apn="3g.utel.ua::user:pass" ISP_25507_phone="*99#" ISP_25507_menufgcolor=white ISP_25507_menubgcolor=red ISP_25507_icon="http://utel.ua/img/index/big_logo100.jpg" # Unconfirmed, based on information found on Internet ISP_25701_name="VELCOM BY" ISP_25701_product="Услуги Мобильный Интернет" ISP_25701_apn="wap.velcom.by:GPRS_WAP:wap:wap web.velcom.by:GPRS_WEB:web:web plus.velcom.by:GPRS_WEB_PLUS:plus:plus privet.velcom.by:GPRS_PRIVET:privet:privet web1.velcom.by:WEB_BASIC:web1:web1 web2.velcom.by:WEB_25:web2:web2 web3.velcom.by:WEB_150:web3:web3 vmi.velcom.by:WEB_500:vmi:vmi" ISP_25701_phone="*99#" ISP_25701_menufgcolor=black ISP_25701_menubgcolor=rgb:ff/f2/00 ISP_25701_icon="http://www.velcom.by/im/logo.gif" # Unconfirmed, based on information found on Internet ISP_25702_name="MTS BY" ISP_25702_product="MTC Интернет +" ISP_25702_apn="internet.mts.by::mts:mts" ISP_25702_phone="*99#" ISP_25702_menufgcolor=white ISP_25702_menubgcolor=red ISP_25702_icon="http://www.mts.by/f/i/logo.gif" # Unconfirmed, based on information found on Internet ISP_25703_name="BY Life" ISP_25703_product="3G life" ISP_25703_apn="internet.life.com.by::user:pass" ISP_25703_phone="*99#" ISP_25703_menufgcolor=white ISP_25703_menubgcolor=red ISP_25703_icon="http://www.life.com.ua/i/newh/logo.uk.png" # Unconfirmed, based on information found on Internet ISP_25901_name="Orange MD" ISP_25901_product="Orange Internet Acum" ISP_25901_apn="internet::user:pass" ISP_25901_phone="*99#" ISP_25901_menufgcolor=white ISP_25901_menubgcolor=orange ISP_25901_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_25902_name="MD MOLDCELL" ISP_25902_product="Moldcell Internet mobil" ISP_25902_apn="internet::gprs:gprs" ISP_25902_phone="*99#" ISP_25902_menufgcolor=white ISP_25902_menubgcolor=orange ISP_25902_icon="http://www.prepaidgsm.net/loghi/logo_moldcell.gif" # Unconfirmed, based on information found on Internet ISP_25904_name="MD Eventis" ISP_25904_product="Eventis Internet mobil" ISP_25904_apn="internet.md::user:pass" ISP_25904_phone="*99#" ISP_25904_menufgcolor=rgb:92/cf/2a ISP_25904_menubgcolor=rgb:33/9e/db ISP_25904_icon="http://eventis.md/ro/wp-content/uploads/2010/02/0984bc8e-a2de-4054-ae59-a8ee6c5ebbda.jpg" # Unconfirmed, based on information found on Internet ISP_26001_name="Plus GSM" ISP_26001_product="iPlus Mobilny Internet" ISP_26001_apn="www.plusgsm.pl::user:pass" ISP_26001_phone="*99#" ISP_26001_menufgcolor=white ISP_26001_menubgcolor=rgb:68/af/23 ISP_26001_icon="http://www.plus.pl/images/nowe_menu_top/plus_logo.gif" # Unconfirmed, based on information found on Internet ISP_26002_name="ERA PL" ISP_26002_product="Era Internet Blueconnect" ISP_26002_apn="erainternet:ERA:erainternet:erainternet heyah.pl:Heyah:heyah:heyah" ISP_26002_phone="*99#" ISP_26002_menufgcolor=white ISP_26002_menubgcolor=rgb:00/97/ea ISP_26002_icon="http://www.era.pl/repositories/era_pl_repo1/logo/era_logo.gif" # Unconfirmed, based on information found on Internet ISP_26003_name="Orange PL" ISP_26003_product="Orange Mobilny Internet" ISP_26003_apn="internet::internet:internet" ISP_26003_phone="*99#" ISP_26003_menufgcolor=white ISP_26003_menubgcolor=orange ISP_26003_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_26006_name="Play Mobile" ISP_26006_product="Play Internet" ISP_26006_apn="Internet::user:pass" ISP_26006_phone="*99#" ISP_26006_menufgcolor=white ISP_26006_menubgcolor=rgb:7e/09/8f ISP_26006_icon="http://www.playmobile.pl/pl/_img/_top/logo.png" # Unconfirmed, based on information found on Internet ISP_26201_name="T-Mobile D1" ISP_26201_product="T-Mobile Internet" ISP_26201_apn="internet.t-d1.de::user:t-d1" ISP_26201_phone="*99#" ISP_26201_menufgcolor=white ISP_26201_menubgcolor=pink ISP_26201_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_26202_name="Vodafone D2" ISP_26202_product="Vodafone Live!" ISP_26202_apn="web.vodafone.de::vodafone:vodafone event.vodafone.de:WebSessions:vodafone:vodafone" ISP_26202_phone="*99#" ISP_26202_menufgcolor=white ISP_26202_menubgcolor=red ISP_26202_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_26203_name="E-Plus" ISP_26203_product="E-Plus Internet" ISP_26203_apn="internet.eplus.de:E-Plus:eplus:gprs internet.eplus.de:MedionMobile:eplus:gprs internet.eplus.de:blau.de:eplus:gprs internet.vistream.net:Vistream_reseller:web:vistream" ISP_26203_phone="*99#" ISP_26203_menufgcolor=rgb:36/53/3d ISP_26203_menubgcolor=white ISP_26203_icon="http://www.eplus.de/img/logo.png" # Unconfirmed, based on information found on Internet ISP_26204_name="Vodafone D2" ISP_26204_product="Vodafone Live!" ISP_26204_apn="web.vodafone.de::vodafone:vodafone event.vodafone.de:WebSessions:vodafone:vodafone" ISP_26204_phone="*99#" ISP_26204_menufgcolor=white ISP_26204_menubgcolor=red ISP_26204_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_26205_name="E-Plus" ISP_26205_product="E-Plus Internet" ISP_26205_apn="internet.eplus.de:E-Plus:eplus:gprs internet.eplus.de:MedionMobile:eplus:gprs internet.eplus.de:blau.de:eplus:gprs internet.vistream.net:Vistream_reseller:web:vistream" ISP_26205_phone="*99#" ISP_26205_menufgcolor=rgb:36/53/3d ISP_26205_menubgcolor=white ISP_26205_icon="http://www.eplus.de/img/logo.png" # Unconfirmed, based on information found on Internet ISP_26206_name="T-Mobile D1" ISP_26206_product="T-Mobile Internet" ISP_26206_apn="internet.t-d1.de::user:t-d1" ISP_26206_phone="*99#" ISP_26206_menufgcolor=white ISP_26206_menubgcolor=pink ISP_26206_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_26207_name="O2 DE" ISP_26207_product="O2 Mobiles Internet" ISP_26207_apn="internet:O2_Pay_by_MB:user:pass surfo2:O2_Pay_by_time:user:pass pinternet.interkom.de:FONIC:user:pass" ISP_26207_phone="*99#" ISP_26207_menufgcolor=white ISP_26207_menubgcolor=rgb:17/7d/b9 ISP_26207_icon="http://www.o2online.de/nw/assets/header/header-small-o2-logo-bild.gif" # Unconfirmed, based on information found on Internet ISP_26208_name="O2 DE" ISP_26208_product="O2 Mobiles Internet" ISP_26208_apn="internet:O2_Pay_by_MB:user:pass surfo2:O2_Pay_by_time:user:pass pinternet.interkom.de:FONIC:user:pass" ISP_26208_phone="*99#" ISP_26208_menufgcolor=white ISP_26208_menubgcolor=rgb:17/7d/b9 ISP_26208_icon="http://www.o2online.de/nw/assets/header/header-small-o2-logo-bild.gif" # Unconfirmed, based on information found on Internet ISP_26209_name="Vodafone D2" ISP_26209_product="Vodafone Live!" ISP_26209_apn="web.vodafone.de::vodafone:vodafone event.vodafone.de:WebSessions:vodafone:vodafone" ISP_26209_phone="*99#" ISP_26209_menufgcolor=white ISP_26209_menubgcolor=red ISP_26209_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_26211_name="O2 DE" ISP_26211_product="O2 Mobiles Internet" ISP_26211_apn="internet:O2_Pay_by_MB:user:pass surfo2:O2_Pay_by_time:user:pass pinternet.interkom.de:FONIC:user:pass" ISP_26211_phone="*99#" ISP_26211_menufgcolor=white ISP_26211_menubgcolor=rgb:17/7d/b9 ISP_26211_icon="http://www.o2online.de/nw/assets/header/header-small-o2-logo-bild.gif" # Unconfirmed, based on information found on Internet ISP_26216_name="Vistream Network" ISP_26216_product="Vistream Internet" ISP_26216_apn="internet.vistream.net:Vistream:user:pass" ISP_26216_phone="*99#" ISP_26216_menufgcolor=white ISP_26216_menubgcolor=black ISP_26216_icon="http://www.o2online.de/nw/assets/header/header-small-o2-logo-bild.gif" # Unconfirmed, based on information found on Internet ISP_26277_name="E-Plus" ISP_26277_product="E-Plus Internet" ISP_26277_apn="internet.eplus.de:E-Plus:eplus:gprs internet.eplus.de:MedionMobile:eplus:gprs internet.eplus.de:blau.de:eplus:gprs internet.vistream.net:Vistream_reseller:web:vistream" ISP_26277_phone="*99#" ISP_26277_menufgcolor=rgb:36/53/3d ISP_26277_menubgcolor=white ISP_26277_icon="http://www.eplus.de/img/logo.png" # Unconfirmed, based on information found on Internet ISP_27001_name="LUXGSM" ISP_27001_product="LUXGSM Internet Mobile" ISP_27001_apn="webp.pt.lu::user:pass" ISP_27001_phone="*99#" ISP_27001_menufgcolor=white ISP_27001_menubgcolor=rgb:8c/b0/ea ISP_27001_icon="http://www.luxgsm.lu/assets/templates/luxgsm/images/general/logo_luxgsm.gif" # Unconfirmed, based on information found on Internet ISP_27077_name="L Tango" ISP_27077_product="Tango Mobile ADSL" ISP_27077_apn="internet::tango:tango" ISP_27077_phone="*99#" ISP_27077_menufgcolor=rgb:e8/f2/fe ISP_27077_menubgcolor=rgb:22/72/b9 ISP_27077_icon="http://www.tango.lu/style/site/interface/public/tango/logohead.jpg" # Unconfirmed, based on information found on Internet ISP_27099_name="Orange LU" ISP_27099_product="Orange Internet Mobile" ISP_27099_apn="vox.lu::user:pass" ISP_27099_phone="*99#" ISP_27099_menufgcolor=white ISP_27099_menubgcolor=orange ISP_27099_icon="http://www.orange.at/Content.Node/images/orange-logo.gif" # Unconfirmed, based on information found on Internet ISP_27602_name="VODAFONE AL" ISP_27602_product="VODAFONE Internet" ISP_27602_apn="Twa::user:pass" ISP_27602_phone="*99#" ISP_27602_menufgcolor=white ISP_27602_menubgcolor=red ISP_27602_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_27801_name="VODAFONE MT" ISP_27801_product="VODAFONE Internet" ISP_27801_apn="Internet::Internet:Internet" ISP_27801_phone="*99#" ISP_27801_menufgcolor=white ISP_27801_menubgcolor=red ISP_27801_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_27821_name="GO Mobile" ISP_27821_product="GO Internet On The Move" ISP_27821_apn="gosurfing:Postpaid:user:pass rtgsurfing:Prepaid:user:pass" ISP_27821_phone="*99#" ISP_27821_menufgcolor=orange ISP_27821_menubgcolor=white ISP_27821_icon="http://www.go.com.mt/Files/Filer/AboutUs/Photos_Images/GO-Logo_250px.jpg" # Unconfirmed, based on information found on Internet ISP_28001_name="Cytamobile Vodafone CY" ISP_28001_product="VODAFONE Mobile Internet" ISP_28001_apn="internet::user:pass" ISP_28001_phone="*99#" ISP_28001_menufgcolor=white ISP_28001_menubgcolor=red ISP_28001_icon="http://www.cytamobile-vodafone.com/miPortal/cmImages/header1/dual-logo.jpg" # Unconfirmed, based on information found on Internet ISP_28010_name="MTN CY" ISP_28010_product="MTN 3G Internet" ISP_28010_apn="internet::wap:wap" ISP_28010_phone="*99#" ISP_28010_menufgcolor=black ISP_28010_menubgcolor=orange ISP_28010_icon="http://www.prepaidgsm.net/loghi/logo_mtn.gif" # Unconfirmed, based on information found on Internet ISP_28601_name="VODAFONE PT" ISP_28601_product="VODAFONE Internet" ISP_28601_apn="internet.vodafone.pt::user:pass" ISP_28601_phone="*99#" ISP_28601_menufgcolor=white ISP_28601_menubgcolor=red ISP_28601_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_28603_name="P Optimus" ISP_28603_product="Optimus Kanguru Internet" ISP_28603_apn="internet:Optimus:user:pass kangurufixo:Fixo:user:pass myconnection:Kanguru:user:pass" ISP_28603_phone="*99#" ISP_28603_menufgcolor=orange ISP_28603_menubgcolor=white ISP_28603_icon="http://www.optimus.pt/img/CDP/phone.png" # Unconfirmed, based on information found on Internet ISP_28606_name="P TMN" ISP_28606_product="TMN internetnotelemovel" ISP_28606_apn="internet::user:pass" ISP_28606_phone="*99#" ISP_28606_menufgcolor=white ISP_28606_menubgcolor=rgb:12/99/aa ISP_28606_icon="http://www.tmn.pt/tmnassets/layout/images/logos/logo_tmn.gif" # Unconfirmed, based on information found on Internet ISP_29340_name="SI MOBITEL" ISP_29340_product="Mobitel Internet" ISP_29340_apn="internet:Postpaid:mobitel:internet internetpro::mobitel:internet" ISP_29340_phone="*99#" ISP_29340_menufgcolor=white ISP_29340_menubgcolor=rgb:cb/04/0d ISP_29340_icon="http://itm.siol.net/_m/pic/logo.png" # Unconfirmed, based on information found on Internet ISP_29341_name="SI MOBIL" ISP_29341_product="Simobil Mobilni Internet" ISP_29341_apn="internet::simobil:internet" ISP_29341_phone="*99#" ISP_29341_menufgcolor=white ISP_29341_menubgcolor=rgb:75/c2/47 ISP_29341_icon="http://www.prepaidgsm.net/loghi/logo_simobil.gif" # Unconfirmed, based on information found on Internet ISP_29701_name="ProMonte" ISP_29701_product="ProMonte Mobilni Internet" ISP_29701_apn="gprs.promonte.com::user:pass" ISP_29701_phone="*99#" ISP_29701_menufgcolor=black ISP_29701_menubgcolor=white ISP_29701_icon="http://www.promonte.com/Images/banneri/dio-telenor-grupe.gif" # Unconfirmed, based on information found on Internet ISP_29702_name="T-Mobile CG" ISP_29702_product="T-Mobile Mobilni Internet" ISP_29702_apn="internet-postpaid::user:pass" ISP_29702_phone="*99#" ISP_29702_menufgcolor=white ISP_29702_menubgcolor=pink ISP_29702_icon="http://www.t-mobile.at/Tico.ico" # Unconfirmed, based on information found on Internet ISP_29703_name="m:tel CG" ISP_29703_product="m:tel Mobilni Internet" ISP_29703_apn="gprsinternet::user:pass" ISP_29703_phone="*99#" ISP_29703_menufgcolor=white ISP_29703_menubgcolor=red ISP_29703_icon="http://www.mtel-cg.com/haloton/images/new/logo.gif" # Unconfirmed, based on information found on Internet ISP_33402_name="TELCEL" ISP_33402_product="Internet Telcel" ISP_33402_apn="internet.itelcel.com::webgprs:webgprs2002" ISP_33402_phone="*99#" ISP_33402_menufgcolor=white ISP_33402_menubgcolor=rgb:3c/78/c3 ISP_33402_icon="http://www.telcel.com/portal/framework/skins/telcel/images/logo.gif" # Unconfirmed, based on information found on Internet ISP_33403_name="Movistar MX" ISP_33403_product="Internet Movistar" ISP_33403_apn="internet.movistar.mx::movistar:movistar" ISP_33403_phone="*99#" ISP_33403_menufgcolor=blue ISP_33403_menubgcolor=rgb:a9/d0/3f ISP_33403_icon="http://www.movistar.es/flot/terminales_multiidioma/img/logo_movistar_term_multiidioma.jpg" # Unconfirmed, based on information found on Internet ISP_50501_name="Telstra AU" ISP_50501_product="Telstra Wireless Broadband" ISP_50501_apn="telstra.wap:Wap:user:pass telstra.datapack:3G_data_pack:user:Telstra telstra.internet:Next_G:user:pass telstra.pcpack:3G_PC_pack_pay-by-time:user:Telstra" ISP_50501_phone="*99#" ISP_50501_menufgcolor=white ISP_50501_menubgcolor=rgb:06/8f/c5 ISP_50501_icon="http://www.telstra.com.au/global/themes/v9/images/telstra_logo.gif" # Unconfirmed, based on information found on Internet ISP_50502_name="Optus AU" ISP_50502_product="Optus Internet On Mobile" ISP_50502_apn="internet:Optus_Internet:user:pass CONNECT:Optus_3G:user:pass VirginInternet:Virgin_Internet:guest:guest" ISP_50502_phone="*99#" ISP_50502_menufgcolor=rgb:00/70/8f ISP_50502_menubgcolor=rgb:ff/d0/06 ISP_50502_icon="http://www.optus.com.au/home/images/logo-yes-optus.gif" # Unconfirmed, based on information found on Internet ISP_50503_name="Vodafone AU" ISP_50503_product="Vodafone Mobile Internet" ISP_50503_apn="vfinternet.au:Postpaid:user:pass vfprepaymbb:Prepaid:user:pass" ISP_50503_phone="*99#" ISP_50503_menufgcolor=white ISP_50503_menubgcolor=red ISP_50503_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_50506_name="3 AUS" ISP_50506_product="3 Mobile Internet" ISP_50506_apn="3netaccess:Internet:a:a 3services:Prepaid:a:a" ISP_50506_phone="*99#" ISP_50506_menufgcolor=white ISP_50506_menubgcolor=rgb:0e/99/38 ISP_50506_icon="http://www.three.com.au/cs/Three/images/logo.png" # Unconfirmed, based on information found on Internet ISP_53000_name="Telecom NZ" ISP_53000_product="Telecom XT mobile" ISP_53000_apn="wap.telecom.co.nz:WAP:user:pass internet.telecom.co.nz:Internet_with_Firewall:user:pass direct.telecom.co.nz:Internet_without_Firewall:user:pass oa.telecom.co.nz:Office:user:pass" ISP_53000_phone="*99#" ISP_53000_menufgcolor=white ISP_53000_menubgcolor=rgb:3f/c1/ed ISP_53000_icon="http://www.telecom.co.nz/images/5/logo2.gif" # Unconfirmed, based on information found on Internet ISP_53001_name="Vodafone NZ" ISP_53001_product="Vodafone Internet" ISP_53001_apn="live.vodafone.com:WAP:user:pass www.vodafone.net.nz:Restricted:user:pass internet:Public:user:pass" ISP_53001_phone="*99#" ISP_53001_menufgcolor=white ISP_53001_menubgcolor=red ISP_53001_icon="http://www.vodafone.pt/vodafone/gui09/img/menu/logo.gif" # Unconfirmed, based on information found on Internet ISP_53005_name="Telecom NZ" ISP_53005_product="Telecom XT mobile" ISP_53005_apn="wap.telecom.co.nz:WAP:user:pass internet.telecom.co.nz:Internet_with_Firewall:user:pass direct.telecom.co.nz:Internet_without_Firewall:user:pass oa.telecom.co.nz:Office:user:pass" ISP_53005_phone="*99#" ISP_53005_menufgcolor=white ISP_53005_menubgcolor=rgb:3f/c1/ed ISP_53005_icon="http://www.telecom.co.nz/images/5/logo2.gif" # Unconfirmed, based on information found on Internet ISP_60400_name="Meditel" ISP_60400_product="Meditel Internet Mobile+" ISP_60400_apn="wap.meditel.ma::MEDIWAP:MEDIWAP" ISP_60400_phone="*99#" ISP_60400_menufgcolor=white ISP_60400_menubgcolor=red ISP_60400_icon="http://www.meditel.ma/img_refonte/backgrounds/v2_logo.jpg" # Unconfirmed, based on information found on Internet ISP_60401_name="MOR IAM" ISP_60401_product="IAM Internet 3G+" ISP_60401_apn="iam::wac:1987" ISP_60401_phone="*99#" ISP_60401_menufgcolor=white ISP_60401_menubgcolor=red ISP_60401_icon="http://www.iam.ma/Particuliers/Publishingimages/logoA_MT.gif" # Unconfirmed, based on information found on Internet ISP_65501_name="Voda" ISP_65501_product="Vodacom Broadband" ISP_65501_apn="internet:Internet:user:pass unrestricted:Unrestricted:user:pass" ISP_65501_phone="*99#" ISP_65501_menufgcolor=rgb:fa/ff/f9 ISP_65501_menubgcolor=rgb:05/73/b0 ISP_65501_icon="http://www.vodacom.co.za/ci/downloads/pb_cs_logo.gif" # Unconfirmed, based on information found on Internet ISP_65507_name="Cell C" ISP_65507_product="Cell C mobile internet" ISP_65507_apn="internet:Cellcis:user:pass vdata:Virgin_Mobile:user:pass" ISP_65507_phone="*99#" ISP_65507_menufgcolor=white ISP_65507_menubgcolor=red ISP_65507_icon="http://www.cellc.co.za/images/new/page_headings/logo_white.gif" # Unconfirmed, based on information found on Internet ISP_65510_name="MTN SA" ISP_65510_product="MTN broadband" ISP_65510_apn="internet::user:pass" ISP_65510_phone="*99#" ISP_65510_menufgcolor=black ISP_65510_menubgcolor=rgb:ff/b5/00 ISP_65510_icon="http://www.prepaidgsm.net/loghi//logo_mtn.gif" # Unconfirmed, based on information found on Internet ISP_70401_name="Claro GT" ISP_70401_product="Turbonett Móvil Claro" ISP_70401_apn="internet.ideasclaro" ISP_70401_phone="*99#" ISP_70401_menufgcolor=white ISP_70401_menubgcolor=red ISP_70401_icon="http://www.claro.com.gt/images/LogoClaro.jpg" # Unconfirmed, based on information found on Internet ISP_70402_name="Tigo GT" ISP_70402_product="Internet Móvil Tigo" ISP_70402_apn="Wap.tigo.gt:Wap:Wap:Wap broadband.tigo.gt:Broadband:guest:guest" ISP_70402_phone="*99#" ISP_70402_menufgcolor=white ISP_70402_menubgcolor=rgb:24/55/97 ISP_70402_icon="http://www.tigo.com.gt/resources/images/generales/logo.png" # Contributed by Sakis on 0.1.1 # Confirmed by Jean-Pierre VAISSIERE on 0.1.2 ISP_70802_name="Tigo HN" ISP_70802_product="Internet Móvil Tigo" ISP_70802_apn="internet.tigo.hn::user:pass broadband.tigo.hd::guest:guest" ISP_70802_phone="*99#" ISP_70802_menufgcolor=white ISP_70802_menubgcolor=rgb:24/55/97 ISP_70802_icon="http://www.tigo.com.hn/resources/images/generales/logo.png" # Unconfirmed, based on information found on Internet ISP_71606_name="Movistar PE" ISP_71606_product="Speedy Móvil Movistar" ISP_71606_apn="movistar.pe::movistar@datos:movistar" ISP_71606_phone="*99#" ISP_71606_menufgcolor=blue ISP_71606_menubgcolor=rgb:a9/d0/3f ISP_71606_icon="http://www.movistar.es/flot/terminales_multiidioma/img/logo_movistar_term_multiidioma.jpg" # Unconfirmed, based on information found on Internet ISP_71610_name="Claro PE" ISP_71610_product="Internet Claro" ISP_71610_apn="tim.pe::tim:tulibertad" ISP_71610_phone="*99#" ISP_71610_menufgcolor=white ISP_71610_menubgcolor=red ISP_71610_icon="http://www.claro.com.gt/images/LogoClaro.jpg" ## ISP setup END ## Hardware setup START # This is a space separated list of all modems # known to this script. Each name listed here # can have 7 corresponding variables declared # with the same prefix. These variables must be # suffixed as following: # # ${name}_vendor and ${name}_product # Should contain the usb id of the device in hex # format, without the leading "0x". This should # match the ids listed by lsusb. If modem is a # ZeroCD devices, IDs should be the ones AFTER # device has switched. # # ${name}_interface ${name}_port # The USB interface and the port number within # that interface, that holds a usable tty serial # device. To find those numbers do: # $ grep . /sys/bus/usb/devices/*/tty*/port_number # output will be something like this: # /sys/bus/usb/devices/3-4:1.0/ttyUSB0/port_number:0 # /sys/bus/usb/devices/3-4:1.1/ttyUSB1/port_number:0 # /sys/bus/usb/devices/3-4:1.3/ttyUSB2/port_number:0 # Interface ^ Port number ^ # Enter interface and port number of device that # made it to connect you with the internet. # ATTENTION: ${name}_port should ONLY be set for some # weird devices (not hotplug-able). It must # be left blank for detachable USB devices. # # ${name}_driver and ${name}_arguments # Module name that handles your hardware and any # arguments that should be passed to it. # NOTE: These will be used ONLY if "option" driver # does not make any tty devices to appear. # # ${name}_candidates # A space separated list of devices that driver # or udev creates on your /dev filesystem, in the # order you prefer them to be used (i.e. if first # one is found, it will be used. If not, second one # will be checked instead, third and so on). You # may optionally use strings "detectmax" or # "detectmin" which identify /dev/tty* devices that # are created from the same USB bus your modem is # attached on. If for example, your modem has # created devices /dev/ttyUSB3, /dev/ttyUSB4 and # /dev/ttyUSB5, "detectmax" will use /dev/ttyUSB5 # while "detectmin" will use /dev/ttyUSB3. # NOTE: These will be used only if HAL is not # installed/accessible. # # ${name}_needstime # Time in seconds required for device to settle. # Some devices require time after they start # responding to serial devices. # # ${name}_initstrings # AT commands that wvdial should send to modem for # the connection to be established. These commands # are passed to wvdial for the connection to be # established. # # ${name}_pinsupply # AT command that modem uses to supply PIN to the # SIM. # # Currently only two modems are known. # # If you made it to use another one, please send an # email of your corresponding variables to the author # of this script, so that this list gets expanded. # # This is the list of all known devices. You should # append it if you add your own modem's block below # with its prefix. hardware_candidates="ZTE_MF636 ALCATEL_X200 HUAWEI_E220 GBC_PL68a GBC_PL68b" # ZTE MF636 details. # Modem is known to be provided by: # - Greece / GR COSMOTE # Confirmed by Sakis ZTE_MF636_vendor="19d2" ZTE_MF636_product="0031" ZTE_MF636_interface="3" ZTE_MF636_port="" ZTE_MF636_capabilities="GSM-07.07 GSM-07.05" ZTE_MF636_initstrings="ATZ AT+ZOPRT=5 AT&F &D2 &C1 ATS7=60 S30=0 S0=0" # Uncomment line below to permanently switch your modem away of ZeroCD mode. #ZTE_MF636_initstrings="ATZ AT+ZOPRT=5 AT+ZCDRUN=8 AT&F &D2 &C1 ATS7=60 S30=0 S0=0" # Uncomment line below to permanently switch your modem back to ZeroCD mode. #ZTE_MF636_initstrings="ATZ AT+ZOPRT=5 AT+ZCDRUN=9 AT&F &D2 &C1 ATS7=60 S30=0 S0=0" ZTE_MF636_pincheck="AT+CPIN?" ZTE_MF636_pinsupply="AT+CPIN=%s" ZTE_MF636_driver="usbserial" ZTE_MF636_arguments="vendor=0x${ZTE_MF636_vendor} product=0x${ZTE_MF636_product}" ZTE_MF636_candidates="detectmax" # Alcatel One Touch X200 # Modem is known to be provided by: # - Greece / GR WIND # Confirmed by Sakis ALCATEL_X200_vendor="1bbb" ALCATEL_X200_product="0000" ALCATEL_X200_interface="3" ALCATEL_X200_port="" ALCATEL_X200_capabilities="GSM-07.07 GSM-07.05" ALCATEL_X200_initstrings="ATZ AT+CFUN=1 ATQ0 V1 E1 +FCLASS=0 ATQ0 S0=0 &C1 &D2" # This modem has a tedency to break after disconnecting, # checking for PIN becomes trivial. ALCATEL_X200_pincheck="ATZ OK ATZ OK AT+CFUN=1 OK AT+CPIN? +CPIN ''" ALCATEL_X200_pinsupply="AT+CPIN=%s" ALCATEL_X200_driver="usbserial" ALCATEL_X200_arguments="vendor=0x${ALCATEL_X200_vendor} product=0x${ALCATEL_X200_product}" ALCATEL_X200_candidates="detectmax" # Huawei E170 E220 E230 E270 E870 # Modem is known to be provided by: # - Greece / GR Cosmote [E170] # E170 Confirmed by Dimitrios Tsolakis HUAWEI_E220_vendor="12d1" HUAWEI_E220_product="1003" HUAWEI_E220_interface="0" HUAWEI_E220_port="" HUAWEI_E220_capabilities="GSM-07.07 GSM-07.05" HUAWEI_E220_initstrings="ATZ AT&F ATE1 V1 AT&D2 &C1 ATS0=0 ATQ0 AT+FCLASS=0" HUAWEI_E220_pincheck="AT+CPIN?" HUAWEI_E220_pinsupply="AT+CPIN=%s" HUAWEI_E220_driver="usbserial" HUAWEI_E220_arguments="vendor=0x${HUAWEI_E220_vendor} product=0x${HUAWEI_E220_product}" HUAWEI_E220_candidates="detectmin" # E170 is known to need time. HUAWEI_E220_needstime="10" # GBC PL68 with 9063 # Modem is known to be provided by: GBC_PL68a_vendor="1c9e" GBC_PL68a_product="9063" GBC_PL68a_interface="2" GBC_PL68a_port="" GBC_PL68a_capabilities="GSM-07.07 GSM-07.05" # Not verified init strings. May need something else. GBC_PL68a_initstrings="ATZ AT&F ATE1 V1 AT&D2 &C1 ATS0=0 ATQ0" GBC_PL68a_pincheck="AT+CPIN?" GBC_PL68a_pinsupply="AT+CPIN=%s" GBC_PL68a_driver="usbserial" GBC_PL68a_arguments="vendor=0x${GBC_PL68a_vendor} product=0x${GBC_PL68a_product}" GBC_PL68a_candidates="detectmax" # Unconfirmed if it needs time GBC_PL68a_needstime="3" # GBC PL68 with 9603 # Modem is known to be provided by: # - Honduras / Tigo # Confirmed by Jean-Pierre VAISSIERE # - Device only works properly the 1st time it gets physically connected to PC. GBC_PL68b_vendor="1c9e" GBC_PL68b_product="9603" GBC_PL68b_interface="2" GBC_PL68b_port="" GBC_PL68b_capabilities="GSM-07.07 GSM-07.05" GBC_PL68b_initstrings="ATZ AT&F ATE1 V1 AT&D2 &C1 ATS0=0 ATQ0" GBC_PL68b_pincheck="AT+CPIN?" GBC_PL68b_pinsupply="AT+CPIN=%s" GBC_PL68b_driver="usbserial" GBC_PL68b_arguments="vendor=0x${GBC_PL68b_vendor} product=0x${GBC_PL68b_product}" GBC_PL68b_candidates="detectmax" GBC_PL68b_needstime="3" ## Hardware setup END # Abort strings that chat program may encounter CHAT_ABORT_STRINGS="ABORT busy ABORT ERROR ABORT BLOCKED ABORT NOCARRIER" # Options passed to pppd when called directly pppdoptions="460800 modem crtscts -detach defaultroute dump noipdefault replacedefaultroute usepeerdns usehostname ktune logfd 2 call sakis3g" # Directory where pppd keeps its peers pppdpeerdir=/etc/ppp/peers # Make sure usual binary containing directories exist in PATH, even # if not running as root. Some distributions do not include those # folders in PATH (although they contain some useful user oriented # utilities) if not running as root, or if not running from an # interactive shell. for i in "/bin" "/usr/bin" "/sbin" "/usr/sbin" do found=`echo "${PATH}" | sed -e "s/^\(.*\)$/:\1:/g" | grep ":${i}:" | wc -l` found=`echo ${found}` if [ "a${found}" = "a0" ]; then export PATH="${i}:${PATH}" fi unset found done # Variables for using binaries. You can override these variables # to call one of your own wrappers instead, or use hardcoded # paths instead. It is normal that some of them do not exist # when called as a non-root user. lsusbbin="`which lsusb 2> /dev/null`" lshalbin="`which lshal 2> /dev/null`" haldevicebin="`which hal-device 2> /dev/null`" halfindbypropertybin="`which hal-find-by-property 2> /dev/null`" halgetpropertybin="`which hal-get-property 2> /dev/null`" halsetpropertybin="`which hal-set-property 2> /dev/null`" modprobebin="`which modprobe 2> /dev/null`" wvdialbin="`which wvdial 2> /dev/null`" sudobin="`which sudo 2> /dev/null`" gksubin="`which gksu 2> /dev/null`" wgetbin="`which wget 2> /dev/null`" setsidbin="`which setsid 2> /dev/null`" netstatbin="`which netstat 2> /dev/null`" psbin="`which ps 2> /dev/null`" chatbin="`which chat 2> /dev/null`" getentbin="`which getent 2> /dev/null`" xtermbin="`which xterm 2> /dev/null`" pppdbin="`which pppd 2> /dev/null`" routebin="`which route 2> /dev/null`" subin="`which su 2> /dev/null`" # Hardcoded paths #lsusbbin="/usr/sbin/lsusb" #lshalbin="/usr/bin/lshal" #haldevicebin="/usr/bin/hal-device" #halfindbypropertybin="/usr/bin/hal-find-by-property" #halgetpropertybin="usr/bin/hal-get-property" #halsetpropertybin="usr/bin/hal-set-property" #modprobebin="/sbin/modprobe" #wvdialbin="/usr/bin/wvdial" #sudobin="/usr/bin/sudo" #gksubin="/usr/bin/gksu" #wgetbin="/usr/bin/wget" #setsidbin="/usr/bin/setsid" #netstatbin="/bin/netstat" #routebin="/sbin/route" #psbin="/bin/ps" #chatbin="/usr/sbin/chat" #getentbin="/usr/bin/getent" #xtermbin="/usr/bin/xterm" #pppdbin="/usr/sbin/pppd" #subin="/bin/su" if [ -n "${debug}" ]; then echo "Warning: debug variable is obsolete. Use DEBUG instead." export DEBUG="${debug}" unset debug fi debug() { if [ "a$1" != "arun_command" -a "a$1" != "ashow_file" -a -z "${DEBUG}" ]; then return 0 elif [ "a$1" = "arun_command" -a -z "${DEBUG}" ]; then shift sh -c "$*" > /dev/null 2> /dev/null return $? elif [ "a$1" = "arun_command" -a -n "${DEBUG}" ]; then shift printf "/-------------------------------------------------------------------------------\n" printf "[%.5d] [%s] Will now run command: \'%s\'\n" "$$" "`date "+%H:%M:%S"`" "${*}" printf "/-------------------------------------------------------------------------------\n" sh -c "$*" 2>&1 rdebug=$? printf "\-------------------------------------------------------------------------------\n" printf "[%.5d] [%s] Command returned %d.\n" "$$" "`date "+%H:%M:%S"`" "${rdebug}" printf "\-------------------------------------------------------------------------------\n" return ${rdebug} elif [ -z "${DEBUG}" ]; then return 0 elif [ "a$1" = "ashow_file" ]; then if [ -f "$2" ]; then printf "/-------------------------------------------------------------------------------\n" printf "[%.5d] [%s] Will now display contents of: \'%s\'\n" "$$" "`date "+%H:%M:%S"`" "$2" printf "/-------------------------------------------------------------------------------\n" cat "$2" printf "\-------------------------------------------------------------------------------\n" ls -ld "$2" printf "\-------------------------------------------------------------------------------\n" else printf "/-------------------------------------------------------------------------------\n" printf "[%.5d] [%s] File does not exist: \'%s\'\n" "$$" "`date "+%H:%M:%S"`" "$2" printf "\-------------------------------------------------------------------------------\n" fi return 0 else rfmt="$1" shift if [ "$#" -ge "1" ]; then printf "[%.5d] [%s] ${rfmt}" "$$" "`date "+%H:%M:%S"`" "${@}" else printf "[%.5d] [%s] ${rfmt}" "$$" "`date "+%H:%M:%S"`" fi unset rfmt fi return 0 } if [ -n "${DEBUG}" ]; then echo echo "-------------------------------------------" echo "Sakis3G ${MYVERSION} running on DEBUG mode." echo "-------------------------------------------" date echo "-------------------------------------------" echo "Command line was: $0 $@" echo "Running with PID: $$" echo "-------------------------------------------" echo "Environment is:" set echo "-------------------------------------------" echo "Will now proceed with Sakis3G execution." echo "-------------------------------------------" fi if [ "`/bin/ps -p ${PPID} -o comm=`" = "udevd" ]; then if [ -z "${logposition}" ]; then logposition="/var/log/sakis3g.log" fi debug "Parent is udevd. Will spawn in background. Log is at %s.\n" "${logposition}" export DISPLAY=:0 $0 $@ 2>&1 > "${logposition}" & exit 0 fi if [ "a${UID}" = "a0" -o "a${USER}" = "aroot" -o "a${EUID}" = "a0" ]; then if [ ! -x "${wvdialbin}" ]; then direct_pppd=yes fi if [ -n "${direct_pppd}" ]; then if [ ! -f "${pppdbin}" ]; then echo "No communication software was found. Please install pppd and/or wvdial." exit 1 fi if [ ! -d "${pppdpeerdir}" ]; then echo "Unable to locate pppd peers directory. Expected it to be at ${pppdpeerdir}." exit 2 fi fi if [ ! -x "${chatbin}" ]; then echo "chat program not found. Seems like your distribution does not ship \"chat\" along with \"pppd\"." echo "Connection will be impossible." fi fi # Check if on KDE system if [ ! -x "${gksubin}" ]; then if [ `which kdesu 2> /dev/null` ]; then gksubin="`which kdesu 2> /dev/null`" if [ -x "${gksubin}" ]; then debug "Running on a KDE system.\n" fi elif [ -x "/usr/lib/kde4/libexec/kdesu" ]; then gksubin="/usr/lib/kde4/libexec/kdesu" if [ -x "${gksubin}" ]; then debug "Running on a KDE4 system.\n" fi fi else debug "Running on a GNOME system.\n" fi if [ ! -x "${gksubin}" ]; then if [ `which su 2> /dev/null` ]; then gksubin="`which su 2> /dev/null`" if [ -x "${gksubin}" ]; then gksubin="${gksubin} -c" debug "No graphical su system found. Falling back to plain su.\n" elif [ -z "${alwayssudo}" ]; then alwayssudo=yes debug "%s not executable. Forcing sudo usage.\n" "${gksubin}" fi elif [ -z "${alwayssudo}" ]; then alwayssudo=yes debug "No su system found. Forcing sudo usage.\n" fi fi # Default colors menufgcolor=white menubgcolor=black allargs="$@" verbose() { if [ -n "$DEBUG" ]; then debug "Not displaying verbose message: %s\n" "$1" return 0 elif [ -n "${VERBOSE}" -a "a$1" != "aclear" ]; then echo "$1" fi if [ -z "${display}" -o -z "${VERBOSE}" -o -n "${stick_to_console}" ]; then return 0 fi if [ -z "${VERXOSDBIN}" -a -n "${display}" -a -z "${stick_to_console}" ]; then VERXOSDBIN=`which osd_cat 2> /dev/null` if [ -n "${VERXOSDBIN}" ]; then XOSDKILL=`basename ${VERXOSDBIN} 2> /dev/null` export VERXOSDBIN=${VERXOSDBIN} export XOSDKILL=${XOSDKILL} echo "Multiple termination messages may appear. Please ignore them." fi fi if [ -z "${VERXOSDBIN}" -o -z "${XOSDKILL}" ]; then return 0 fi if [ -z "${PROGRESS}" ]; then PROGRESS=0 fi if [ -z "$2" ]; then PROGRESS=`expr ${PROGRESS} + 7` PROGRESS=`echo ${PROGRESS}` else PROGRESS=$2 fi export PROGRESS=${PROGRESS} killall -q "${XOSDKILL}" if [ "a$1" = "aclear" -o "a$1" = "a" ]; then return 0 fi ${VERXOSDBIN} -T "Sakis3G: $1" -P ${PROGRESS} -b percentage -O 2 -c green -f "${XOSDFONT}" -p bottom -a 0 -d 10 -A center & if [ "a$2" = "a100" ]; then sleep 3 fi } exittrap() { if [ "a${TRAPS}" != "a" ]; then debug "Now executing traps.\n" for tr in ${TRAPS} do debug "Executing trap \"%s\".\n" "${tr}" ${tr} done else debug "No exit traps defined.\n" fi } addexittrap() { if [ "a$1" = "a" ]; then return 0 fi if [ "a${TRAPS}" = "a" ]; then trap exittrap EXIT debug "Established trap handler.\n" fi TRAPS="$1 ${TRAPS}" debug "Traps are now: %s\n" "${TRAPS}" } delete_9menu() { if [ "a${dynamic9bin}" != "a" ]; then if [ -f "${dynamic9bin}" ]; then rm -f "${dynamic9bin}" if [ -f "${dynamic9bin}" ]; then debug "Failed to delete temporary 9menu binary \"%s\".\n" "${dynamic9bin}" else debug "Disposed temporary 9menu binary \"%s\".\n" "${dynamic9bin}" fi fi unset dynamic9bin fi } check_9menu() { if [ "a${dynamic9bin}" = "a" ]; then xmenubin=`which 9menu 2> /dev/null` if [ "a${xmenubin}" != "a" ]; then if [ -x "${xmenubin}" ]; then debug "Will use system supplied 9menu binary.\n" output=9menu else debug "Unable to execute system supplied 9menu.\n" fi else debug "System-wide installed 9menu was not found.\n" fi if [ "a${output}" != "a9menu" ]; then if [ -z "${prefer_osd}" -a -z "${stick_to_console}" ]; then debug "Will attempt to uudecode embedded 9menu binary.\n" get_9menu if [ "a${dynamic9bin}" != "a" ]; then addexittrap "delete_9menu" EXIT fi fi fi fi if [ "a${dynamic9bin}" != "a" -a "a${output}" != "a9menu" ]; then if [ -x "${dynamic9bin}" ]; then output=9menu xmenubin=${dynamic9bin} export dynamic9bin=${xmenubin} debug "Will be using %s for presenting menu.\n" "${dynamic9bin}" else debug "Unable to execute %s. Will not use it.\n" "${dynamic9bin}" rm -f "${dynamic9bin}" unset dynamic9bin fi fi } check_aosd_cat() { aosdbin=`which aosd_cat 2> /dev/null` if [ "a${aosdbin}" != "a" ]; then if [ -x "${aosdbin}" ]; then output=aosd_cat fi else aosdbin=`which osd_cat 2> /dev/null` if [ "a${aosdbin}" != "a" ]; then if [ -x "${aosdbin}" ]; then output=aosd_cat fi fi fi } auto_notify_method() { output="term" if [ -z "${stick_to_console}" ]; then if [ -n "${display}" ]; then check_aosd_cat check_9menu if [ -n "${prefer_osd}" ]; then check_aosd_cat fi fi else unset display unset DISPLAY fi debug "Output method is \"%s\".\n" "${output}" } # If we are root, attempts to determine real user # behind it, by looking back the process tree. Goes # back 15 processes before giving up. resolv_root() { if [ -z "$1" ]; then pid=$$ else pid=$1 fi puser=`ps -p ${pid} -o user=` puser=`echo ${puser}` if [ "a${puser}" = "a" ]; then return fi if [ "a${puser}" != "aroot" ]; then runner="${puser}" return fi ppid=`ps -p ${pid} -o ppid=` ppid=`echo ${ppid}` if [ "a${ppid}" = "a" ]; then return fi if [ "a${ppid}" = "a1" ]; then return fi if [ -z "$2" ]; then count=1 else count=`expr $2 + 1` count=`echo $count` fi if [ "$count" -lt 15 ]; then resolv_root ${ppid} ${count} fi } release_X_cookie() { debug "Disposing stolen X session cookie for %s.\n" "${DISPLAY}" # If having an authority file that does not belong to us, unset it. if [ "a${XAUTHORITY}" = "a${runhome}/.Xauthority" -a "a$HOME" != "a${runhome}" ]; then unset XAUTHORITY fi found=`xauth nlist ${DISPLAY} | wc -l` found=`echo ${found}` if [ "a${found}" = "a0" ]; then debug "Cookie already disposed.\n" else xauth remove ${DISPLAY} found=`xauth nlist ${DISPLAY} | wc -l` found=`echo ${found}` if [ "a${found}" = "a0" ]; then debug "Cookie disposed as it should.\n" else debug "Failed to dispose cookie.\n" fi fi unset found } find_unique_X_user() { if [ "a${DISPLAY}" = "a" ]; then debug "No exported DISPLAY variable set.\n" return 0 fi debug "Attempting to capture X display %s.\n" "${DISPLAY}" users=`who | grep -v root | cut -d\ -f1 | sort | uniq | wc -l` users=`echo ${users}` if [ "a${users}" != "a1" ]; then debug "%s users where found. Cannot make sure who will see message.\n" "${users}" unset users return 0 fi unset users runner=`who | grep -v root | cut -d\ -f1 | sort | uniq` confirm=`who | grep ${DISPLAY} | cut -d\ -f1 | sort | uniq | grep "^${runner}$"` if [ "a${runner}" != "a${confirm}" ]; then debug "Owner of DISPLAY %s (%s), does not match unique user (%s).\n" "${DISPLAY}" "${runner}" "${confirm}" unset runner else if [ `which xauth 2> /dev/null` ]; then found=`xauth nlist ${DISPLAY} | wc -l` found=`echo ${found}` if [ "a${found}" = "a0" ]; then debug "Not currently trusted to DISPLAY %s.\n" "${DISPLAY}" home=$(${getentbin} passwd ${runner} | cut -d: -f6) if [ -d "${home}" ]; then if [ -f "${home}/.Xauthority" ]; then debug "Will attempt to steal cookie from %s.\n" "${home}/.Xauthority" if [ "a${HOME}" = "a" ]; then rruser=`who -m | cut -d\ -f1` if we_are_root testonly; then rruser="root" fi rrhome=$(${getentbin} passwd ${rruser} | cut -d: -f6) if [ -d "${rrhome}" -a "a${home}" != "a${rrhome}" ]; then debug "HOME variable not set already. Setting HOME for %s: %s\n" "${rruser}" "${rrhome}" export HOME="${rrhome}" fi unset rruser; unset rrhome; else debug "HOME directory set already (%s). Good.\n" "${HOME}" fi xauth -f "${home}/.Xauthority" nextract - :0 | xauth nmerge - found=`xauth nlist ${DISPLAY} | wc -l` found=`echo ${found}` if [ "a${found}" = "a0" ]; then debug "Failed to steal cookie. Will remain in terminal.\n" unset DISPLAY; unset display; unset prefer_osd; stick_to_console=yes; output="term" unset runner else debug "Cookie stolen. Will use %s(%s), since the only X session.\n" "${runner}" "${DISPLAY}" addexittrap "release_X_cookie" EXIT fi else debug "Unable to locate Xauthority file of %s.\n" "${runner}" unset runner fi else debug "Unable to locate home directory of %s.\n" "${runner}" unset runner fi unset home else debug "Already granted access to DISPLAY %s. Will use it.\n" "${DISPLAY}" fi unset found else debug "No xauth available on path. Unable to capture %s(%s).\n" "${runner}" "${DISPLAY}" unset runner fi fi unset confirm return 0 } # Sets runner variable to the user that executed this # script. If root, will attempt to resolv it to a user. find_user() { runner="" if [ -n "${USER}" ]; then runner="${USER}" fi if [ -n "${LOGNAME}" ]; then runner="${LOGNAME}" fi if [ -n "${USERNAME}" ]; then runner="${USERNAME}" fi if [ -z "${runner}" ]; then runner=`who -m | cut -d\ -f1` fi if [ "a${runner}" = "aroot" -o "a${runner}" = "a" ]; then resolv_root $$ 0 # If running as root and DISPLAY is set, use that # DISPLAY. Useful when run from a udev rule. if [ -z "${runner}" -a "a${DISPLAY}" != "a" ]; then find_unique_X_user fi fi if [ -n "${runner}" ]; then found=`${getentbin} passwd ${runner} | wc -l` found=`echo ${found}` if [ "$found" -ne "1" ]; then runner="" else runhome=$(${getentbin} passwd ${runner} | cut -d: -f6) fi fi if we_are_root testonly; then debug "Running with root privileges.\n" fi debug "Real user is %s.\n" "${runner}" } find_display() { if [ -z "${stick_to_console}" ]; then display="${DISPLAY}" # If DISPLAY is not set, or is not local, # determine if running user has a local # xsession running. if [ "a${DISPLAY}" = "a" -o "`echo ${DISPLAY} | cut -b1`" != ":" ]; then #find_user if [ "a${runner}" != "a" -a "a${runner}" != "aroot" ]; then display=`who -m | grep "^${runner}" | grep "(\:.*)" | cut -d\( -f2 | cut -d\) -f1 | sort | head -1` display=`echo ${display}` fi fi # Get number of display (if any) num=`echo ${display} | cut -b2- | cut -d. -f1` # Validate that determined xsession exists. if [ ! -S "/tmp/.X11-unix/X${num}" ]; then unset display debug "No display.\n" else display=":$num" DISPLAY=${display} find_unique_X_user debug "Will use %s display.\n" "${display}" fi else unset display unset DISPLAY debug "Not using an X display due to stick-to-console setting.\n" fi } unique_hardware() { debug "Selecting hardware.\n" if [ -z "${hardware}" ]; then debug "No hardware was found anyway.\n" return 0 fi modems=`echo ${hardware} | wc -w` modems=`echo ${modems}` debug "%d modems were detected.\n" "${modems}" if [ "a${modems}" = "a1" ]; then debug "Done selecting hardware.\n" return 0 fi if [ "a${selected_modem}" != "a" ]; then debug "Will attempt to distinguish using: \"%s\"\n" "${selected_modem}" found=`echo ${processed} | tr " " "\\n" | grep "${selected_modem}" | wc -l` found=`echo ${found}` if [ "a${found}" = "a1" ]; then hardware=`echo ${processed} | tr " " "\\n" | grep "${selected_modem}" | cut -d\( -f1` debug "Found only one match (%s). Good.\n" "${hardware}" return 0 else debug "No match found.\n" fi unset found fi case "a${output}" in a9menu) if choose_modem; then if unique_hardware; then return 0 else return 1 fi else return 1 fi ;; *) if [ "a${output}" = "aaosd_cat" ]; then notify "${modems} modems detected. Check terminal." fi echo "The following ${modems} modems were detected:" echo "${processed}" | tr " " "\\n" | sed -e "s/^/ /g" echo echo "You need to specify correct one on command line:" printf "Example:\n\t%s %s 19d2:0031\n\tor\n\t%s %s ZTE\n\n" "${me}" "${allargs}" "${me}" "${allargs}" | sed -e "s/ */ /g" return 1 ;; esac return 1 } # Scrolls through hardware candidates to locate existing modems. find_hardware() { hardware="" processed="" for i in ${hardware_candidates} do eval product=\${${i}_product} eval vendor=\${${i}_vendor} if [ "a${product}" != "a" -a "a${vendor}" != "a" ]; then device=`${lsusbbin} -d ${vendor}:${product} | grep " ${vendor}:${product} " | cut -d: -f2- | sed -e "s/ ID ${vendor}:${product} //g"` if [ "a${device}" != "a" ]; then hardware="${hardware} ${i}" processed="${processed} ${i}(${vendor}:${product})" debug "Found hardware %s (%s:%s).\n" "${i}" "${vendor}" "${product}" fi else eval dev=\${${i}_candidates} if [ "a${dev}" != "a" ]; then if [ -c "${dev}" ]; then hardware="${hardware} ${i}" debug "Found possible hardware %s (%s).\n" "${i}" "${dev}" fi fi unset dev fi unset product unset vendor done hardware=`echo ${hardware}` # Find modems that usb_modeswitch knows about, but we don't gethostswitched # If such a modem is found, use default/safe settings for i in ${switched} do found=`echo "${processed}" | grep "${i}" | wc -l` found=`echo ${found}` if [ "a${found}" = "a0" ]; then SWITCHED_MODEM="SWITCHED_`echo $i | sed -e "s/:/_/g"`" eval ${SWITCHED_MODEM}_vendor="\"`echo ${i} | cut -d: -f1`\"" eval ${SWITCHED_MODEM}_product="\"`echo ${i} | cut -d: -f2`\"" eval ${SWITCHED_MODEM}_driver="usbserial" eval ${SWITCHED_MODEM}_arguments="\"vendor=0x`echo ${i} | cut -d: -f1` product=0x`echo ${i} | cut -d: -f2`\"" eval ${SWITCHED_MODEM}_candidates="detectmax" eval ${SWITCHED_MODEM}_initstrings="\"ATZ AT&F ATE1 V1 AT&D2 &C1 ATS0=0 ATQ0 AT+FCLASS=0\"" eval ${SWITCHED_MODEM}_pincheck="\"AT+CPIN?\"" eval ${SWITCHED_MODEM}_pinsupply="\"AT+CPIN=%s\"" eval ${SWITCHED_MODEM}_needstime="10" hardware="${hardware} ${SWITCHED_MODEM}" debug "Added %s, Usb-ModeSwitch says it is a switched device, might be a modem.\n" "${SWITCHED_MODEM}" processed="${processed} ${SWITCHED_MODEM}(${i})" else debug "Skipping ID %s. Already processed.\n" "${i}" fi unset found done unset i hardware=`echo ${hardware}` processed=`echo ${processed}` if [ "a${hardware}" = "a" ]; then # check for Bluetooth device if [ "a${BLUETOOTH_PHONE_rfcomm}" != "a" ]; then if [ -c "${BLUETOOTH_PHONE_rfcomm}" ]; then #hardware_candidates="${hardware_candidates} BLUETOOTH_PHONE" BLUETOOTH_PHONE_vendor="" BLUETOOTH_PHONE_product="" BLUETOOTH_PHONE_driver="" BLUETOOTH_PHONE_arguments="" BLUETOOTH_PHONE_candidates="${BLUETOOTH_PHONE_rfcomm}" BLUETOOTH_PHONE_initstrings="ATZ AT&F &D2 &C1 ATV1E0" BLUETOOTH_PHONE_pincheck="AT+CPIN?" BLUETOOTH_PHONE_pinsupply="AT+CPIN=%s" hardware="${hardware} BLUETOOTH_PHONE" processed="${processed} BLUETOOTH_PHONE" debug "Added bluetooth since \"%s\" exists.\n" "${BLUETOOTH_PHONE_rfcomm}" hardware=`echo ${hardware}` processed=`echo ${processed}` fi fi fi if [ "a${hardware}" = "a" ]; then # if choose_usb; then # find_hardware # else debug "No hardware found.\n" # fi else debug "Hardware found is: %s\n" "${hardware}" fi } # Unloads module of hardware given as argument. # Needs to be root. legacy_unload_driver() { if we_are_root; then if [ "a$1" != "a" ]; then eval driver=\${${1}_driver} if [ "a$driver" != "a" ]; then refcount=`cat /proc/modules | grep "^$driver " | cut -d\ -f3` if [ "a${refcount}" != "a" ]; then ${modprobebin} -r "${driver}" 2> /dev/null sleep 1 refcount=`cat /proc/modules | grep "^$driver " | cut -d\ -f3` if [ "a${refcount}" != "a" ]; then debug "Unable to remove driver %s. Possibly in use.\n" "${driver}" return 1 fi fi else debug "No driver specified for device %s. Skipping unload.\n" "$1" return 0 fi fi else echo Cannot remove driver. Not root. return 1 fi debug "Driver %s removed.\n" "${driver}" return 0 } # Loads module of hardware given as arguments. # Needs to be root. legacy_load_driver() { if we_are_root; then if [ "a$1" != "a" ]; then eval driver=\${${1}_driver} eval arguments=\${${1}_arguments} if [ "a$driver" != "a" ]; then ${modprobebin} "${driver}" ${arguments} # Check state refcount=`cat /proc/modules | grep "^$driver " | cut -d\ -f3` if [ "a${refcount}" != "a" ]; then debug "Driver %s was loaded.\n" "${driver}" eval needstime=\${${1}_needstime} if [ "a${needstime}" = "a" ]; then debug "Waiting a second for %s to settle with modem %s.\n" "${driver}" "$1" sleep 1 debug "Resuming.\n" else debug "Modem %s needs %d seconds. Waiting...\n" "$1" "${needstime}" sleep "${needstime}" debug "Done waiting. It should be OK now. If not, increase value of %s_needstime.\n" "${needstime}" fi unset needstime return 0 fi else debug "No driver specified for device %s. Skipping load.\n" "$1" return 0 fi fi else echo "Cannot load driver. Not root." fi notify "Failed to load module ${driver} for device $1." return 1 } legacy_reload_driver() { if legacy_unload_driver $1; then if legacy_load_driver $1; then return 0 fi else debug "Failed to unload module %s for device %s.\n" "${driver}" "$1" fi return 1 } reload_option_driver() { if we_are_root; then verbose "Reloading option driver..." eval driver=\${${1}_driver} eval pro=\${${1}_product} eval ven=\${${1}_vendor} if [ "a${driver}" != "a" ]; then # Not unloading option, in case it already handles dynamic ids # If more than one devices are present, it will destroy one # modem's setup trying to fix the other. #${modprobebin} -r option 2> /dev/null ${modprobebin} -r ${driver} 2> /dev/null sleep 1 ${modprobebin} option 2> /dev/null refcount=`cat /proc/modules | grep "^option " | cut -d\ -f3` if [ "a${refcount}" != "a" ]; then if [ -w "/sys/bus/usb-serial/drivers/option1/new_id" ]; then echo "${ven} ${pro}" > "/sys/bus/usb-serial/drivers/option1/new_id" debug "Supplied \"%s %s\" to \"option\" driver.\n" "${ven}" "${pro}" # Give driver time to create devices eval needstime=\${${1}_needstime} if [ "a${needstime}" = "a" ]; then debug "Waiting a second for \"option\" driver to settle with modem %s.\n" "$1" sleep 1 debug "Resuming.\n" else debug "Modem %s needs %d seconds. Waiting...\n" "$1" "${needstime}" sleep "${needstime}" debug "Done waiting. It should be OK now. If not, increase value of %s_needstime.\n" "${1}" fi unset needstime debug "Driver \"option\" was loaded.\n" unset pro unset ven unset driver return 0 else debug "Option driver seems not work. Did not present new_id.\nWill attempt to unload both \"option\" and \"%s\".\n" "${driver}" ${modprobebin} -r option 2> /dev/null ${modprobebin} -r ${driver} 2> /dev/null fi else debug "Option driver failed to get loaded. Check kernel modules.\n" fi else debug "Device %s seems like do not need driver.\n" "$1" fi unset pro unset ven unset driver else debug "Cannot load \"option\" driver. Not root.\n" fi return 1 } # Makes sure that only one instance of $3 is contained within # list $2 of hal udi $1. hal_add_to_list() { found=0 while [ "${found}" -ne "1" ]; do contents=`${halgetpropertybin} --udi "$1" --key "$2" 2> /dev/null` found=0 for op in ${contents} do if [ "a${op}" = "a$3" ]; then found=`expr ${found} + 1` found=`echo ${found}` fi done if [ "${found}" -eq "0" ]; then debug "Will attempt to add %s inside %s.\n" "$3" "$2" ${halsetpropertybin} --udi "$1" --key "$2" --strlist-post "$3" 2> /dev/null elif [ "${found}" -gt "1" ]; then debug "Will attempt to remove multiple instance of %s inside %s.\n" "$3" "$2" ${halsetpropertybin} --udi "$1" --key "$2" --strlist-rem "$3" 2> /dev/null fi a=$? if [ "a${a}" != "a0" ]; then debug "Unable to properly modify HAL.\n" break else debug "Change was successful.\n" fi done if [ "${found}" -eq "1" ]; then debug "HAL is updated.\n" debug run_command "${haldevicebin} \"$1\"" fi } update_hal() { verbose "Updating HAL..." if [ "a${halsetpropertybin}" = "a" ]; then debug "hal-set-property seems not available.\n" return 1 elif [ ! -x "${halsetpropertybin}" ]; then debug "hal-set-property not executable.\n" return 1 fi eval capabilities=\${${1}_capabilities} if [ "a${capabilities}" != "a" ]; then hal_add_to_list $2 info.capabilities "modem" for cap in ${capabilities} do hal_add_to_list $2 modem.command_sets "${cap}" done fi unset capabilities } hal_unavailable() { if [ "a${lshalbin}" = "a" ]; then debug "lshal seems not available.\n" return 0 elif [ ! -x "${lshalbin}" ]; then debug "lshal not executable.\n" return 0 fi if [ "a${haldevicebin}" = "a" ]; then debug "hal-device seems not available.\n" return 0 elif [ ! -x "${haldevicebin}" ]; then debug "hal-device not executable.\n" return 0 fi if [ "a${halfindbypropertybin}" = "a" ]; then debug "hal-find-by-property seems not available.\n" return 0 elif [ ! -x "${halfindbypropertybin}" ]; then debug "hal-find-by-property not executable.\n" return 0 fi if [ "a${halgetpropertybin}" = "a" ]; then debug "hal-get-property seems not available.\n" return 0 elif [ ! -x "${halgetpropertybin}" ]; then debug "hal-get-property not executable.\n" return 0 fi return 1 } find_dev_in_hal() { unset haldevice if [ "a$1" = "a" ]; then return 1 fi if hal_unavailable; then return 1 fi eval pro=\${${1}_product} eval ven=\${${1}_vendor} if [ "a${pro}" = "a" -o "a${ven}" = "a" ]; then unset pro unset ven return 1 fi ven=`echo ${ven} | sed -e "s/^0*//g"` pro=`echo ${pro} | sed -e "s/^0*//g"` if [ "a${ven}" = "a" ]; then ven="0" fi if [ "a${pro}" = "a" ]; then pro="0" fi candidates=`${halfindbypropertybin} --key "info.category" --string "serial" 2> /dev/null` candnum=`${halfindbypropertybin} --key "info.category" --string "serial" 2> /dev/null | wc -l` candnum=`echo ${candnum}` debug "%d candidate(s) reported by HAL: %s\n" "${candnum}" "${candidates}" eval int=\${${1}_interface} eval port=\${${1}_port} if [ "a${int}" = "a" -a "${candnum}" -ne "1" ]; then debug "%d candidates for an unknown modem. We cannot help HAL.\nWill detect if HAL can help us.\n" "${candnum}" candidates=`${halfindbypropertybin} --key "info.category" --string "modem" 2> /dev/null` candnum=`${halfindbypropertybin} --key "info.category" --string "modem" 2> /dev/null | wc -l` candnum=`echo ${candnum}` if [ "a${int}" = "a" -a "${candnum}" -ne "1" ]; then if [ "${candnum}" -gt "1" ]; then debug "HAL reported %d modems: %s\nDon't know which one to use.\n" "${candnum}" "${candidates}" else debug "HAL reported %d modems. :(\n" "${candnum}" fi unset pro unset ven unset int unset port unset candnum unset candidates return 1 else debug "HAL reported a modem being on %s.\nWill check if it comes from our %s:%s device.\n" "${candidates}" "${ven}" "${pro}" fi fi if [ "${candnum}" -eq "1" -a "a${int}" = "a" ]; then int="any" fi unset candnum debug "Will look for port %d within interface \"%d\".\n" "${port}" "${int}" for udi in ${candidates} do debug "Checking %s.linux.device_file.\n" "${udi}" haldevice=`${halgetpropertybin} --udi "${udi}" --key "linux.device_file" 2> /dev/null` if [ "a${haldevice}" != "a" ]; then debug "%s.linux.device_file is %s.\n" "${udi}" "${haldevice}" if [ -c "${haldevice}" ]; then debug "%s is a character special.\n" "${haldevice}" unset intport if [ "a${port}" != "a" ]; then intport=`${halgetpropertybin} --udi "${udi}" --key "serial.port" 2> /dev/null` else intport="" fi if [ "a${port}" = "a${intport}" ]; then parent=`${halgetpropertybin} --udi "${udi}" --key "info.parent" 2> /dev/null` if [ "a${parent}" != "a" ]; then intven=`${halgetpropertybin} --udi "${parent}" --key "usb.vendor_id" --hex 2> /dev/null` intpro=`${halgetpropertybin} --udi "${parent}" --key "usb.product_id" --hex 2> /dev/null` if [ "a${pro}" = "a${intpro}" -a "a${ven}" = "a${intven}" ]; then if [ "a${int}" = "aany" ]; then intint="any" else intint=`${halgetpropertybin} --udi "${parent}" --key "usb.interface.number" 2> /dev/null` fi if [ "a${intint}" = "a${int}" ]; then unset intven; unset intpro; unset intint; unset intport; unset parent unset pro; unset ven; unset int; unset port; unset candidates debug run_command "${haldevicebin} ${udi}" debug "Found proper device (%s) from HAL.\n" "${haldevice}" update_hal $1 ${udi} return 0 fi unset intint fi unset intven unset intpro fi unset parent fi unset intport else debug "%s NOT a character special.\n" "${haldevice}" fi else debug "Not linux.device_file.\n" fi done unset pro unset ven unset int unset port unset candidates unset haldevice unset udi debug "HAL was not helpful into finding serial device.\n" return 1 } tty_not_busy() { if [ "a$1" = "a" ]; then return 1 fi if [ ! -c "$1" ]; then return 1 fi users=`ls -l /proc/*/fd/* 2> /dev/null | grep "${1}$" | sed -e "s/\(.*\)\/proc\/\([0-9][0-9]*\)\/fd\/\(.*\)/\2/g" | sort | uniq | wc -l` users=`echo ${users}` if [ "a${users}" = "a0" ]; then unset users debug "Device %s is not busy.\n" "$1" return 0 fi debug "Device %s is currently occupied by %d process(es).\n" "$1" "${users}" users=`ls -l /proc/*/fd/* 2> /dev/null | grep "${1}$" | sed -e "s/\(.*\)\/proc\/\([0-9][0-9]*\)\/fd\/\(.*\)/\2/g" | sort | uniq` users=`echo ${users}` debug "PIDs are: %s\n" "${users}" for p in ${users} do debug run_command "${psbin} -p ${p} -o pid,comm= | tail -1" users="${users} `${psbin} -p ${p} -o comm=`" done if [ "a$2" = "a" ]; then debug "Will wait for 10 seconds in case port is freed.\n" verbose "Waiting $1 to be released by PID ${users}." count=11 else count=$2 fi count=`expr ${count} - 1` if [ "a${count}" = "a0" ]; then notify "Port ${1} is currently occupied by ${users}." unset users return 1 else debug "Wait for another %d seconds in case port $1 is freed.\n" "${count}" sleep 1 if tty_not_busy $1 $count; then unset users return 0 else return 1 fi fi unset users return 1 } gsm_capabilities() { verbose "Checking GSM capabilities..." debug "Will probe port \"%s\" for GSM capabilities.\n" "${1}" if [ "a$1" = "a" ]; then return 1 fi if [ ! -c "$1" ]; then return 1 fi debug "Will attempt to get ATI strings from modem.\n" debug "%s -t 2 -e ABORT ERROR "" AT OK ATZ OK ATE1 OK ATI OK 'AT+CGSN' OK\n" "${chatbin}" if tty_not_busy $1; then sh -c "${chatbin} -t 2 -e ABORT ERROR \"\" AT OK ATZ OK ATE1 OK ATI OK 'AT+CGSN' OK >> ${1} < ${1} 2> /tmp/sakis3g.chat.$$.log" 2> /dev/null if [ -f "/tmp/sakis3g.chat.$$.log" ]; then debug show_file "/tmp/sakis3g.chat.$$.log" found=`grep "+CGSM" "/tmp/sakis3g.chat.$$.log" 2> /dev/null | wc -l` found=`echo ${found}` if [ "a${found}" = "a0" ]; then debug "No GSM capabilities were advertised.\n" found=`grep "^\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\)$" "/tmp/sakis3g.chat.$$.log" 2> /dev/null | wc -l` found=`echo ${found}` if [ "a${found}" = "a1" ]; then debug "However, IMEI information was provided. Will consider it capable.\n" fi fi rm -f "/tmp/sakis3g.chat.$$.log" else found=0 fi if [ "a${found}" = "a1" ]; then debug "Found GSM capabilities on %s.\n" "${1}" unset found return 0 else debug "No GSM capabilities found on %s.\n" "${1}" unset found return 1 fi else debug "Port %s is busy. Cannot determine GSM capabilities.\n" "${1}" return 1 fi } autodetect_dev() { unset autodevice if hal_unavailable; then return 1 fi debug "Attempting to autodetect appropriate serial device for %s.\n" "$1" eval pro=\${${1}_product} eval ven=\${${1}_vendor} intnum=`${lsusbbin} -v -d ${ven}:${pro} | grep -i "transfer type" | grep -i interrupt | wc -l` intnum=`echo ${intnum}` if [ "a${intnum}" != "a1" ]; then debug "Failed. %d interruptable endpoints detected.\n" "${intnum}" unset intnum unset pro unset ven return 1 else debug "Device %s (%s:%s) has only one interruptable endpoint.\n" "$1" "${ven}" "${pro}" fi debug "Will now parse output of lsusb: ${lsusbbin} -v -d ${ven}:${pro}\n" debug run_command "${lsusbbin} -v -d ${ven}:${pro}" intnum=`${lsusbbin} -v -d ${ven}:${pro} | grep -i -B 4000 "transfer type *interrupt" | grep -i "bInterfaceNumber" | tail -1 | sed -e "s/ */ /g" | sed -e "s/^ //g" | cut -d\ -f2` t=`expr ${intnum} + 1 - 1 2> /dev/null` if [ "a${t}" != "a${intnum}" -o "a${t}" = "a" ]; then debug "Failed. Unable to parse lsusb output. Second word had been \"%s\".\n" "${intnum}" unset intnum unset pro unset ven unset t return 1 else debug "Found modem lines on interface #%d.\n" "${intnum}" fi for udi in `${halfindbypropertybin} --key "info.category" --string "serial" 2> /dev/null` do hlparent=`${halgetpropertybin} --udi ${udi} --key "info.parent" 2> /dev/null` hldevice=`${halgetpropertybin} --udi ${udi} --key "linux.device_file" 2> /dev/null` hlvendor=`${halgetpropertybin} --udi ${hlparent} --key "usb.vendor_id" 2> /dev/null` hlvendor=`printf "%.4x" "${hlvendor}"` hlproduct=`${halgetpropertybin} --udi ${hlparent} --key "usb.product_id" 2> /dev/null` hlproduct=`printf "%.4x" "${hlproduct}"` hldriver=`${halgetpropertybin} --udi ${hlparent} --key "info.linux.driver" 2> /dev/null` hlinterf=`${halgetpropertybin} --udi ${hlparent} --key "usb.interface.number" 2> /dev/null` hlgrandpa=`${halgetpropertybin} --udi ${hlparent} --key "info.parent" 2> /dev/null` hlname=`${halgetpropertybin} --udi ${hlgrandpa} --key "info.product" 2> /dev/null` debug "Checking %s:%s:%s:%d:%s:%s...\n" \ "${hldevice}" "${hlvendor}" "${hlproduct}" "${hlinterf}" \ "${hldriver}" "${hlname}" if [ "a${hldevice}" != "a" -a "a${hlvendor}" != "a" -a "a${hlproduct}" != "a" -a "a${hlinterf}" != "a" ]; then if [ -c "${hldevice}" -a "a${hlvendor}" = "a${ven}" -a "a${hlproduct}" = "a${pro}" -a "a${hlinterf}" = "a${intnum}" ]; then debug "MATCHED\n" debug "Autodetected serial device %s to be the proper one.\n" "${hldevice}" update_hal $1 ${udi} autodevice=${hldevice} unset hlparent ; unset hldevice ; unset hlvendor ; unset hlproduct unset hldriver ; unset hlinterf ; unset hlgrandpa ; unset hlname unset udi unset t unset intnum unset pro unset ven return 0 else debug "Not matched.\n" fi else debug "Skipping. Inadequate information.\n" fi unset hlparent ; unset hldevice ; unset hlvendor ; unset hlproduct unset hldriver ; unset hlinterf ; unset hlgrandpa ; unset hlname done debug "Unable to locate serial device from interface #%d of %s:%s.\n" "${intnum}" "${ven}" "${pro}" unset t unset intnum unset pro unset ven return 1 } # Finds serial device for hardware given as argument. find_dev() { verbose "Detecting port..." if autodetect_dev $1; then devices="${autodevice}" elif find_dev_in_hal $1; then devices="${haldevice}" else eval devices=\${${1}_candidates} if [ "a${devices}" = "adetectmax" -o "a${devices}" = "adetectmin" ]; then eval pro=\${${1}_product} eval ven=\${${1}_vendor} if [ "a${pro}" != "a" -a "a${ven}" != "a" ]; then sysfsdir "${ven}:${pro}" if [ "a${sysfsloc}" != "a" ]; then if [ -d "${sysfsloc}" ]; then if [ "a${devices}" = "adetectmax" ]; then devices="/dev/`basename \`ls -1dr ${sysfsloc}/*/tty* 2> /dev/null | head -1\` 2> /dev/null`" elif [ "a${devices}" = "adetectmin" ]; then devices="/dev/`basename \`ls -1d ${sysfsloc}/*/tty* 2> /dev/null | head -1\` 2> /dev/null`" fi fi fi if [ "a${devices}" != "a" ]; then if [ ! -c "${devices}" ]; then devices="" debug "Failed to detect devices for %s.\n" "$1" else debug "Modem detected to be on %s.\n" "${devices}" fi fi fi unset pro unset ven unset dev fi if [ "a${devices}" = "adetectmax" -o "a${devices}" = "adetectmin" ]; then notify "Unable to detect tty devices for ${1}." devices="" fi fi for dev in ${devices} do if [ -c "${dev}" ]; then pppdevice=${dev} return 0 fi done return 1 } # Constructs a private wvdial.conf wvdial_conf() { unset wvdialconf cat > /tmp/wvdial.conf.$$ <> /tmp/wvdial.conf.$$ cat >> /tmp/wvdial.conf.$$ < /tmp/pppd.conf.$$ <> "/tmp/pppd.conf.$$" printf "OK \"ATDT%s\"\n" "${pppphone}" >> "/tmp/pppd.conf.$$" pppdconf="/tmp/pppd.conf.$$" debug "Config file that will be used is: \"%s\".\n" "${pppdconf}" debug show_file "${pppdconf}" cat > "${pppdpeerdir}/sakis3g" <>$1 <$1 2> "/tmp/chat.log.$$" debug show_file "/tmp/chat.log.$$" ISPID=`grep "^+COPS:" "/tmp/chat.log.$$" | cut -d\" -f2` rm -f "/tmp/chat.log.$$" ISPID=`echo ${ISPID}` debug "Modem reported that current operator ID is \"%s\".\n" "${ISPID}" if [ -n "${FORCE_ISP}" ]; then ISPID="${FORCE_ISP}" debug "Overrided by configuration to \"%s\".\n" "${ISPID}" ${chatbin} -e ${CHAT_ABORT_STRINGS} '' ATZ OK "AT+COPS=1,2,\"${ISPID}\"" OK AT+COPS? OK >> $1 < $1 2> "/tmp/chat.log.$$" debug show_file "/tmp/chat.log.$$" debug "Modem should not be roaming now.\n" rm -f "/tmp/chat.log.$$" fi if [ "a${ISPID}" != "a" ]; then eval ISPName=\${ISP_${ISPID}_name} if [ "a${ISPName}" != "a" ]; then debug "Found supported operator %s.\n" "${ISPName}" echo "${ISPID}" > "${runhome}/.3gnet" 2> /dev/null if [ -f "${runhome}/.3gnet" ]; then chown ${runner} "${runhome}/.3gnet" chmod 644 "${runhome}/.3gnet" fi echo "${ISPID}" > "/tmp/sakis3g.3gnet" 2> /dev/null if [ -f "/tmp/sakis3g.3gnet" ]; then chown ${runner} "/tmp/sakis3g.3gnet" chmod 644 "/tmp/sakis3g.3gnet" fi net_getinfo return 0 fi fi notify "Unknown operator ${ISPID}" unset ISPID unset ISPName return 1 } request_pin() { verbose "Getting PIN..." printf "SIM in modem %s needs PIN (press ENTER to abort): " "$1" read i i=`echo $i` if [ "a${i}" = "a" ]; then echo "No PIN entered." return 1 fi b=`expr 1$i + 1 - 1 2> /dev/null` b=`echo $b` if [ "a$b" = "a1$i" ]; then if [ "1${i}" -ge "10000" -a "1${i}" -le "19999" ]; then SIM_PIN=${i} debug "Valid PIN %s typed by user. Will send it to modem.\n" "${i}" return 0; fi fi notify "Invalid PIN ${i}. Will not send it to modem." return 1 } have_pin() { if [ -f "/etc/3gpin" ]; then chmod 600 "/etc/3gpin" SIM_PIN=`head -1 "/etc/3gpin" | cut -b1-4` SIM_PIN=`echo ${SIM_PIN}` debug "Using PIN found in file %s.\n" "/etc/3gpin" elif [ -f "${runhome}/.3gpin" ]; then chmod 600 "${runhome}/.3gpin" SIM_PIN=`head -1 "${runhome}/.3gpin" | cut -b1-4` SIM_PIN=`echo ${SIM_PIN}` debug "Using PIN found in file %s\n" "${runhome}/.3gpin" fi if [ -n "${SIM_PIN}" ]; then debug "PIN is available: %s.\n" "${SIM_PIN}" return 0; fi notify "Modem needs PIN. Do \"echo yourpin > ${runhome}/.3gpin\" or edit ${me}." return 1 } not_registered() { ${chatbin} -e ${CHAT_ABORT_STRINGS} '' ATZ OK AT+COPS=0,2 OK 'AT+COPS?' OK >>$1 <$1 2> "/tmp/chat.log.$$" debug show_file "/tmp/chat.log.$$" COPS=`grep "^+COPS:" "/tmp/chat.log.$$" | cut -d\" -f2` rm -f "/tmp/chat.log.$$" COPS=`echo ${COPS}` if [ "a${COPS}" = "a+COPS: 0" ]; then unset COPS return 0 fi unset COPS return 1 } register_network() { wat=0 verbose "Registering network..." while not_registered $1; do if [ "${wat}" -gt "20" ]; then debug "Giving up after %d seconds have passed.\n" "${wat}" break else wat=`expr ${wat} + 4` wat=`echo ${wat}` fi debug "Waiting modem to register network (%d seconds).\n" "${wat}" sleep 4 done } send_pin() { verbose "Sending PIN..." eval supplier=\${$1_pinsupply} if [ "a$3" != "a" ]; then supplier="$3" fi if [ "a${supplier}" = "a" ]; then supplier="AT+CPIN=%s" fi supplycommand=`printf "${supplier}" "${SIM_PIN}"` unset supplier if tty_not_busy $2; then ${chatbin} -e ${CHAT_ABORT_STRINGS} '' ATZ OK ${supplycommand} 'OK' >>$2 <$2 2> "/tmp/chat.log.$$" debug show_file "/tmp/chat.log.$$" debug "PIN sent.\n" rm -f "/tmp/chat.log.$$" unset supplycommand # Wait for SIM to unlock sleep 3 if pin_ok $1 $2 nopin $4; then debug "PIN was accepted by SIM card.\n" debug "Press ENTER to continue.\n" return 0; else notify "PIN failed. BE CAREFUL: Your SIM may get blocked." return 1; fi else notify "Cannot send PIN to modem. Modem in use." return 1; fi } # Contacts modem on serial port $2 to check if modem # needs a PIN, using $1_pincheck. If it does, it uses # $1_pinsupply to supply SIM_PIN. pin_ok() { eval checker=\${$1_pincheck} if [ "a${checker}" = "a" ]; then if [ "a$4" != "a" ]; then checker="$4" debug "Using specified pin checker %s.\n" "${checker}" else checker="AT+CPIN?" debug "Using default pin checker %s.\n" "${checker}" fi fi debug "Checking %s modem on %s for PIN requirement.\n" "$1" "$2" if tty_not_busy $2; then ${chatbin} -e ${CHAT_ABORT_STRINGS} '' ATZ OK ${checker} OK AT OK >>$2 <$2 2> "/tmp/chat.log.$$" debug "${chatbin} -e ${CHAT_ABORT_STRINGS} '' ATZ OK ${checker} OK\n" debug show_file "/tmp/chat.log.$$" response=`grep "^.CPIN: " "/tmp/chat.log.$$" | cut -d\ -f2-` response=`echo ${response}` error=`grep "ERROR" "/tmp/chat.log.$$" | wc -l` error=`echo ${error}` rm -f "/tmp/chat.log.$$" else debug "Cannot check modem %s for PIN requirement.\n" "$1" return 1 fi if [ "${error}" -ne "0" ]; then response="ERROR" fi unset error if [ "a${response}" = "aREADY" ]; then debug "Modem does not need PIN. Good.\n" return 0; fi if [ "a${response}" = "aSIM PIN" ]; then if [ "a${3}" = "anopin" ]; then debug "Modem still needs PIN.\n" return 1; else if have_pin; then if [ "a${SIM_PIN}" = "aprompt" -o "a${SIM_PIN}" = "aprom" ]; then if [ -z "${display}" ]; then if request_pin $1; then if send_pin $1 $2; then return 0 else return 1 fi else return 1 fi else eval supplier=\${$1_pinsupply} if [ "a${supplier}" = "a" ]; then supplier="AT+CPIN=%s" fi ${xtermbin} -T "SIM on $1 needs PIN" -e ${me} pinprompt $1 $2 "${supplier}" "${checker}" 2> /dev/null unset supplier if pin_ok $1 $2 nopin; then return 0; else return 1; fi fi else if send_pin $1 $2; then return 0 else return 1 fi fi else return 1; fi fi fi notify "Got \"${response}\" while checking for PIN." return 1 } apn9menu() { if [ "a$1" = "a" ]; then return 1 fi unset options for op in $1 do nam=`echo ${op} | cut -d: -f2 | sed -e "s/_/ /g"` ap=`echo ${op} | cut -d: -f1` if [ "a${nam}" = "a" ]; then options="${options} \"${ap}:exec echo APN-${ap}\"" else options="${options} \"${nam} (${ap}):exec echo APN-${ap}\"" fi unset nam unset ap done debug "---------------\n" debug "9menu options:\n" debug "---------------\n" debug "%s\n" "${options}" debug "---------------\n" result=`sh -c "${xmenubin} -font \"${menufont}\" -bg ${bgcolor} -fg ${fgcolor} -display \"${display}\" -label \"${ISPName}\" \"${ISPName} offers multiple APNs:\" \"-:\" \"Choose carefully one of them.:\" \"Making the wrong choice may:\" \"trigger increased charges!!!:\" \"Contact operator if unsure.:\" \"-:\" ${options} \"-:\" \"Cancel connection:exec echo APN-\"" | grep "^APN-" | cut -d- -f2-` unset options debug "---------------\n" debug "9menu returned:\n" debug "---------------\n" debug "%s\n" "${result}" debug "---------------\n" for op in $1 do ap=`echo ${op} | cut -d: -f1` if [ "a${ap}" = "a${result}" ]; then eval ISP_${ISPID}_initstrings="AT+CGDCONT=1,\\\"IP\\\",\\\"`echo ${op} | cut -d: -f1`\\\"" pppuser=`echo ${op} | cut -d: -f3` ppppass=`echo ${op} | cut -d: -f4` debug "APN selected by %s: \"%s\"\n" "${runner}" "${op}" debug "APN: %s\n" "${ap}" debug "Username: %s\n" "${pppuser}" debug "Password: %s\n" "${ppppass}" fi unset ap done unset result if [ "a${pppuser}" != "a" ]; then return 0 fi return 1 } select_apn() { if [ "a$1" = "a" ]; then return 1 fi case "${output}" in 9menu) if apn9menu "$1"; then return 0 else return 1 fi ;; *) notify "${ISPName} has multiple APNs. Use FORCE_APN." echo echo "${ISPName} has multiple APNs." echo echo "Known APNs are:" echo "$1" | sed -e "s/ /\\n/g" | sed -e "s/^/ /g" echo echo "Either supply your own, or use one of those. Syntax is:" echo echo "FORCE_APN=::: ${me} ${allargs}" echo echo "e.g." echo " FORCE_APN=internet::myname:mypassword ${me} ${allargs}" echo ;; esac return 1 } apn_ok() { verbose "Determining APN..." unset ISP_${ISPID}_initstrings unset pppuser unset ppppass if [ "a${ISPID}" = "a" ]; then return 1 fi if [ "a${FORCE_APN}" != "a" ]; then eval ISP_${ISPID}_initstrings="AT+CGDCONT=1,\\\"IP\\\",\\\"`echo ${FORCE_APN} | cut -d: -f1`\\\"" pppuser=`echo ${FORCE_APN} | cut -d: -f3` ppppass=`echo ${FORCE_APN} | cut -d: -f4` debug "APN defined by user: \"%s\"\n" "${FORCE_APN}" debug "APN: %s\n" "`echo ${FORCE_APN} | cut -d: -f1`" debug "Username: %s\n" "${pppuser}" debug "Password: %s\n" "${ppppass}" return 0 fi eval apns=\${ISP_${ISPID}_apn} apncount=`echo "${apns}" | wc -w` apncount=`echo $apncount` if [ "a${apncount}" = "a1" ]; then unset apncount eval ISP_${ISPID}_initstrings="AT+CGDCONT=1,\\\"IP\\\",\\\"`echo ${apns} | cut -d: -f1`\\\"" pppuser=`echo ${apns} | cut -d: -f3` ppppass=`echo ${apns} | cut -d: -f4` debug "Only one APN defined for %s(%s): \"%s\"\n" "${ISPName}" "${ISPID}" "${apns}" debug "APN: %s\n" "`echo ${apns} | cut -d: -f1`" debug "Username: %s\n" "${pppuser}" debug "Password: %s\n" "${ppppass}" unset apns return 0 elif [ "a${apncount}" = "a" -o "a${apncount}" = "a0" ]; then notify "No APN(s) defined for ${ISPName}(${ISPID})" unset apncount unset apns return 1 elif select_apn "${apns}"; then unset apncount unset apns return 0 fi unset apncount unset apns return 1 } fix_driver() { # Get attached hardware available in the order preferred. find_hardware # If no hardware was found, select a connected USB device. if [ -z "${hardware}" ]; then if choose_usb; then find_hardware else return 1 fi fi # Make sure only one is selected if unique_hardware; then debug "Will reload driver just for %s.\n" "${hardware}" else return 1 fi # Just in case if [ "a${hardware}" = "a" ]; then debug "No hardware selected.\n" return 1 fi # Scroll through available hardware to find the one that can connect for pi in ${hardware} do # Unset previously set devices unset pppdevice # Attempt to load driver and determine pppdevice if reload_option_driver ${pi}; then if find_dev ${pi}; then debug "\"Option\" driver is loaded successfully.\n" else debug "\"Option\" driver loaded but no devices created.\n" legacy_reload_driver ${pi} find_dev ${pi} fi else debug "\"Option\" driver failed to load.\n" debug "Will attempt to load legacy driver.\n" legacy_reload_driver ${pi} find_dev ${pi} fi if [ "a${pppdevice}" != "a" ]; then if gsm_capabilities ${pppdevice}; then if pin_ok $pi ${pppdevice}; then if net_ok ${pppdevice}; then if apn_ok ${pppdevice}; then if [ -n "${direct_pppd}" ]; then pppd_conf $pi else wvdial_conf $pi fi return 0 else debug "No APN defined for %s on modem %s(%s).\n" "${ISPName}" "$pi" "${pppdevice}" fi else debug "Unknown operator on device %s.\n" "$pi" fi else debug "PIN issue on device %s.\n" "$pi" fi else debug "Not probed GSM capabilities on %s.\n" "${pppdevice}" fi else notify "No devices found for device $pi." fi done return 1 } # Displays message using 9menu notify_9menu() { echo "Notification: $1" title="${product}" if [ "a${title}" = "a" ]; then title="3G connection" fi if [ -z "$1" ]; then unset title return 1 elif [ -z "${xmenubin}" ]; then echo "Cannot find 9menu executable. Please add it to your system/path." unset title return 1 elif [ ! -x "${xmenubin}" ]; then echo "Cannot execute ${xmenubin}." unset title return 1 elif [ -z "${display}" ]; then echo "Unable to find display." unset title return 1 elif [ -z "${me}" ]; then ${xmenubin} -display "${display}" -label "${title}" "Unable to determine path of $0. Please add it to your path.:" "Close:exec echo $0 not found in path." unset title return 1 fi debug run_command "${xmenubin} -display \"${display}\" -label \"${title}\" \"$1:\" \"Close:exec echo \\\"User saw message $1\\\"\"" unset title } # Displays message using aosd notify_aosd() { echo "Notification: $1" if [ -z "$1" ]; then return 1 elif [ -z "${aosdbin}" ]; then echo "Cannot find 9menu executable. Please add it to your system/path." return 1 elif [ ! -x "${aosdbin}" ]; then echo "Cannot execute ${xmenubin}." return 1 elif [ -z "${display}" ]; then echo "Unable to find display." return 1 fi if [ -z "${runner}" ]; then find_user fi if [ -z "${runner}" ]; then echo "Unable to find user." return 1 fi export DISPLAY="${display}" home=$(${getentbin} passwd ${runner} | cut -d: -f6) if [ -f "${home}/.Xauthority" -a "a${XAUTHORITY}" = "a" ]; then export XAUTHORITY="${home}/.Xauthority" debug "XAUTHORITY file was detected and exported (%s).\n" "${XAUTHORITY}" fi bn=`basename ${aosdbin}` killall -q "${bn}" if [ "a${bn}" = "aaosd_cat" ]; then echo "$1" | ${aosdbin} -n "${OSDFONT}" -f 100 -t 2 --input=- -u 10000 -o 3000 & sleep 3 else echo "$1" | ${aosdbin} -f "${XOSDFONT}" -p bottom -l 1 -o 1 -c green -s 1 -O 2 -d 3 & sleep 3 fi } # Uses output method to notify user notify() { if [ -z "$1" ]; then return 1 fi case "${output}" in 9menu) notify_9menu "$1" ;; aosd_cat) notify_aosd "$1" ;; *) echo "$1" ;; esac } have_me() { if [ "a${me}" = "a" ]; then notify "Unable to find $0 in path. Please add it." exit fi return 0 } # Make sure we are root we_are_root() { if have_me; then if [ "a${UID}" = "a0" -o "a${USER}" = "aroot" -o "a${EUID}" = "a0" ]; then debug "We are root. Proceeding.\n" return 0 elif [ "a$1" = "atestonly" ]; then debug "We are not currently root. Proceeding.\n" return 1 else verbose "Acquiring root privileges..." if [ -n "${alwayssudo}" ]; then debug "Not root. This instance will sudo call and abort.\n" ${sudobin} ${me} ${allargs} a=$? if [ "$a" -eq "1" ]; then echo echo If it didn\'t worked, you need to add yourself echo to sudo file: as root, type visudo and add the echo following line at the end of file: echo ${runner} ALL=\(root\) NOPASSWD: ${me} fi else debug "Not root. This instance will call %s and abort." "`basename ${gksubin}`" if [ -n "${display}" -a -z "${stick_to_console}" ]; then export DISPLAY=${display} ${gksubin} "${me} ${allargs}" else echo "Please supply root password, or press enter to abort." ${subin} -c "${me} ${allargs}" fi fi exit fi fi debug "We are root. Proceed.\n" return 0 } # Returns true(0) if we are not connected. notconnected() { if [ -z "$1" ]; then int=${pppint} else int=$1 fi con=`cat /proc/net/dev | grep " ${int}:" | wc -l` con=`echo $con` if [ "${con}" -ne "0" ]; then wrongdns=`grep 10.11.12.13 /etc/resolv.conf | wc -l` wrongdns=`echo ${wrongdns}` if [ "${wrongdns}" -eq "1" ]; then if [ "a{sick_are_ok}" = "a" ]; then con="0" killall -q pppd debug "Connected, but with wrong DNS server.\n" debug "Dropped sick connection.\n" else debug "Connection is sick. Instructed by config to tolerate it.\n" fi fi fi if [ "${con}" -ne "0" ]; then peerup=`${netstatbin} -rn | grep " ${int}$" | grep -v "^0.0.0.0" | wc -l` peerup=`echo ${peerup}` con=${peerup} fi if [ "${con}" -ne "0" ]; then debug "Connected.\n" else debug "Not connected.\n" fi return ${con} } # Returns true(0) if process with PID given as # argument, is not running any more. notrunning() { if [ -n "$1" ]; then running=`${psbin} -p $1 -o pid= | wc -l` running=`echo ${running}` else running=1 fi if [ "${running}" -ne "0" ]; then debug "PID %s is still running.\n" "$1" else debug "PID %s is not running any more.\n" "$1" fi return ${running} } # Downloads ISP icon if connected. geticon() { unset received_icon if [ -n "${wgetbin}" ]; then if [ -x "${wgetbin}" ]; then if notconnected; then notify "Not connected." return 1 else net_getinfo if [ "a${ISPIcon}" != "a" ]; then extension=`basename "${ISPIcon}" | cut -d. -f2-` rm -f "${runhome}/${ISPID}_logo.${extension}" ${wgetbin} -O "${runhome}/${ISPID}_logo.${extension}" "${ISPIcon}" > /dev/null 2> /dev/null if [ -s "${runhome}/${ISPID}_logo.${extension}" ]; then received_icon="${runhome}/${ISPID}_logo.${extension}" return 0 else rm -f "${runhome}/${ISPID}_logo.${extension}" notify "Unable to get icon, unknown reason." return 1 fi unset extension else notify "No icon is known for this operator." return 1 fi fi else notify "Unable to get icon, wget missing." return 1 fi fi notify "No icon received" return 1 } choose_modem() { if [ -z "${hardware}" ]; then return 0 fi if [ "a${output}" != "a9menu" -o "a${stick_to_console}" != "a" -o -z "${display}" ]; then debug "In appropriate call to choose_modem. Returning failure.\n" return 1 fi if [ ! -x "${lsusbbin}" ]; then if we_are_root; then notify "Unable to locate lsusb utility." return 1 else notify "You need to be root for selecting custom USB modem." fi fi options="" for i in ${processed} do usbid=`echo "${i}" | cut -d\( -f2 | cut -d\) -f1 | sed -e "s/:/ /g"` value=`echo "${i}" | cut -d\( -f1` name=`echo "${value}" | sed -e "s/_/ /g"` options="${options} \"${name} (${usbid}):exec echo USBMODEM-${value}\"" unset usbid ; unset name done debug "---------------\n" debug "9menu options:\n" debug "---------------\n" debug "%s\n" "${options}" debug "---------------\n" result=`sh -c "${xmenubin} -teleport -font \"${menufont}\" -bg ${bgcolor} -fg ${fgcolor} -display \"${display}\" -label \"Select modem\" \"More than one modems were found.:\" \"Select the one to use:\" \"-:\" ${options} \"-:\" \"To avoid seeing this message:\" \"provide its name as argument.:\" \"-:\" \"Cancel connection:exec echo USBMODEM-\"" | grep "^USBMODEM-" | cut -d- -f2-` unset options debug "---------------\n" debug "9menu returned:\n" debug "---------------\n" debug "%s\n" "${result}" debug "---------------\n" if [ "a${result}" != "a" ]; then debug "User requested to use %s for connecting.\n" "${result}" set_modem "${result}" unset result return 0 else debug "User did not select USB device from list.\n" fi debug "No user selected modem found.\n" unset result return 1 } choose_usb() { if [ -n "${hardware}" ]; then return 0 fi if [ "a${output}" != "a9menu" -o "a${stick_to_console}" != "a" -o -z "${display}" ]; then echo "No modem found. Please use USBMODEM variable to define it." return 1 fi if [ ! -x "${lsusbbin}" ]; then if we_are_root; then notify "Unable to locate lsusb utility." return 1 else notify "You need to be root for selecting custom USB device." fi fi options="" for i in `lsusb | cut -d: -f2- | sort | uniq | sed -e "s/^ *//g" | sed -e "s/ *$//g" | sed -e "s/ /_/g"` do usbid=`echo "${i}" | cut -d_ -f2 | sed -e "s/:/ /g"` name=`echo "${i}" | cut -d_ -f3- | sed -e "s/_/ /g"` options="${options} \"${usbid} ${name}:exec echo USBID-${usbid}\"" unset usbid ; unset name done debug "---------------\n" debug "9menu options:\n" debug "---------------\n" debug "%s\n" "${options}" debug "---------------\n" result=`sh -c "${xmenubin} -teleport -font \"${menufont}\" -bg ${bgcolor} -fg ${fgcolor} -display \"${display}\" -label \"No modem found\" \"No known modem found. If your modem is:\" \"currently plugged, select it from this list:\" \"-:\" ${options} \"-:\" \"To avoid seeing this message:\" \"set USBMODEM variable.:\" \"-:\" \"Cancel connection:exec echo USBID-\"" | grep "^USBID-" | cut -d- -f2-` unset options debug "---------------\n" debug "9menu returned:\n" debug "---------------\n" debug "%s\n" "${result}" debug "---------------\n" if [ "a${result}" != "a" ]; then USBMODEM=`echo "${result}" | sed -e "s/ /:/g"` debug "User specified %s being a modem.\n" "${USBMODEM}" set_user_modem if [ "a${USER_MODEM_vendor} ${USER_MODEM_product}" = "a${result}" ]; then export USBMODEM debug "User selected USB device found.\n" unset result return 0 fi else debug "User did not select USB device from list.\n" fi debug "No user selected modem found.\n" unset result return 1 } show9menu() { if [ -z "${me}" ]; then notify "$0 not found in path." return 1 fi # Default colors ISPproduct="3G Connection" fgcolor="white" bgcolor="black" # Override if possible net_getinfo # Detect hardware find_hardware # If not detected, select one of connected USB devices. if [ -z "${hardware}" ]; then if choose_usb; then find_hardware else return 1 fi fi # Make sure only one modem is selected. if unique_hardware; then debug "One modem selected/available. Will show main menu.\n" else return 1 fi localhardware=`echo ${hardware} | cut -d\ -f1` if notconnected; then ${xmenubin} -font "${menufont}" -bg ${bgcolor} -fg ${fgcolor} -display "${display}" -label "${ISPproduct}" "Found modem ${localhardware}:" "-:" "Connect:exec ${me} connect ${selected_modem}" "-:" "Help:${xtermbin} -sb -rightbar -T Help -e ${me} helpstop" "-:" "Close:exec echo -n" "-:" "(c) 2009, 2010, Sakis Dimopoulos:" "Released under GNU GPL v2:" & menupid=$! while [ "1" = "1" ]; do find_hardware unique_hardware if [ -z "$hardware" ]; then killall -q 9menu exit fi if notconnected; then if notrunning ${menupid}; then exit fi if [ "${localhardware}" != "`echo ${hardware} | cut -d\ -f1`" ]; then killall -q 9menu show9menu exit else sleep 1 fi else killall -q 9menu sleep 3 show9menu exit fi done else ${xmenubin} -font "${menufont}" -bg ${bgcolor} -fg ${fgcolor} -display "${display}" -iconic -label "${ISPproduct}" "Connected ..." "-:" "Disconnect:exec ${me} disconnect" "-:" "Download icon:${me} geticon" "Create shortcut:${me} desktop" "Help:${xtermbin} -sb -rightbar -T Help -e ${me} helpstop" "-:" "Close:exec echo -n" & menupid=$! while [ "1" = "1" ]; do find_hardware unique_hardware if [ -z "$hardware" ]; then killall -q 9menu notify "Modem disconnected" exit fi if notconnected; then killall -q 9menu show9menu exit else if notrunning ${menupid}; then exit fi sleep 1 fi done fi } # Deletes all currently existing default gateways. delete_gateways() { while [ "1" = "1" ]; do host=`${netstatbin} -rn | grep "^0.0.0.0 " | tail -1 | sed -e "s/ */ /g" | cut -d\ -f2` if [ "a${host}" != "a" ]; then ${routebin} del default gw ${host} else debug "Deleted all default gateways.\n" return 0 fi done } # Makes sure only our pppint(ppp0) peer is used as default gateway. fix_routing() { if [ -z "$1" ]; then int=${pppint} else int=$1 fi peer=`${netstatbin} -rn | grep " ${int}$" | grep -v "^0.0.0.0 " | cut -d\ -f1` if [ "a${peer}" != "a" ]; then verbose "Fixing routing table..." delete_gateways ${routebin} add default gw ${peer} debug "Added correct default gateway: %s.\n" "${peer}" fi } # Closes any open ppp connections. ispdisconnect() { debug "Requested to disconnect.\n" if we_are_root; then if notconnected; then debug "Were not connected anyway.\n" return 1 fi verbose "Disconnecting..." 50 killall -q pppd killall -q `basename ${wvdialbin}` debug "Dropped connection.\n" sleep 1 verbose "Disconnected" 100 return 0 else return 1 fi } fix_dns() { if [ -n "${dnsserver1}" -o -n "${dnsserver2}" ]; then verbose "Setting up DNS servers..." rm -f "/etc/resolv.conf" touch "/etc/resolv.conf" chmod 644 "/etc/resolv.conf" if [ -n "${dnsserver1}" ]; then printf "nameserver %s\n" "${dnsserver1}" >> "/etc/resolv.conf" fi if [ -n "${dnsserver2}" ]; then printf "nameserver %s\n" "${dnsserver2}" >> "/etc/resolv.conf" fi printf "\n# This file was autogenerated by %s.\n\n" "${me}" >> "/etc/resolv.conf" debug "Set up custom DNS server(s).\n" fi } # Connects to ISP. ispconnect() { if notconnected; then if fix_driver; then tries=0 while notconnected; do tries=`expr ${tries} + 1` tries=`echo ${tries}` if [ "${tries}" -gt "${wvdialattempts}" ]; then notify "Failed to connect" rm -f "${wvdialconf}" "${pppdconf}" "${pppdpeerdir}/sakis3g" #${me} return 1 fi ispdisconnect logpid=0 if [ -n "${direct_pppd}" ]; then debug "Will now attempt to spawn pppd \(try \#%d\).\n" "${tries}" else debug "Will now attempt to spawn wvdial \(try \#%d\).\n" "${tries}" fi if [ -n "${log_connection}" ]; then if [ -z "${display}" ]; then if [ -n "${direct_pppd}" ]; then sh -c ${pppdbin} ${pppdevice} ${pppdoptions} connect "${chatbin} -v -f ${pppdconf}" user ${pppuser} password ${ppppass} else sh -c ${wvdialbin} -C ${wvdialconf} & fi logpid=$! else export DISPLAY="${display}" if [ -n "${direct_pppd}" ]; then ${xtermbin} -T "Connection log..." -e "/bin/sh -c \"${wvdialbin} -C ${wvdialconf}\"" & else ${xtermbin} -T "Connection log..." -e "/bin/sh -c \"${pppdbin} ${pppdevice} ${pppdoptions} connect \\\"${chatbin} -v -f ${pppdconf}\\\" user ${pppuser} password ${ppppass}\"" & fi logpid=$! fi else verbose "Connecting (try #${tries})..." if [ -n "${direct_pppd}" ]; then #verbose "Starting pppd (try #${tries})..." if [ -n "${DEBUG}" ]; then ${setsidbin} ${pppdbin} ${pppdevice} ${pppdoptions} connect "${chatbin} -v -f ${pppdconf}" user ${pppuser} password ${ppppass} & else ${setsidbin} ${pppdbin} ${pppdevice} ${pppdoptions} connect "${chatbin} -v -f ${pppdconf}" user ${pppuser} password ${ppppass} <&- >&- 2>&- & fi else #verbose "Starting wvdial (try #${tries})..." if [ -n "${DEBUG}" ]; then ${setsidbin} ${wvdialbin} -C ${wvdialconf} & else ${setsidbin} ${wvdialbin} -C ${wvdialconf} <&- >&- 2>&- & fi fi logpid=$! fi if [ -n "${direct_pppd}" ]; then debug "pppd spawnned. Waiting %d seconds before evaluating results.\n" "${wait_interval}" else debug "wvdial spawnned. Waiting %d seconds before evaluating results.\n" "${wait_interval}" fi sleep ${wait_interval} if notconnected; then if [ -n "${direct_pppd}" ]; then debug "pppd failed to connect within time frame. Dropping.\n" else debug "wvdial failed to connect within time frame. Dropping.\n" fi killall -q pppd killall -q wvdial kill -9 ${logpid} else debug "pppd established connection.\n" if [ -f "${wvdialconf}" ]; then rm -f "${wvdialconf}" 2> /dev/null fi if [ -f "${pppdconf}" ]; then rm -f "${pppdconf}" 2> /dev/null fi if [ -f "${pppdpeerdir}/sakis3g" ]; then rm -f "${pppdpeerdir}/sakis3g" 2> /dev/null fi fix_routing fix_dns if [ "a${connection_hook}" != "a" ]; then debug "Will now execute connection_hook (%s).\n" "${connection_hook}" ${connection_hook} debug "Connection hook returned.\n" fi debug ">>>>>>>>> This is an intentional pause, due to DEBUG being on. <<<<<<<<<\n" debug ">>>>>>>> You can safely press Ctrl+C. Connection will not drop. <<<<<<<<\n" verbose "Connected!" 100 return 0 fi done fi else notify "Already connected." fi return 1 } toggleconnection() { if notconnected; then if ispconnect; then notify "Connected to ${ISPName}" fi else if ispdisconnect; then notify "Disconnected" fi fi } desktopshortcut() { if [ ! -d "${runhome}/Desktop" ]; then notify "Unable to locate your desktop directory." return 1 fi if geticon; then mkdir -p "${runhome}/.local" chown ${runner} "${runhome}/.local" mkdir -p "${runhome}/.local/share" chown ${runner} "${runhome}/.local/share" mkdir -p "${runhome}/.local/share/icons" chown ${runner} "${runhome}/.local/share/icons" mv "${received_icon}" "${runhome}/.local/share/icons/." icon="${runhome}/.local/share/icons/`basename ${received_icon}`" unset received_icon else icon="/usr/share/icons/gnome/scalable/status/nm-device-wireless.svg" fi cat > "${runhome}/Desktop/sakis3g.desktop" < /dev/null | grep ":${ven}$"` if [ "a${venentry}" != "a" ]; then for ff in ${venentry} do unset dirloc dirloc=`dirname \`echo ${ff} | sed -e "s/:${ven}$//g"\` 2> /dev/null` if [ "a${dirloc}" != "a" ]; then if [ -d "${dirloc}" ]; then dirpro=`cat ${dirloc}/idProduct` if [ "a${dirpro}" = "a${pro}" ]; then sysfsloc="${dirloc}" debug "Device %s sysfs dir found: %s\n" "$1" "${sysfsloc}" unset dirpro; unset dirloc unset venentry; unset ven; unset pro return 0 fi unset dirpro fi fi unset dirloc done fi debug "No device from %s located in sysfs.\n" "${ven}" unset venentry unset ven; unset pro else debug "Cannot determine sysfs directory of device %s. Device not present.\n" "$1" return 1 fi return 1 } sysfsattr() { unset SYSFS_USB_Manufacturer unset SYSFS_USB_Product unset SYSFS_USB_Serial if [ "a$1" = "a" ]; then return 1 fi # Attempt to retrieve sysfs directory of device $1 sysfsdir $1 if [ "a${sysfsloc}" = "a" ]; then return 1 fi if [ ! -d "${sysfsloc}" ]; then return 1 fi SYSFS_USB_Manufacturer=`sed -e "s/ /_/g" "${sysfsloc}/manufacturer" 2> /dev/null` SYSFS_USB_Product=`sed -e "s/ /_/g" "${sysfsloc}/product" 2> /dev/null` SYSFS_USB_Serial=`sed -e "s/ /_/g" "${sysfsloc}/serial" 2> /dev/null` debug "Information from sysfs:\n" debug "USB Manufacturer: %s\n" "${SYSFS_USB_Manufacturer}" debug "USB Product: %s\n" "${SYSFS_USB_Product}" debug "USB Serial: %s\n" "${SYSFS_USB_Serial}" return 0 } scsisysfsattr() { unset scsidir unset SYSFS_SCSI_Vendor unset SYSFS_SCSI_Model unset SYSFS_SCSI_Revision if [ "a$1" = "a" ]; then return 1 fi if sysfsattr $1; then unset scsidir # How many seconds to wait for SCSI device to settle counter=20 while [ "a${scsidir}" = "a" ]; do target=`ls -1d ${sysfsloc}/*.0/host*/target*/*/vendor 2> /dev/null` if [ "a${target}" != "a" ]; then scsidir=`dirname "${target}" 2> /dev/null` if [ "a${scsidir}" = "a" ]; then unset scsidir elif [ ! -d "${scsidir}" ]; then unset scsidir fi fi unset target if [ "a${scsidir}" = "a" ]; then if [ "${counter}" -gt "0" ]; then debug "Device not yet settled. Will be waiting for another %d second(s).\n" "${counter}" sleep 1 else debug "Giving up. SCSI device did not settle, or is switched already.\n" break fi counter=`expr ${counter} - 1` fi done unset counter if [ "a${scsidir}" != "a" ]; then debug "SCSI device is settled.\n" SYSFS_SCSI_Vendor=`sed -e "s/ /_/g" "${scsidir}/vendor" 2> /dev/null` SYSFS_SCSI_Model=`sed -e "s/ /_/g" "${scsidir}/model" 2> /dev/null` SYSFS_SCSI_Revision=`sed -e "s/ /_/g" "${scsidir}/rev" 2> /dev/null` debug "SCSI Vendor: %s\n" "${SYSFS_SCSI_Vendor}" debug "SCSI Model: %s\n" "${SYSFS_SCSI_Model}" debug "SCSI Revision: %s\n" "${SYSFS_SCSI_Revision}" return 0 else debug "SCSI target not settled with reasonable time.\n" fi fi return 1 } set_user_modem() { debug "User defined that USB modem is on: %s\n" "${USBMODEM}" if [ ! -x "${lsusbbin}" ]; then if we_are_root; then notify "Unable to locate lsusb binary." else notify "Please run as root for ${USBMODEM} to work." fi fi found=`${lsusbbin} -d ${USBMODEM} 2> /dev/null | wc -l` if [ "a${found}" = "a1" ]; then USER_MODEM_vendor=`echo ${USBMODEM} | cut -d\ -f1 | cut -d: -f1` USER_MODEM_product=`echo ${USBMODEM} | cut -d\ -f1 | cut -d: -f2` USER_MODEM_initstrings="ATZ AT&F ATE1 V1 AT&D2 &C1 ATS0=0 ATQ0 AT+FCLASS=0" USER_MODEM_pincheck="AT+CPIN?" USER_MODEM_pinsupply="AT+CPIN=%s" if [ "a${USBDRIVER}" = "a" ]; then USER_MODEM_driver="usbserial" USER_MODEM_arguments="vendor=0x${USER_MODEM_vendor} product=0x${USER_MODEM_product}" else USER_MODEM_driver="${USBDRIVER}" USER_MODEM_arguments="" fi USER_MODEM_candidates="detectmax" # Reasonable wait time USER_MODEM_needstime="10" hardware_candidates="USER_MODEM ${hardware_candidates}" if [ -n "${DEBUG}" ]; then debug "USB device %s suggested by %s is found. Setup is:\n" "${USBMODEM}" "${runner}" set | grep "^USER_MODEM_" fi else debug "User defined modem not found.\n" fi unset found } set_modem() { if [ "a$1" = "a" ]; then return 1 fi value=`echo $1 | sed -e "s/ /_/g" | sed -e "s/^\([0-9abcdefABCDEF][0-9abcdefABCDEF][0-9abcdefABCDEF][0-9abcdefABCDEF]\)_\([0-9abcdefABCDEF][0-9abcdefABCDEF][0-9abcdefABCDEF][0-9abcdefABCDEF]\)$/\1:\2/g"` if usbdeviceexists ${value}; then export selected_modem="${value}" debug "Found that %s refers to USB ID %s.\n" "$1" "${value}" else export selected_modem="$1" debug "Will be using \"%s\" as selected modem.\n" "$1" fi return 0 } ask_key() { printf "\nPress Ctrl+C to continue. Paused due to DEBUG variable." tail -f "/dev/null" } print_version() { printf "Sakis 3G All-in-one script - Version %s\n" "${MYVERSION}" printf "(c) Sakis Dimopoulos 2009, 2010 under GNU GPL v2\n\n" } print_usage() { find_hardware print_version printf "Usage:\n" printf "\t%s [command]\n\n" "${me}" printf "This script is supposed to work out-of-the-box for connecting you with your 3G\n" printf "operator, as long as the operator and your hardware equipment are supported. If\n" printf "your SIM card requires PIN, you can either edit this script, or create a file in\n" printf "your home directory named .3gpin. e.g. echo \"1234\" > %s/.3gpin\n" "${runhome}" printf "A system wide PIN can be stored in /etc/3gpin file. This file can safely be\n" printf "unreachable by users, as modem operations are performed with root priviledges.\n" printf "\n" printf "NOTE: This script requires root priviledges to properly work. It is currently\n" if [ -n "${alwayssudo}" ]; then printf "configured to always attempt to get them by sudo calling itself. \n\n" else printf "configured to use %s popup, requesting for root password, in order to get\n" "`basename ${gksubin}`" printf "them. If not executed from an X session, it will claim priviledges by sudo\n" printf "calling itself.\n\n" fi printf "When sudo is called, for you to be able to properly use this script, at least\n" printf "one of the following lines must appear in your sudoers file (as root, type\n" printf "visudo, to edit it):\n" printf "\t%s ALL=(root) NOPASSWD: %s\n" "${runner}" "${me}" printf "\t%%group ALL=(root) NOPASSWD: %s\n" "${me}" printf "where \"group\" must be replaced with a group that you belong." found=`grep "^dialout:" /etc/group | wc -l` found=`echo ${found}` if [ "${found}" -eq "1" ]; then printf " In your system\n" printf "already exists a \"dialout\" group which is a nice candidate you can use. You\n" printf "may be able to add yourself to this group by typing (as root):\n\tadduser %s dialout" "${runner}" fi printf "\n" printf "\n" printf "Available commands are:\n" printf "connect - Attempts to establish 3G connection.\n" printf "disconnect - Stops all active PPP connections.\n" printf "toggle - Attempts to establish 3G connection. If already connected, it\n" printf " disconnects instead.\n" printf "reconnect - Attempts to establish 3G connection. If already connected, it\n" printf " first disconnects and then attempts.\n" printf "start - Same as connect. Provided for use as init.d script.\n" printf "stop - Same as disconnect. Provided for use as init.d script.\n" printf "reload - Same as reconnect. Provided for use as init.d script.\n" printf "force-reload - Same as reload. Provided for use as init.d script.\n" printf "restart - Same as reload. Provided for use as init.d script.\n" printf "geticon - Attempts to receive icon of your operator from the internet.\n" printf "desktop - Creates desktop shortcut for this script.\n" printf "status - Prints connection status and exits. Exit code is 0 if connected,\n" printf " or 99 if not connected.\n" printf "setup - Setups all known modems for use by other programs. Useful for\n" printf " using this script within a udev rule.\n" printf "help - Prints this screen and exits.\n" printf "\n" printf "* If called with no arguments from a terminal, shows this screen and exits.\n" printf "* If called with no arguments from an X session and 9menu is installed, it\n displays menu.\n" printf "* If called with no arguments from an X session and 9menu is " printf "NOT installed, it\n checks if aosd is installed instead. If " printf "it is, it assumes \"toggle\" command.\n" printf "* If called with no arguments from an X session and neither " printf "9menu nor aosd are\n installed. Prints this screen and exits.\n" printf "\n" if [ "a${output}" = "a9menu" ]; then printf "NOTE: 9menu is installed on your system.\n\n" fi if [ "a${output}" = "aaosd_cat" ]; then printf "NOTE: aosd and/or xosd are installed on your system.\n\n" fi printf "This version supports the following hardware (in the order it is attempted):\n%s\n\n" "${hardware_candidates}" printf "This script is powered by Usb-ModeSwitch version 1.1.0 for switching supported\n" printf "hardware. Usb-ModeSwitch is written by Josua Dietze and is available at\n" printf "http://www.draisberghof.de/usb_modeswitch/. If you encounter a problem using\n" printf "this script, you should contact Josua Dietze (or preferably Usb-ModeSwitch\n" printf "forums) only if your modem does not get switched, remaining in storage mode.\n" printf "If your modem gets properly switched, still it does not work, you should\n" printf "contact the author of this script.\n\n" printf "This version supports the following operators:\n" set | grep "^ISP_\(.*\)_name=" | sed -e "s/ISP_\(.*\)_name=\(.*\)$/ \1 \2/g" printf "\n" printf "The following hardware was detected: %s\n\n" "${hardware}" if [ -n "${direct_pppd}" ]; then printf "Current setup uses pppd directly, to establish connection.\n\n" else printf "Current setup uses wvdial to establish connection.\n\n" fi printf "If your operator offers multiple APNs, first you need to identify the correct\n" printf "one for you case. Choosing the wrong one may trigger additional costs. If you\n" printf "want to specify your APN, either edit this script and add FORCE_APN variable,\n" printf "or specify it in command line, using the following syntax:\n\n" printf "\t$ export FORCE_APN=internet.myprovider.com::username:password\n\t$ %s connect\n\n" "${me}" printf "APN syntax is :[]::. Friendly\n" printf "name is not mandatory, but if supplied must contain no spaces. Switch them\n" printf "with underscores.\n\n" printf "You may (or may not) find additional information on my blog available at\n" printf "http://sakis.tel4u.gr/blog/.\n" } # Get my location if possible me=`readlink -e $0` if [ "a${me}" = "a" ]; then me="`which $0 2> /dev/null`" fi if [ "a${me}" != "a" ]; then if [ ! -x "${me}" ]; then unset me fi else unset me fi # Include my other self cat ${me} | grep "^#SECOND:" | sed -e "s/^#SECOND://g" > /tmp/me.$$ . /tmp/me.$$ rm -f "/tmp/me.$$" # Skip some stuff if not required. if [ "a$1" != "ahelp" \ -a "a$1" != "ahelpstop" \ -a "a$1" != "astatus" \ -a "a$1" != "aversion" \ -a "a$1" != "a--version" \ -a "a$1" != "a--help" \ ]; then # Determine who really executed me find_user # Find a display find_display # Setup notification method auto_notify_method # Switch modems switchdevices fi # Establish user defined modem if [ -n "${USBMODEM}" ]; then set_user_modem fi case "$1" in connect) set_modem "$2" ispconnect ;; start) set_modem "$2" ispconnect ;; disconnect) ispdisconnect ;; stop) ispdisconnect ;; toggle) set_modem "$2" toggleconnection ;; geticon) if geticon; then notify "Received operator logo at ${received_icon}." unset received_icon fi ;; desktop) desktopshortcut ;; reconnect) set_modem "$2" ispdisconnect ispconnect ;; clicked) set_modem "$2" if [ "a${output}" = "a9menu" ]; then show9menu else toggleconnection fi ;; reload) set_modem "$2" ispdisconnect ispconnect ;; force-reload) set_modem "$2" ispdisconnect ispconnect ;; setup) if we_are_root; then find_hardware stick_to_console=yes output="term" echo "Hardware list:" for pi in ${hardware} do if reload_option_driver $pi; then if find_dev $pi; then echo -n "${pi}: ready on ${pppdevice} (option). " fi fi if [ "a${pppdevice}" = "a" ]; then debug "\"Option\" driver did not work. Will attempt with legacy driver.\n" legacy_reload_driver $pi if find_dev $pi; then echo -n "${pi}: ready on ${pppdevice} (legacy). " fi fi if [ "a${pppdevice}" != "a" ]; then if gsm_capabilities ${pppdevice}; then echo "(+CGSM:OK)." else echo "(+CGSM:Failed to detect)." fi else echo "${pi}: no device found." fi unset pppdevice done else echo "Need root privileges to setup modems." fi ;; restart) set_modem "$2" ispdisconnect ispconnect ;; pinprompt) if [ -n "${DEBUG}" ]; then addexittrap "ask_key" EXIT fi if [ "a$2" = "a" -o "a$3" = "a" ]; then printf "No modem supplied. Syntax is:\n\t%s %s modem_name tty_port\n\ne.g.\n\t%s %s %s %s\n\n" "${me}" "${1}" "${me}" "${1}" "ZTE" "/dev/ttyUSB0" elif we_are_root; then if request_pin $2; then if [ -c "$3" ]; then send_pin $2 $3 $4 $5 else notify "Device $3 specified as target to PIN, was not valid." fi fi else notify "Need root privileges to send PIN to modem." fi ;; version) print_version ;; --version) print_version ;; --help) print_usage ;; help) print_usage ;; helpstop) print_usage printf "Use Shift+PgUp/PgDown to navigate. Press Ctrl+C to close." tail -f /dev/null ;; status) if notconnected; then echo Disconnected. exit 99 else echo Connected. exit 0 fi ;; *) set_modem "$1" case "${output}" in 9menu) show9menu ;; aosd_cat) toggleconnection ;; *) print_usage ;; esac ;; esac # If method had been OSD, wait some secs so that user can # see message. if [ "a${output}" = "aaosd_cat" -a "a$1" != "ahelp" -a "a$1" != "ahelpstop" ]; then debug "Waiting a bit for user to see OSD message.\n" #sleep 3 fi verbose "clear" # Just to make sure exit ################################################################################ ## Comments below are not really comments, and you should avoid ## ## messing with them. Everything below is automatically generated ## ## during build and automatically embedded during runtime. ## ################################################################################ #SECOND:get_modeswitch() { #SECOND: unset modeswitchbin #SECOND: uudecodebin=`which uudecode` #SECOND: if [ "a${uudecodebin}" = "a" ]; then #SECOND: notify "uudecode not installed. Unable to switch your modem." #SECOND: return 1 #SECOND: fi #SECOND: #SECOND: cat < /tmp/usb_modeswitch.$$ #SECOND:begin-base64 755 /dev/stdout #SECOND:f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAA8I8ECDQAAAB0dQAAAAAAADQAIAAH #SECOND:ACgAGwAaAAYAAAA0AAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQB #SECOND:AAAUgQQIFIEECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQI5G0A #SECOND:AORtAAAFAAAAABAAAAEAAAAAcAAAAPAECADwBAjQAwAAYCQAAAYAAAAAEAAA #SECOND:AgAAABRwAAAU8AQIFPAECNgAAADYAAAABgAAAAQAAAAEAAAAKAEAACiBBAgo #SECOND:gQQIIAAAACAAAAAEAAAABAAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYA #SECOND:AAAEAAAAL2xpYi9sZC1saW51eC5zby4yAAAEAAAAEAAAAAEAAABHTlUAAAAA #SECOND:AAIAAAAGAAAACAAAACUAAABAAAAAHwAAADIAAAAuAAAANAAAAA8AAAAXAAAA #SECOND:AAAAAAoAAAASAAAAOwAAAAwAAAAAAAAAAAAAAAAAAAArAAAAIwAAAAQAAAAA #SECOND:AAAAMAAAAD0AAAAAAAAAMQAAADYAAAAmAAAAAQAAABgAAAAAAAAAFAAAAAgA #SECOND:AAAzAAAAKAAAADcAAAANAAAAJAAAAAcAAAAnAAAAPwAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAwAAAAUAAAAAAAAAEwAAAAIAAAAQAAAAAAAAAD4AAAAL #SECOND:AAAAAAAAABUAAAAAAAAADgAAADoAAAAAAAAAAAAAABYAAAAAAAAAIQAAACAA #SECOND:AAAAAAAAAAAAADwAAAAlAAAAHQAAAAYAAAApAAAAGQAAAAAAAAAbAAAAOAAA #SECOND:ADkAAAAeAAAAKgAAAC8AAAAAAAAAIgAAADUAAAARAAAAHAAAACwAAAAAAAAA #SECOND:AAAAAAkAAAAaAAAAAAAAAC0AAAADAAAANwAAAAIAAAAGAAAAiAAgAQDlVAs3 #SECOND:AAAAOgAAAD4AAAC645J8KB2MHENF1eysS+PAOPKLHNhxWBy5jfEO6tPvDrOi #SECOND:9xIAAAAAAAAAAAAAAAAAAAAA0QAAAAAAAADKAAAAEgAAAOcAAAAAAAAAwwAA #SECOND:ABIAAADWAQAAAAAAACkAAAASAAAArQEAAAAAAADcAAAAEgAAABEAAAAAAAAA #SECOND:AAAAACAAAAAgAAAAAAAAAAAAAAAgAAAAUgIAAAAAAABnAQAAEgAAALkBAAAA #SECOND:AAAAIgEAABIAAABRAAAAAAAAAJ0BAAASAAAAkQAAAAAAAAAcAQAAEgAAAAgC #SECOND:AAAAAAAAMgAAABIAAADdAQAAAAAAAHEBAAASAAAA8gEAAAAAAABYAAAAEgAA #SECOND:AG4CAAAAAAAAuQEAABIAAAClAQAAAAAAALkBAAASAAAAzwEAAAAAAABGAAAA #SECOND:EgAAAIkCAAAAAAAA+wAAABIAAADqAQAAAAAAAIUAAAASAAAAjAEAAAAAAAAJ #SECOND:AQAAEgAAADoCAAAAAAAARwAAABIAAABhAAAAAAAAAC8CAAASAAAAHgIAAAAA #SECOND:AAAbAgAAEgAAAEMAAAAAAAAAcAAAABIAAAD7AAAAAAAAAMoAAAASAAAAZAEA #SECOND:AAAAAAAYAAAAEgAAALQAAAAAAAAAOwAAABIAAAAXAgAAAAAAAEYAAAASAAAA #SECOND:4wEAAAAAAACvAAAAEgAAAJ8BAAAAAAAAMgAAABIAAACTAQAAAAAAACUAAAAS #SECOND:AAAAOgAAAAAAAABgAAAAEgAAACYBAAAAAAAA6wAAABIAAABaAgAAAAAAADYA #SECOND:AAASAAAATQIAAAAAAAAjAAAAEgAAAEYCAAAAAAAAcQEAABIAAABZAgAAAAAA #SECOND:ACEAAAASAAAA+QEAAAAAAAB0AQAAEgAAACUCAAAAAAAAiQEAABIAAAClAAAA #SECOND:AAAAAMoAAAASAAAANgEAAAAAAADyAAAAEgAAAMgBAAAAAAAAEgEAABIAAAB7 #SECOND:AAAAAAAAAHwBAAASAAAAYQIAAAAAAABlAgAAEgAAALQBAAAAAAAAzAEAABIA #SECOND:AADBAQAAAAAAAK4AAAASAAAAgAIAAAAAAACqAAAAEgAAAMMAAAAAAAAAPgAA #SECOND:ABIAAAAAAgAAAAAAAK4AAAASAAAAcgAAAAAAAAB9AAAAEgAAAGcCAAAAAAAA #SECOND:QwAAABIAAACaAQAAAAAAAP0AAAASAAAASAEAAAAAAADXAAAAEgAAABEBAAAA #SECOND:AAAACgEAABIAAADxAAAAAAAAAD4AAAASAAAAoQIAAGAUBQgAAAAAEADx/xAC #SECOND:AAAA9AQIBAAAABEAGACOAgAA0PMECAAAAAAQAPH/fQEAALzJBAgEAAAAEQAP #SECOND:ADMCAADg8wQIBAAAABEAGACVAgAA0PMECAAAAAAQAPH/PQAAAGCMBAgAAAAA #SECOND:EgALADQAAACcyQQIAAAAABIADgAsAgAABPQECAQAAAARABgAAGxpYnVzYi0w #SECOND:LjEuc28uNABfX2dtb25fc3RhcnRfXwBfSnZfUmVnaXN0ZXJDbGFzc2VzAF9m #SECOND:aW5pAHVzYl9pbml0AHVzYl9zZXRfZGVidWcAdXNiX2ZpbmRfYnVzc2VzAHVz #SECOND:Yl9maW5kX2RldmljZXMAdXNiX29wZW4AdXNiX2dldF9zdHJpbmdfc2ltcGxl #SECOND:AHVzYl9jbGFpbV9pbnRlcmZhY2UAdXNiX2NsZWFyX2hhbHQAdXNiX2J1bGtf #SECOND:d3JpdGUAdXNiX2J1bGtfcmVhZAB1c2JfcmVsZWFzZV9pbnRlcmZhY2UAdXNi #SECOND:X3Jlc2V0AHVzYl9jbG9zZQB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24AdXNiX3Nl #SECOND:dF9hbHRpbnRlcmZhY2UAdXNiX2NvbnRyb2xfbXNnAHVzYl9nZXRfZHJpdmVy #SECOND:X25wAHVzYl9kZXRhY2hfa2VybmVsX2RyaXZlcl9ucAB1c2JfZ2V0X2J1c3Nl #SECOND:cwBsaWJjLnNvLjYAX0lPX3N0ZGluX3VzZWQAZmZsdXNoAHN0cmNweQBleGl0 #SECOND:AGZvcGVuAHN0cnJjaHIAc2lnbmFsAHB1dHMAcHV0Y2hhcgBzdHJzcG4Ac3Ry #SECOND:dG9rAHN0cnRvbABzeXNsb2cAZmdldHMAc3RybGVuAG9wZW5sb2cAbWVtc2V0 #SECOND:AHN0cnN0cgBzdHJjc3BuAHRvdXBwZXIAc3Rkb3V0AG1lbWNweQBmY2xvc2UA #SECOND:bWFsbG9jAG9wdGFyZwBzdGRlcnIAZ2V0b3B0X2xvbmcAZndyaXRlAGF0b2kA #SECOND:c3RyY2hyAGZwcmludGYAc2xlZXAAc3RyY21wAF9fbGliY19zdGFydF9tYWlu #SECOND:AGNsb3NlbG9nAGZyZWUAX2VkYXRhAF9fYnNzX3N0YXJ0AF9lbmQAR0xJQkNf #SECOND:Mi4xAEdMSUJDXzIuMAAAAAAAAAACAAIAAAAAAAIAAgAAAAAAAgACAAIAAgAC #SECOND:AAIAAgACAAIAAgAAAAMAAAAAAAAAAAACAAIAAwACAAAAAAACAAIAAgACAAIA #SECOND:AgAAAAAAAgAAAAIAAgACAAIAAAACAAAAAgACAAAAAAAAAAEAAgABAAEAAgAB #SECOND:AAEAAQACAAAAAQACAHMBAAAQAAAAAAAAABFpaQ0AAAMApgIAABAAAAAQaWkN #SECOND:AAACALACAAAAAAAA7PAECAYFAADg8wQIBTsAAAD0BAgFOAAABPQECAU/AAD8 #SECOND:8AQIBwEAAADxBAgHAgAABPEECAcDAAAI8QQIBwQAAAzxBAgHBQAAEPEECAcH #SECOND:AAAU8QQIBwgAABjxBAgHCQAAHPEECAcKAAAg8QQIBwsAACTxBAgHDAAAKPEE #SECOND:CAcNAAAs8QQIBw4AADDxBAgHDwAANPEECAcQAAA48QQIBxEAADzxBAgHEgAA #SECOND:QPEECAcTAABE8QQIBxQAAEjxBAgHFQAATPEECAcWAABQ8QQIBxcAAFTxBAgH #SECOND:GAAAWPEECAcZAABc8QQIBxoAAGDxBAgHGwAAZPEECAccAABo8QQIBx0AAGzx #SECOND:BAgHHgAAcPEECAcfAAB08QQIByAAAHjxBAgHIQAAfPEECAciAACA8QQIByMA #SECOND:AITxBAgHJAAAiPEECAclAACM8QQIByYAAJDxBAgHJwAAlPEECAcoAACY8QQI #SECOND:BykAAJzxBAgHKgAAoPEECAcrAACk8QQIBywAAKjxBAgHLQAArPEECAcuAACw #SECOND:8QQIBy8AALTxBAgHMAAAuPEECAcxAAC88QQIBzIAAMDxBAgHMwAAxPEECAc0 #SECOND:AADI8QQIBzUAAMzxBAgHNgAAVYnlU4PsBOgAAAAAW4HDhGQAAIuT/P///4XS #SECOND:dAXoXgAAAOj5AwAA6OQ8AABYW8nD/zX08AQI/yX48AQIAAAAAP8l/PAECGgA #SECOND:AAAA6eD/////JQDxBAhoCAAAAOnQ/////yUE8QQIaBAAAADpwP////8lCPEE #SECOND:CGgYAAAA6bD/////JQzxBAhoIAAAAOmg/////yUQ8QQIaCgAAADpkP////8l #SECOND:FPEECGgwAAAA6YD/////JRjxBAhoOAAAAOlw/////yUc8QQIaEAAAADpYP// #SECOND://8lIPEECGhIAAAA6VD/////JSTxBAhoUAAAAOlA/////yUo8QQIaFgAAADp #SECOND:MP////8lLPEECGhgAAAA6SD/////JTDxBAhoaAAAAOkQ/////yU08QQIaHAA #SECOND:AADpAP////8lOPEECGh4AAAA6fD+////JTzxBAhogAAAAOng/v///yVA8QQI #SECOND:aIgAAADp0P7///8lRPEECGiQAAAA6cD+////JUjxBAhomAAAAOmw/v///yVM #SECOND:8QQIaKAAAADpoP7///8lUPEECGioAAAA6ZD+////JVTxBAhosAAAAOmA/v// #SECOND:/yVY8QQIaLgAAADpcP7///8lXPEECGjAAAAA6WD+////JWDxBAhoyAAAAOlQ #SECOND:/v///yVk8QQIaNAAAADpQP7///8laPEECGjYAAAA6TD+////JWzxBAho4AAA #SECOND:AOkg/v///yVw8QQIaOgAAADpEP7///8ldPEECGjwAAAA6QD+////JXjxBAho #SECOND:+AAAAOnw/f///yV88QQIaAABAADp4P3///8lgPEECGgIAQAA6dD9////JYTx #SECOND:BAhoEAEAAOnA/f///yWI8QQIaBgBAADpsP3///8ljPEECGggAQAA6aD9//// #SECOND:JZDxBAhoKAEAAOmQ/f///yWU8QQIaDABAADpgP3///8lmPEECGg4AQAA6XD9 #SECOND:////JZzxBAhoQAEAAOlg/f///yWg8QQIaEgBAADpUP3///8lpPEECGhQAQAA #SECOND:6UD9////JajxBAhoWAEAAOkw/f///yWs8QQIaGABAADpIP3///8lsPEECGho #SECOND:AQAA6RD9////JbTxBAhocAEAAOkA/f///yW48QQIaHgBAADp8Pz///8lvPEE #SECOND:CGiAAQAA6eD8////JcDxBAhoiAEAAOnQ/P///yXE8QQIaJABAADpwPz///8l #SECOND:yPEECGiYAQAA6bD8////JczxBAhooAEAAOmg/P//Me1eieGD5PBQVFJoAMkE #SECOND:CGgQyQQIUVZozJ4ECOhP/f//9JCQkJCQkJCQkJCQkJCQVYnlU4PsBIA9CPQE #SECOND:CAB1QIsVDPQECLgM8AQILQjwBAjB+AKNWP852nMfjbYAAAAAjUIBowz0BAj/ #SECOND:FIUI8AQIixUM9AQIOdpy58YFCPQECAGDxARbXcONdgCNvCcAAAAAVYnlg+wI #SECOND:oRDwBAiFwHQSuAAAAACFwHQJxwQkEPAECP/QycOQVYnlg+woD7YFTfQECITA #SECOND:dBOLRQiJRCQExwQk98oECOjI/f//x0QkBBDLBAiLRQiJBCTolDMAAKMg9AQI #SECOND:oSD0BAiFwHQioSD0BAjHRCQIEAAAAMdEJAQAAAAAiQQk6Hr8//+jLPQECMdE #SECOND:JAQdywQIi0UIiQQk6FEzAACjIPQECKEg9AQIhcB0IqEg9AQIx0QkCBAAAADH #SECOND:RCQEAAAAAIkEJOg3/P//ozD0BAjHRCQEK8sECItFCIkEJOgOMwAAoyD0BAih #SECOND:IPQECIXAdBehIPQECIlEJATHBCRgEAUI6Nz8///rB8YFYBAFCADHRCQEPcsE #SECOND:CItFCIkEJOjPMgAAoyD0BAihIPQECIXAdCKhIPQECMdEJAgQAAAAx0QkBAAA #SECOND:AACJBCTotfv//6M09AQIx0QkBEnLBAiLRQiJBCTojDIAAKMg9AQIoSD0BAiF #SECOND:wHQioSD0BAjHRCQIEAAAAMdEJAQAAAAAiQQk6HL7//+jJPQECMdEJARXywQI #SECOND:i0UIiQQk6EkyAACjIPQECKEg9AQIhcB0IqEg9AQIx0QkCBAAAADHRCQEAAAA #SECOND:AIkEJOgv+///oyj0BAjHRCQEZssECItFCIkEJOgGMgAAoyD0BAihIPQECIXA #SECOND:dFehIPQECA+2AA++wIkEJOim+v//g/hZdCShIPQECA+2AA++wIkEJOiO+v// #SECOND:g/hUdAyhIPQECA+2ADwxdQnHRewBAAAA6wfHRewAAAAAD7ZF7KJI9AQI6wfG #SECOND:BUj0BAgAx0QkBHjLBAiLRQiJBCTohzEAAKMg9AQIoSD0BAiFwHRXoSD0BAgP #SECOND:tgAPvsCJBCToJ/r//4P4WXQkoSD0BAgPtgAPvsCJBCToD/r//4P4VHQMoSD0 #SECOND:BAgPtgA8MXUJx0XwAQAAAOsHx0XwAAAAAA+2RfCiSfQECOsHxgVJ9AQIAMdE #SECOND:JASDywQIi0UIiQQk6AgxAACjIPQECKEg9AQIhcB0V6Eg9AQID7YAD77AiQQk #SECOND:6Kj5//+D+Fl0JKEg9AQID7YAD77AiQQk6JD5//+D+FR0DKEg9AQID7YAPDF1 #SECOND:CcdF9AEAAADrB8dF9AAAAAAPtkX0okr0BAjrB8YFSvQECADHRCQEjssECItF #SECOND:CIkEJOiJMAAAoyD0BAihIPQECIXAdFehIPQECA+2AA++wIkEJOgp+f//g/hZ #SECOND:dCShIPQECA+2AA++wIkEJOgR+f//g/hUdAyhIPQECA+2ADwxdQnHRfgBAAAA #SECOND:6wfHRfgAAAAAD7ZF+KJL9AQI6wfGBUv0BAgAx0QkBJfLBAiLRQiJBCToCjAA #SECOND:AKMg9AQIoSD0BAiFwHRXoSD0BAgPtgAPvsCJBCToqvj//4P4WXQkoSD0BAgP #SECOND:tgAPvsCJBCTokvj//4P4VHQMoSD0BAgPtgA8MXUJx0X8AQAAAOsHx0X8AAAA #SECOND:AA+2RfyiTPQECOsHxgVM9AQIAMdEJASfywQIi0UIiQQk6IsvAACjIPQECKEg #SECOND:9AQIhcB0IqEg9AQIx0QkCBAAAADHRCQEAAAAAIkEJOhx+P//ozj0BAjHRCQE #SECOND:r8sECItFCIkEJOhILwAAoyD0BAihIPQECIXAdBehIPQECIlEJATHBCSg+QQI #SECOND:6Bb5///rB8YFoPkECADHRCQEvssECItFCIkEJOgJLwAAoyD0BAihIPQECIXA #SECOND:dCKhIPQECMdEJAgQAAAAx0QkBAAAAACJBCTo7/f//6JR9AQIx0QkBMvLBAiL #SECOND:RQiJBCToxi4AAKMg9AQIoSD0BAiFwHQioSD0BAjHRCQIEAAAAMdEJAQAAAAA #SECOND:iQQk6Kz3//+jPPQECMdEJATcywQIi0UIiQQk6IMuAACjIPQECKEg9AQIhcB0 #SECOND:IqEg9AQIx0QkCBAAAADHRCQEAAAAAIkEJOhp9///ok70BAjHRCQE5csECItF #SECOND:CIkEJOhALgAAoyD0BAihIPQECIXAdCKhIPQECMdEJAgQAAAAx0QkBAAAAACJ #SECOND:BCToJvf//6IN8gQIx0QkBPPLBAiLRQiJBCTo/S0AAKMg9AQIoSD0BAiFwHQS #SECOND:oSD0BAiJBCToE/j//6JP9AQIx0QkBADMBAiLRQiJBCToyi0AAKMg9AQIoSD0 #SECOND:BAiFwHQioSD0BAjHRCQIEAAAAMdEJAQAAAAAiQQk6LD2//+jVPQECMdEJAQK #SECOND:zAQIi0UIiQQk6IctAACjIPQECKEg9AQIhcB0IqEg9AQIx0QkCBAAAADHRCQE #SECOND:AAAAAIkEJOht9v//oxDyBAjHRCQEGMwECItFCIkEJOhELQAAoyD0BAihIPQE #SECOND:CIXAdCKhIPQECMdEJAgQAAAAx0QkBAAAAACJBCToKvb//6MU8gQIuGAQBQgP #SECOND:tgCEwHQKxwUw9AQIAAAAAMYFUPQECAHJw1WJ5YPsCKEk9AQIiUQkBMcEJCPM #SECOND:BAjo+/b//6Eo9AQIiUQkBMcEJDvMBAjo5vb//6Es9AQIhcB0F6Es9AQIiUQk #SECOND:BMcEJFPMBAjoyPb//+sMxwQka8wECOhq9///oTD0BAiFwHQXoTD0BAiJRCQE #SECOND:xwQkg8wECOic9v//6wzHBCSbzAQI6D73//+4YBAFCA+2AITAdBTHRCQEYBAF #SECOND:CMcEJLPMBAjobvb//6E09AQIhcB0F6E09AQIiUQkBMcEJMnMBAjoUPb//+sM #SECOND:xwQk4cwECOjy9v//D7YFSPQECA++wIlEJATHBCT5zAQI6Cj2//8PtgVJ9AQI #SECOND:D77AiUQkBMcEJBDNBAjoDvb//w+2BUr0BAgPvsCJRCQExwQkH80ECOj09f// #SECOND:D7YFS/QECA++wIlEJATHBCQuzQQI6Nr1//8PtgVM9AQID77AiUQkBMcEJDvN #SECOND:BAjowPX//6E49AQIhcB0F6E49AQIiUQkBMcEJEfNBAjoovX//+sMxwQkX80E #SECOND:COhE9v//uKD5BAgPtgCEwHQWx0QkBKD5BAjHBCR4zQQI6HT1///rDMcEJI3N #SECOND:BAjoFvb//w+2BVH0BAgPvsCJRCQExwQkpc0ECOhM9f//oTz0BAiFwHQXoTz0 #SECOND:BAiJRCQExwQkts0ECOgu9f//6wzHBCTPzQQI6ND1//+hVPQECIlEJATHBCTp #SECOND:zQQI6Av1//+hEPIECIXAeBWhEPIECIlEJATHBCT7zQQI6O30//+hFPIECIXA #SECOND:eBWhFPIECIlEJATHBCQRzgQI6M/0//8PtgUN8gQIhMB0DscEJCTOBAjoaPX/ #SECOND:/+sMxwQkRc4ECOha9f//D7YFT/QECITAdBwPtgVP9AQID77AiUQkBMcEJGDO #SECOND:BAjohfT//+sMxwQkks4ECOgn9f//D7YFUvQECITAdA7HBCSszgQI6BD1///r #SECOND:DMcEJMzOBAjoAvX//8cEJAoAAADotvL//8nDVYnlg+w4x0X0AAAAAMdF/AAA #SECOND:AACDfQgBdQzHRewAAAAA6VUEAACNRfSJRCQQx0QkDCDyBAjHRCQI8M4ECItF #SECOND:DIlEJASLRQiJBCToJfP//4lF+IN9+P8PhBkEAACDRfwBi0X4g+hDiUXog33o #SECOND:Mw+H6gMAAItV6IsElQDWBAj/4MYFTvQECAHrnqEE9AQIx0QkCBAAAADHRCQE #SECOND:AAAAAIkEJOiP8v//oyT0BAjpd////6EE9AQIx0QkCBAAAADHRCQEAAAAAIkE #SECOND:JOho8v//oyj0BAjpUP///6EE9AQIx0QkCBAAAADHRCQEAAAAAIkEJOhB8v// #SECOND:oyz0BAjpKf///6EE9AQIx0QkCBAAAADHRCQEAAAAAIkEJOga8v//ozD0BAjp #SECOND:Av///6EE9AQIx0QkCBAAAADHRCQEAAAAAIkEJOjz8f//ozT0BAjp2/7//6EE #SECOND:9AQIx0QkCBAAAADHRCQEAAAAAIkEJOjM8f//ozj0BAjptP7//6EE9AQIiUQk #SECOND:BMcEJKD5BAjojfL//+ma/v//xgVR9AQIAemO/v//oQT0BAjHRCQIEAAAAMdE #SECOND:JAQAAAAAiQQk6H/x//+jPPQECOln/v//xgVI9AQIAelb/v//xgVJ9AQIAelP #SECOND:/v//xgVK9AQIAelD/v//xgVL9AQIAek3/v//xgVM9AQIAekr/v//oQT0BAiJ #SECOND:BCToUPT//+kZ/v//xgVN9AQIAcYFDPIECAGDbfwB6QL+///GBQzyBAgAxgVN #SECOND:9AQIAINt/AHp6/3//8YFUvQECAGDbfwB6dv9//+hBPQECMdEJAgQAAAAx0Qk #SECOND:BAAAAACJBCTozPD//6JP9AQIg238Aemw/f//xgUN8gQIAOmk/f//oQT0BAjH #SECOND:RCQIEAAAAMdEJAQAAAAAiQQk6JXw//+jVPQECOl9/f//oQT0BAjHRCQIEAAA #SECOND:AMdEJAQAAAAAiQQk6G7w//+jEPIECOlW/f//oQT0BAjHRCQIEAAAAMdEJAQA #SECOND:AAAAiQQk6Efw//+jFPIECOkv/f//6HcrAADHBCQAAAAA6Fzy///oZisAAMcE #SECOND:JBjPBAjo2/H//8cEJEzPBAjoz/H//8cEJHjPBAjow/H//8cEJLjPBAjot/H/ #SECOND:/8cEJPzPBAjoq/H//8cEJEDQBAjon/H//8cEJIzQBAjok/H//8cEJNjQBAjo #SECOND:h/H//8cEJAzRBAjoe/H//8cEJFTRBAjob/H//8cEJJzRBAjoY/H//8cEJOTR #SECOND:BAjoV/H//8cEJCzSBAjoS/H//8cEJGzSBAjoP/H//8cEJKjSBAjoM/H//8cE #SECOND:JOTSBAjoJ/H//8cEJCDTBAjoG/H//8cEJFzTBAjoD/H//8cEJJjTBAjoA/H/ #SECOND:/8cEJNTTBAjo9/D//8cEJBzUBAjo6/D//8cEJGDUBAjo3/D//8cEJKTUBAjo #SECOND:0/D//8cEJOzUBAjox/D//8cEJDTVBAjou/D//8cEJHzVBAjor/D//8cEJLTV #SECOND:BAjoo/D//8cEJAAAAADoB/H//8cEJAoAAADoS+7//8cEJAEAAADo7/D//4tF #SECOND:/IlF7ItF7MnDjUwkBIPk8P9x/FWJ5VGD7DTHRfAAAAAAx0X0AAAAAMdF+AAA #SECOND:AACLQQSJRCQEiwGJBCToSfv//4XAdQ7HBCTQ1gQI6JHx///rIg+2BVD0BAiE #SECOND:wHUXD7YFTfQECITAdAzHBCTs1gQI6Anw//8PtgVN9AQIhMB0Beh4KQAAD7YF #SECOND:TfQECITAdAXoI/j//+gU7///D7YFTfQECITAdAzHBCQPAAAA6H3u///omO3/ #SECOND:/+hT7v//oST0BAiFwHQJoSj0BAiFwHUjD7YFDPIECITAdAzHBCQc1wQI6Jrv #SECOND:///HBCQBAAAA6P7v//+4oPkECA+2AITAD4SYAAAAxwQkoPkECOhy7v//g+AB #SECOND:hMB0MaHg8wQIiUQkDMdEJAg/AAAAx0QkBAEAAADHBCRM1wQI6Lbu///HBCQB #SECOND:AAAA6Krv///HBCSg+QQI6C7u///R6IlEJAjHRCQEQP4ECMcEJKD5BAjoMSgA #SECOND:AIP4/3UpoeDzBAjHRCQIoPkECMdEJASM1wQIiQQk6HLu///HBCQBAAAA6Fbv #SECOND://8PtgUM8gQIhMB0DMcEJAoAAADoj+z//w+2BQzyBAiEwHQ+D7YFT/QECITA #SECOND:dDOhLPQECIXAdSqhMPQECIXAdSG4YBAFCA+2AITAdRWhNPQECIXAdQzHBCTI #SECOND:1wQI6Ibu//+hLPQECIXAdQ2hNPQECIXAD4SKAAAAD7YFDPIECITAdAzHBCQA #SECOND:2AQI6Fnu//+hNPQECIsVMPQECIsNLPQECIlEJBDHRCQMYBAFCIlUJAiJTCQE #SECOND:xwQkRPQECOgtHgAAoUT0BAiFwHQiD7YFDPIECITAdC6hRPQECIlEJATHBCQg #SECOND:2AQI6E/t///rFw+2BQzyBAiEwHQMxwQkUNgECOjm7f//D7YFDPIECITAdAzH #SECOND:BCR82AQI6M/t//+hNPQECIsVKPQECIsNJPQECIlEJBDHRCQMnNgECIlUJAiJ #SECOND:TCQEjUXwiQQk6KQdAACjRBAFCItF8IXAdH4PtgUM8gQIhMB0E4tF8IlEJATH #SECOND:BCSe2AQI6MXs//+hNPQECIXAdFehLPQECIXAdU6hMPQECIXAdUWhRBAFCIXA #SECOND:dBkPtgUM8gQIhMB0MccEJLzYBAjoOu3//+sjD7YFDPIECITAdAzHBCTw2AQI #SECOND:6CHt///HBCQAAAAA6IXt//+hRBAFCIXAD4SaAAAAoUQQBQgPtoAsEAAAD7bA #SECOND:owTyBAihRBAFCIuADBAAAIPACMdEJAgKAAAAx0QkBAAAAACJBCToDuv//6MI #SECOND:8gQID7YFDPIECITAdB+hCPIECIsVBPIECIlEJAiJVCQExwQkKNkECOjv6/// #SECOND:oUQQBQiJBCTo4uz//6NAEAUIoUQQBQgPtoAUEAAAD7bAo0D0BAihQPQECIXA #SECOND:dCXrQQ+2BQzyBAiEwHQMxwQkUNkECOhX7P//xwQkAAAAAOi77P//oUQQBQiL #SECOND:gCQQAACLQAyLAA+2QAUPtsCjQPQECOtMoUQQBQiLgCQQAACLQAyLAA+2QAU8 #SECOND:CHU0oUD0BAiD+Ah0Kg+2BQzyBAiEwHQVoUD0BAiJRCQExwQkhNkECOg76/// #SECOND:xwVA9AQICAAAAKE49AQIhcB1b7ig+QQID7YAhMB1Cw+2BQ3yBAiEwHRYoUQQ #SECOND:BQiJBCTo2x8AAKM49AQIoTj0BAiFwHU9uKD5BAgPtgCEwHQxoeDzBAiJRCQM #SECOND:x0QkCDcAAADHRCQEAQAAAMcEJLDZBAjo5er//8cEJAEAAADo2ev//6E89AQI #SECOND:hcB1bQ+2BVH0BAiEwHULD7YFDfIECITAdFehRBAFCIkEJOjoHwAAozz0BAih #SECOND:PPQECIXAdTwPtgVR9AQIhMB0MaHg8wQIiUQkDMdEJAg4AAAAx0QkBAEAAADH #SECOND:BCTo2QQI6G/q///HBCQBAAAA6GPr//+hOPQECIXAdDWhPPQECIXAdCwPtgUM #SECOND:8gQIhMB0VKE89AQIixU49AQIiUQkCIlUJATHBCQk2gQI6Afq///rMw+2BQ3y #SECOND:BAiEwHQooUD0BAiD+Ah1Hg+2BQzyBAiEwHQMxwQkVNoECOiJ6v//xgUN8gQI #SECOND:AA+2BQ3yBAiEwHRaD7YFDPIECITAdE+hQPQECIP4CHUuD7YFDPIECITAdAzH #SECOND:BCSA2gQI6Evq///oIxMAAOizBgAAhcB4IMYFDfIECALrFw+2BQzyBAiEwHQM #SECOND:xwQkuNoECOgd6v//6N8DAAAPtgUM8gQIhMB0YMcEJOTaBAjoAer//8cEJA/b #SECOND:BAjo9en//8dEJAQA+QQIxwQkKdsECOgx6f//x0QkBGD4BAjHBCQ72wQI6B3p #SECOND:///HRCQEoP0ECMcEJE3bBAjoCen//8cEJA/bBAjoren//w+2BUj0BAgPvtAP #SECOND:tgVJ9AQID77AAcIPtgVK9AQID77AAcIPtgVL9AQID77AjQQCiUX0g330AX4j #SECOND:D7YFDPIECITAdAzHBCRg2wQI6F7p///HBCQBAAAA6MLp//+DffQAdSO4oPkE #SECOND:CA+2AITAdRcPtgUM8gQIhMB0DMcEJKDbBAjoKen//w+2BVL0BAiEwHRTx0Qk #SECOND:CCgAAADHRCQEAAAAAMcEJMTbBAjoYuf//6Eo9AQIixUk9AQIx0QkFGD4BAjH #SECOND:RCQQAPkECIlEJAyJVCQIx0QkBNPbBAjHBCQFAAAA6Evm//8PtgVI9AQIhMB0 #SECOND:Zg+2BQzyBAiEwHQMxwQk8NsECOip6P//D7YFDfIECDwCdRkPtgUM8gQIhMB0 #SECOND:OccEJCDcBAjoh+j//+sr6F0RAACj5PgECKHk+AQIg/gCdRcPtgUM8gQIhMB0 #SECOND:DMcEJFDcBAjoWuj//w+2BUn0BAiEwHQF6H0LAAAPtgVK9AQIhMB0BegaDAAA #SECOND:D7YFTPQECITAdAroBxEAAOiyDAAAD7YFS/QECITAdDEPtgVP9AQIhMB0Fw+2 #SECOND:BQzyBAiEwHQMxwQkhNwECOj45///xgVP9AQIAOi4DQAAiUX4uKD5BAgPtgCE #SECOND:wHQ9oTj0BAiFwHQ0g330AHUXD7YFDfIECDwCdAXomxAAAOjWBwAA6xcPtgUM #SECOND:8gQIhMB0DMcEJMDcBAjooOf//6EQ8gQIg/j/dAXocwkAAKEU8gQIg/j/dAXo #SECOND:9AkAAA+2BU70BAiEwHQF6JAGAAAPtgVP9AQIhMB0dsdEJATovgQIxwQkDwAA #SECOND:AOjj5P//6GcRAACFwHQ2D7YFUvQECITAdB+hMPQECIsVLPQECIlEJAiJVCQE #SECOND:xwQkAt0ECOhw5v//xwQkAAAAAOiE5///D7YFUvQECITAdAzHBCQQ3QQI6P3m #SECOND:///HBCQAAAAA6GHn//8PtgVL9AQIhMB0eoN9+AB0RA+2BVL0BAiEwHQgx0Qk #SECOND:BBjdBAjHBCQFAAAA6EHk///HBCQ63QQI6LXm//8PtgUM8gQIhMB0VccEJEDd #SECOND:BAjonub//+tHD7YFUvQECITAdAzHBCQQ3QQI6IXm//8PtgUM8gQIhMB0JccE #SECOND:JGjdBAjobub//+sXD7YFDPIECITAdAzHBCSY3QQI6FXm//8PtgVS9AQIhMB0 #SECOND:Behl5v//xwQkAAAAAOip5v//VYnlg+wox0QkCIEAAADHRCQEIAAAAMcEJAD5 #SECOND:BAjoJ+T//8dEJAiBAAAAx0QkBCAAAADHBCRg+AQI6Avk///HRCQIgQAAAMdE #SECOND:JAQgAAAAxwQkoP0ECOjv4///oUQQBQgPtoAeEAAAhMB0YaFEEAUID7aAHhAA #SECOND:AA+2wIsVQBAFCMdEJAyBAAAAx0QkCAD5BAiJRCQEiRQk6H7l//+JRfiDffgA #SECOND:eUOh4PMECIlEJAzHRCQINwAAAMdEJAQBAAAAxwQkwN0ECOjg5P//6xzHRCQI #SECOND:DQAAAMdEJAT43QQIxwQkAPkECOhC5P//x0QkBAXeBAjHBCQA+QQI6M7k//+J #SECOND:RfyDffwAdBvHRCQIAQAAAMdEJAQAAAAAi0X8iQQk6Crj//+hRBAFCA+2gB8Q #SECOND:AACEwHRhoUQQBQgPtoAfEAAAD7bAixVAEAUIx0QkDIEAAADHRCQIYPgECIlE #SECOND:JASJFCToueT//4lF+IN9+AB5Q6Hg8wQIiUQkDMdEJAgyAAAAx0QkBAEAAADH #SECOND:BCQM3gQI6Bvk///rHMdEJAgNAAAAx0QkBPjdBAjHBCRg+AQI6H3j///HRCQE #SECOND:Bd4ECMcEJGD4BAjoCeT//4lF/IN9/AB0G8dEJAgBAAAAx0QkBAAAAACLRfyJ #SECOND:BCToZeL//6FEEAUID7aAIBAAAITAdGGhRBAFCA+2gCAQAAAPtsCLFUAQBQjH #SECOND:RCQMgQAAAMdEJAig/QQIiUQkBIkUJOj04///iUX4g334AHlDoeDzBAiJRCQM #SECOND:x0QkCDgAAADHRCQEAQAAAMcEJEDeBAjoVuP//+scx0QkCA0AAADHRCQE+N0E #SECOND:CMcEJKD9BAjouOL//8dEJAQF3gQIxwQkoP0ECOhE4///iUX8g338AHQbx0Qk #SECOND:CAEAAADHRCQEAAAAAItF/IkEJOig4f//ycNVieWD7EjHBCQfAAAA6Bzj//+J #SECOND:RfSDffQAdQzHRfwBAAAA6TsCAADHRCQIHwAAAMdEJAR53gQIi0X0iQQk6Dzi #SECOND://+hVPQECIsVQBAFCIlEJASJFCToFeH//4lF/IN9/AB0Jw+2BQzyBAiEwA+E #SECOND:8QEAAItF/IlEJATHBCSY3gQI6Fri///p2QEAAKE49AQIixVAEAUIiUQkBIkU #SECOND:JOie4v//ixU49AQIiw1AEAUIx0QkEAAAAADHRCQMHwAAAItF9IlEJAiJVCQE #SECOND:iQwk6J/h//+JRfyDffwAeScPtgUM8gQIhMAPhHsBAACLRfyJRCQExwQk2N4E #SECOND:COjk4f//6WMBAACLFTz0BAiLDUAQBQjHRCQQAAAAAMdEJAwkAAAAjUXQiUQk #SECOND:CIlUJASJDCTokOL//4lF/IN9/AB5Jw+2BQzyBAiEwA+EHAEAAItF/IlEJATH #SECOND:BCQE3wQI6IXh///pBAEAAIsVPPQECIsNQBAFCMdEJBAAAAAAx0QkDA0AAACL #SECOND:RfSJRCQIiVQkBIkMJOgx4v//iUX4xwQkMN8ECOjy4f//xwQkD9sECOjm4f// #SECOND:xwQkWN8ECOgq4f//x0X4CAAAAOsXi0X4D7ZEBdAPvsCJBCToft///4NF+AGD #SECOND:ffgPfuPHBCQKAAAA6Gjf///HBCRq3wQI6Ozg///HRfgQAAAA6xeLRfgPtkQF #SECOND:0A++wIkEJOhA3///g0X4AYN9+B9+48cEJAoAAADoKt///8cEJHzfBAjoruD/ #SECOND:/8dF+CAAAADrF4tF+A+2RAXQD77AiQQk6ALf//+DRfgBg334I37jxwQkjt8E #SECOND:COgs4f//uKD5BAgPtgCEwHUXoTj0BAiLFUAQBQiJRCQEiRQk6Lng//+hVPQE #SECOND:CIsVQBAFCIlEJASJFCToUt7//4tF9IkEJOg33///i0X8ycNVieVTg+wkx0X4 #SECOND:AAAAAA+2BQzyBAiEwHQZxwQkqd8ECOgN4P//oQD0BAiJBCToIN///8cEJAEA #SECOND:AADolOD//6FAEAUIiQQk6Afe//+JRfSLTfjHReRnZmZmi0Xk9+nB+gKJyMH4 #SECOND:H4nTKcOJXeiLRejB4AIDRegBwInKKcKJVeiDfegAdSQPtgUM8gQIhMB0GccE #SECOND:JC4AAADoB97//6EA9AQIiQQk6Kre//+DRfgBg334ZH4Hx0X0AQAAAIN99AAP #SECOND:iHv///+DffQAdBkPtgUM8gQIhMB0JccEJMDfBAjoAuD//+sXD7YFDPIECITA #SECOND:dAzHBCT23wQI6Onf//+DxCRbXcNVieWD7CgPtgUM8gQIhMB0FaFU9AQIiUQk #SECOND:BMcEJBDgBAjoDd///w+2BQ3yBAg8AnRKoVT0BAiLFUAQBQiJRCQEiRQk6Hvd #SECOND://+JRfyDffwAdCoPtgUM8gQIhMB0E4tF/IlEJATHBCRA4AQI6MTe///HRewA #SECOND:AAAA6UUBAAChOPQECIsVQBAFCIlEJASJFCToAd///w+2BQzyBAiEwHQVoTj0 #SECOND:BAiJRCQExwQkhOAECOiB3v//oQD0BAiJBCTolN3//8cEJKD5BAjoGN7//9Ho #SECOND:iUX4ixU49AQIi0X4iUQkCMdEJARA/gQIiRQk6EENAACJRfyDffztD4SRAAAA #SECOND:D7YFUfQECITAdD0PtgUM8gQIhMB0DMcEJLjgBAjox97//6E89AQIx0QkCAAC #SECOND:AADHRCQEQP4ECIkEJOiKDQAAiUX8g3387XRJoTj0BAiLFUAQBQiJRCQEiRQk #SECOND:6Dre//+JRfyDffwAdSmhVPQECIsVQBAFCIlEJASJFCToytv//4lF/IN9/AB1 #SECOND:CcdF7AEAAADrNQ+2BQzyBAiEwHQMxwQk4OAECOhB3v//oUAQBQiJBCTo1N7/ #SECOND:/8cFQBAFCAAAAADHRewCAAAAi0XsycNVieWD7CgPtgUM8gQIhMB0FaEQ8gQI #SECOND:iUQkBMcEJBDhBAjoSN3//6EQ8gQIixVAEAUIiUQkBIkUJOih3P//iUX8g338 #SECOND:AHUgD7YFDPIECITAdAzHBCQy4QQI6MHd///HRewBAAAA6yUPtgUM8gQIhMB0 #SECOND:E4tF/IlEJATHBCRM4QQI6Orc///HRewAAAAAi0XsycNVieWD7CgPtgUM8gQI #SECOND:hMB0FaEU8gQIiUQkBMcEJJDhBAjouNz//6FU9AQIixVAEAUIiUQkBIkUJOgx #SECOND:2///iUX8oRTyBAiLFUAQBQiJRCQEiRQk6Mfd//+JRfyhVPQECIsVQBAFCIlE #SECOND:JASJFCTofdr//4N9/AB0Jw+2BQzyBAiEwHQTi0X8iUQkBMcEJLDhBAjoSdz/ #SECOND:/8dF7AAAAADrHg+2BQzyBAiEwHQMxwQk8OEECOjZ3P//x0XsAQAAAItF7MnD #SECOND:VYnlg+w4D7YFDPIECITAdAzHBCQM4gQI6LDc//+hQBAFCMdEJBzoAwAAx0Qk #SECOND:GAAAAADHRCQUQAAFCMdEJBAAAAAAx0QkDAEAAADHRCQIAwAAAMdEJAQAAAAA #SECOND:iQQk6Kvb//+JRfyDffwAdCmLFeDzBAiLRfyJRCQIx0QkBDDiBAiJFCToxdv/ #SECOND:/8cEJAEAAADoqdz//w+2BQzyBAiEwHQMxwQkeOIECOgi3P//ycNVieWD7DgP #SECOND:tgUM8gQIhMB0DMcEJJziBAjoA9z//6FAEAUIx0QkHOgDAADHRCQYAAAAAMdE #SECOND:JBRAAAUIx0QkEAAAAADHRCQMAQAAAMdEJAgLAAAAx0QkBEAAAACJBCTo/tr/ #SECOND:/4lF/IN9/AB0KYsV4PMECItF/IlEJAjHRCQExOIECIkUJOgY2///xwQkAQAA #SECOND:AOj82///D7YFDPIECITAdAzHBCQM4wQI6HXb///Jw1WJ5YPsOKFU9AQIixVA #SECOND:EAUIiUQkBIkUJOg22f//iUX8g338AHQnD7YFDPIECITAD4QIAQAAi0X8iUQk #SECOND:BMcEJDDjBAjoe9r//+nwAAAAD7YFDPIECITAdAzHBCRw4wQI6A/b//+hVPQE #SECOND:CIsVQBAFCMdEJBzoAwAAx0QkGAEAAADHRCQUQAAFCIlEJBDHRCQMAAAAAMdE #SECOND:JAigAAAAx0QkBKEAAACJFCToCNr//4lF/A+2BQzyBAiEwHQMxwQklOMECOiu #SECOND:2v//oVT0BAiLFUAQBQjHRCQc6AMAAMdEJBgBAAAAx0QkFEAABQiJRCQQx0Qk #SECOND:DAAAAADHRCQI/gAAAMdEJAShAAAAiRQk6KfZ//+JRfwPtgUM8gQIhMB0DMcE #SECOND:JLjjBAjoTdr//6FU9AQIixVAEAUIiUQkBIkUJOiW1///ycNVieWD7DjoBgMA #SECOND:AA+2BU/0BAiEwHQTxwQk2OMECOgS2v//xgVP9AQIAA+2BQzyBAiEwHQMxwQk #SECOND:EOQECOj02f//oUAQBQjHRCQcZAAAAMdEJBgDAAAAx0QkFEAABQjHRCQQAAAA #SECOND:AMdEJAwCAAAAx0QkCBEAAADHRCQEwAAAAIkEJOjv2P//iUX8g338AHkpixXg #SECOND:8wQIi0X8iUQkCMdEJAQ05AQIiRQk6AnZ///HBCQBAAAA6O3Z//8PtgUM8gQI #SECOND:hMB0DMcEJHjkBAjoZtn//6FAEAUIiQQk6PnZ///HBQTyBAj/////xwUI8gQI #SECOND://///8dF+AAAAADHBUQQBQgAAAAA6YIAAACDffgFfj/o9Nb//+iv1///oTT0 #SECOND:BAiLFSj0BAiLDST0BAiJRCQQx0QkDAAAAACJVCQIiUwkBI1F9IkEJOj0CAAA #SECOND:o0QQBQihRBAFCIXAdUfHBCQBAAAA6MXY//8PtgUM8gQIhMB0GccEJCMAAADo #SECOND:ftb//6EA9AQIiQQk6CHX//+DRfgBoUQQBQiFwHUKg334HQ+Oa////w+2BQzy #SECOND:BAiEwHQTi0X4iUQkBMcEJLTkBAjozNf//6FEEAUIhcAPhIYAAAAPtgUM8gQI #SECOND:hMB0DMcEJMjkBAjoWNj//8cFQBAFCAAAAAChRBAFCIkEJOiR2P//o0AQBQih #SECOND:QBAFCIXAdTGh4PMECIlEJAzHRCQIJgAAAMdEJAQBAAAAxwQk6OQECOh+1/// #SECOND:x0XsAAAAAOnaAAAAxwQkAQAAAOjm1///D7YFDPIECITAdSXrLw+2BQzyBAiE #SECOND:wHQMxwQkEOUECOjS1///x0XsAAAAAOmeAAAAxwQkMOUECOi61///oUAQBQjH #SECOND:RCQcZAAAAMdEJBgDAAAAx0QkFEAABQjHRCQQAAAAAMdEJAwCAAAAx0QkCBEA #SECOND:AADHRCQEwAAAAIkEJOi11v//iUX8g338AHkmixXg8wQIi0X8iUQkCMdEJARY #SECOND:5QQIiRQk6M/W///HRewAAAAA6x4PtgUM8gQIhMB0DMcEJJPlBAjoL9f//8dF #SECOND:7AEAAACLRezJw1WJ5YPsKA+2BQzyBAiEwHQMxwQkreUECOgG1///oVT0BAiL #SECOND:FUAQBQjHRCQMABAAAMdEJAhAAAUIiUQkBIkUJOif1v//iUX8g338AHQjD7YF #SECOND:DPIECITAdAzHBCTM5QQI6L/W///HRewBAAAA6ccAAAAPtgUM8gQIhMB0FMdE #SECOND:JARAAAUIxwQkB+YECOjk1f//D7YFSPQECITAdC/HRCQEIeYECMcEJEAABQjo #SECOND:1db//4XAdBcPtgUM8gQIhMB0DMcEJDDmBAjoWtb//6FU9AQIixVAEAUIiUQk #SECOND:BIkUJOjD1v//iUX8g338AHUhD7YFDPIECITAdDzHRCQEQAAFCMcEJFTmBAjo #SECOND:a9X//+smD7YFDPIECITAdBuLRfyJRCQIx0QkBEAABQjHBCRw5gQI6EPV///H #SECOND:RewBAAAAi0XsycNVieWD7DjHRfQAAAAAx0X8AAAAAA+2BQzyBAiEwHQaD7YF #SECOND:T/QECA++wIlEJATHBCSw5gQI6P7U///HBCQBAAAA6JLV//+hQBAFCIXAD4QD #SECOND:AQAAx0X0AAAAAOniAAAAD7YFDPIECITAdAzHBCTw5gQI6HLV//+hVPQECIsV #SECOND:QBAFCIlEJASJFCToO9P//4lF+IN9+AB5WQ+2BQzyBAiEwHQMxwQkHOcECOg7 #SECOND:1f//D7YFT/QECA++wIPoATtF9HUXD7YFDPIECITAdAzHBCRQ5wQI6BLV//+h #SECOND:QBAFCIkEJOil1f//xwVAEAUIAAAAAOt+oVT0BAiLFUAQBQiJRCQEiRQk6ELS #SECOND://8PtgVP9AQID77Ag+gBO0X0dRkPtgUM8gQIhMB0GscEJJDnBAjoudT//+sM #SECOND:xwQkAQAAAOib1P//g0X0AQ+2BU/0BAgPvsA7RfQPjwv////rFw+2BQzyBAiE #SECOND:wHQMxwQk6OcECOh71P//oSz0BAiFwHQdoTD0BAiFwA+FzAEAALhgEAUID7YA #SECOND:hMAPhbwBAAChNPQECIXAD4TEAQAA6aoBAAAPtgUM8gQIhMB0DMcEJBjoBAjo #SECOND:LNT//+i30v//oTT0BAiLFTD0BAiLDSz0BAiJRCQQx0QkDGAQBQiJVCQIiUwk #SECOND:BI1F8IkEJOj8AwAAo0QQBQihRBAFCIXAD4QRAQAAi1XwoUT0BAg5wg+OAQEA #SECOND:AKFEEAUIiQQk6BjU//+jQBAFCOiF7f//oUAQBQiJBCToUdT//w+2BU30BAiE #SECOND:wA+EqwAAAKFEEAUIi4AMEAAAg8AIx0QkCAoAAADHRCQEAAAAAIkEJOi80f// #SECOND:icKhRBAFCA+2gCwQAAAPtsCJVCQIiUQkBMcEJDzoBAjop9L//8cEJGToBAjo #SECOND:S9P//8cEJA/bBAjoP9P//8dEJAQA+QQIxwQkKdsECOh70v//x0QkBGD4BAjH #SECOND:BCQ72wQI6GfS///HRCQEoP0ECMcEJE3bBAjoU9L//8cEJA/bBAjo99L//w+2 #SECOND:BQzyBAiEwHQMxwQkhOgECOjg0v//x0X8AgAAAOmOAAAAD7YFT/QECA++wIPo #SECOND:ATtF9HUZD7YFDPIECITAdBrHBCTA6AQI6KvS///rDMcEJAEAAADojdL//4NF #SECOND:9AEPtgVP9AQID77AO0X0D49D/v//6z6hQBAFCIXAdTUPtgUM8gQIhMB0DMcE #SECOND:JBDpBAjoZNL//w+2BQzyBAiEwHQMxwQkTOkECOhN0v//x0X8AQAAAItF/IlF #SECOND:7IN97AF0UYN97AJ1ag+2BVL0BAiEwHQ3oTD0BAiLFSz0BAjHRCQUYPgECMdE #SECOND:JBAA+QQIiUQkDIlUJAjHRCQEoOkECMcEJAUAAADocs///8dF/AEAAADrHw+2 #SECOND:BVL0BAiEwHQUx0QkBL/pBAjHBCQFAAAA6ErP//8PtgVS9AQIhMB0Beja0f// #SECOND:i0X8ycNVieWD7CiLFUAQBQjHRCQQZAAAAItFEIlEJAyLRQyJRCQIi0UIiUQk #SECOND:BIkUJOhk0P//iUX8g338AHgZD7YFDPIECITAdEvHBCTg6QQI6GTR///rPYN9 #SECOND:/O11GQ+2BQzyBAiEwHQsxwQkAOoECOhF0f//6x4PtgUM8gQIhMB0E4tF/IlE #SECOND:JATHBCQ86gQI6HXQ//+LRfzJw1WJ5YPsKIsVQBAFCMdEJBBkAAAAi0UQiUQk #SECOND:DItFDIlEJAiLRQiJRCQEiRQk6B/R//+JRfyLFUAQBQjHRCQQZAAAAMdEJAwN #SECOND:AAAAi0UMiUQkCItFCIlEJASJFCTo8ND//4N9/AB4IA+2BQzyBAiEwHRSi0X8 #SECOND:iUQkBMcEJHjqBAjo7M///+s9g3387XUZD7YFDPIECITAdCzHBCSo6gQI6H3Q #SECOND:///rHg+2BQzyBAiEwHQTi0X8iUQkBMcEJNzqBAjorc///4tF/MnDVYnlg+wI #SECOND:D7YFDPIECITAdAzHBCQY6wQI6DvQ//+hVPQECIsVQBAFCIlEJASJFCTohM3/ #SECOND:/6FAEAUIiQQk6LfQ//8PtgVS9AQIhMB0Begn0P//xwQkAAAAAOhr0P//VYnl #SECOND:g+w4x0X4AAAAAIN9GAB0HIN9DAB1FoN9EAB1EKEk9AQIiUUMoSj0BAiJRRCL #SECOND:RQjHAAAAAACDfQwAdAyDfRAAdRKDfRQAdQzHRdwAAAAA6ccDAACDfRQAdBmL #SECOND:RRSJBCTolM7//4PAAYkEJOgpz///iUXs6FHO//+JRejpegMAAItF6IuADBAA #SECOND:AIlF/OlHAwAAD7YFTfQECITAdC6LRfwPt4AaEAAAD7fQi0X8D7eAGBAAAA+3 #SECOND:wIlUJAiJRCQExwQkPOsECOh/zv//i0X8D7eAGBAAAA+3wDtFDA+F8AIAAA+2 #SECOND:BU30BAiEwHQMxwQkaesECOgCz///i0UUD7YAhMAPhKYBAACLRRSJRCQEi0Xs #SECOND:iQQk6ALO///HRCQEhesECItF7IkEJOifzv//iUXw6WoBAACLRfCJBCTovM3/ #SECOND:/4P4BHQnD7YFDPIECITAD4Q0AQAAi0XwiUQkBMcEJIjrBAjo5c3//+kcAQAA #SECOND:i0XwiQQk6IXN///R6IlEJAiNReaJRCQEi0XwiQQk6IoHAACD+P91Jw+2BQzy #SECOND:BAiEwA+E5QAAAItF8IlEJATHBCTI6wQI6JbN///pzQAAAMdFEAAAAAAPtkXm #SECOND:D7bAAUUQwWUQCA+2RecPtsABRRCLRfwPt4AaEAAAD7fAO0UQD4WYAAAAD7YF #SECOND:TfQECITAdAzHBCQM7AQI6PXN//+LRQiLAI1QAYtFCIkQoQjyBAiD+P91CItF #SECOND:/IlF+Otii0X8D7aALBAAAA+20KEE8gQIOcJ8TItF/IuADBAAAIPACMdEJAgK #SECOND:AAAAx0QkBAAAAACJBCTo3Mv//4nCoQjyBAg5wnUdi0X8iUX4i0X8D7eAGhAA #SECOND:AA+3wKMw9AQI6TsBAADHRCQEhesECMcEJAAAAADoMM3//4lF8IN98AAPhYz+ #SECOND:///pFQEAAItF/A+3gBoQAAAPt8A7RRAPhf8AAAAPtgVN9AQIhMB0DMcEJDPs #SECOND:BAjoIc3//4tFCIsAjVABi0UIiRCLRfwPtoAUEAAAD7bAiUX0g330AHUai0X8 #SECOND:i4AkEAAAi0AMiwAPtkAFD7bAiUX06zKLRfyLgCQQAACLQAyLAA+2QAUPtsA7 #SECOND:RfR0GItF/IuAJBAAAItADIsAD7ZABQ+2wIlF9KEI8gQIg/j/dRaLRfQ7RRh1 #SECOND:BoN9GAB1YYtF/IlF+OtZi0X0O0UYdAaDfRgAdUuLRfwPtoAsEAAAD7bQoQTy #SECOND:BAg5wnw1i0X8i4AMEAAAg8AIx0QkCAoAAADHRCQEAAAAAIkEJOiKyv//icKh #SECOND:CPIECDnCdQaLRfyJRfiDffgAdAqhCPIECIP4/3USi0X8iwCJRfyDffwAD4Wv #SECOND:/P//g334AHQKoQjyBAiD+P91EotF6IsAiUXog33oAA+FfPz//4N9FAB0C4tF #SECOND:7IkEJOg0yv//i0X4iUXci0XcycNVieWD7BSLRQiLgCQQAACLQAyLAIlF+MdF #SECOND:9AAAAADrSYtF+ItIDItV9InQweACAdDB4AKNBAGJRfyLRfwPtkADD7bAg+AD #SECOND:g/gCdRqLRfwPtkAChMB4D4tF/A+2QAIPtsCJRezrGoNF9AGLRfgPtkAED7bA #SECOND:O0X0f6jHRewAAAAAi0XsycNVieWD7BSLRQiLgCQQAACLQAyLAIlF+MdF9AAA #SECOND:AADrSYtF+ItIDItV9InQweACAdDB4AKNBAGJRfyLRfwPtkADD7bAg+ADg/gC #SECOND:dRqLRfwPtkAChMB5D4tF/A+2QAIPtsCJRezrGoNF9AGLRfgPtkAED7bAO0X0 #SECOND:f6jHRewAAAAAi0XsycNVieVTg+xUx0XUAAAAAMdF2AAAAADHRewAAAAAx0Xw #SECOND:AAAAAMdF9AAAAADHRCQEUOwECItFCIkEJOikyf//iUX4g334AA+FnwIAAIsV #SECOND:4PMECItFCIlEJAjHRCQEVOwECIkUJOjqyf//xwQkAQAAAOjOyv//g0XsAccE #SECOND:JGD0BAjoTsn//4lF8IN98AAPhFkCAACLRfCD6AEPtoBg9AQIPAp0EYtF8IPo #SECOND:AQ+2gGD0BAg8DXUOg23wAYtF8MaAYPQECADHRCQEPQAAAMcEJGD0BAjorcf/ #SECOND:/4lF2MdEJAR07AQIxwQkYPQECOgmyv//iUX0i0X0O0XwdA2LRfQFYPQECIlF #SECOND:xOsHx0XEAAAAAItFxIlF1IN92AAPhM8BAACDfdQAdAyLRdQ7RdgPhr0BAACL #SECOND:RdjGAACDRdgBg33UAHQGi0XUxgAAx0QkBCIAAACLRdiJBCToLMf//4lF3MdE #SECOND:JAQiAAAAi0XYiQQk6JbH//+JReCDfdwAdEiDfeAAdSih4PMECItV7IlUJAyL #SECOND:VQiJVCQIx0QkBHjsBAiJBCTotMj//+lHAQAAi0XgxgAAi0XgD7YQi0XciBCL #SECOND:RdyDwAGJRdjHRCQEtuwECMcEJGD0BAjoEcn//4lF9Itd9McEJGD0BAjo78f/ #SECOND:/znDdUKh4PMECItV7IlUJAyLVQiJVCQIx0QkBLzsBAiJBCToSMj//+nbAAAA #SECOND:g33kAHQIi0XkxgAA6wyDfegAdAaLRejGAADHRCQEIAAAAMcEJGD0BAjoxcb/ #SECOND:/4lF5IN95AB1ycdEJAQJAAAAxwQkYPQECOioxv//iUXog33oAHWsi0X0BWD0 #SECOND:BAiJRdDHRCQEtuwECItF2IkEJOhhyP//iUX0i130i0XYiQQk6EDH//85w3Ul #SECOND:oeDzBAiLVeyJVCQMi1UIiVQkCMdEJAQA7QQIiQQk6JnH///rL4tF9AFF2ItF #SECOND:DIlEJASLRdCJBCToX8j//4XAdROLRfiJBCTokMb//4tF2IlFyOs1i0X4iUQk #SECOND:CMdEJAT/AwAAxwQkYPQECOjNxf//hcAPhWf9//+LRfiJBCToWsb//8dFyAAA #SECOND:AACLRciDxFRbXcNVieWD7AiLRQiIRfyAffwvfhKAffw5fwwPvkX8g+gwiUX4 #SECOND:6zeAffxgfhKAffxmfwwPvkX8g+hXiUX46x+AffxAfhKAffxGfwwPvkX8g+g3 #SECOND:iUX46wfHRfj/////i0X4ycNVieWD7BiLRQgPtgAPvsCDRQgBiQQk6IX///+J #SECOND:RfiDffgAeQnHRez/////6zWLRQgPtgAPvsCDRQgBiQQk6F7///+JRfyDffwA #SECOND:eQnHRez/////6w6LRfjB4ASLVfwJwolV7ItF7MnDVYnlg+wYi0UIiUX4i0UM #SECOND:iUX8x0XwAAAAAOszi0X4iQQk6HP///+JRfSDffQAeQnHRez/////6yWLRfSJ #SECOND:wotF/IgQg0X8AYNF+AKDRfABi0XwO0UQfMXHRewAAAAAi0XsycNVieWD7AjH #SECOND:BCQ87QQI6G/G//+hAPIECIlEJATHBCR47QQI6KrF///HBCSd7QQI6E7G///H #SECOND:BCS47QQI6ELG///Jw1WJ5V3DjXQmAI28JwAAAABVieVXVlPoTwAAAIHD1ScA #SECOND:AIPsDOg3w///jbsQ////jYMQ////KcfB/wKF/3QkMfaLRRCJRCQIi0UMiUQk #SECOND:BItFCIkEJP+UsxD///+DxgE5/nLeg8QMW15fXcOLHCTDkJBVieVTg+wEoQDw #SECOND:BAiD+P90E7sA8AQIZpCD6wT/0IsDg/j/dfSDxARbXcOQkFWJ5VOD7AToAAAA #SECOND:AFuBw0gnAADobMb//1lbycMDAAAAAQACADEuMS4wAGhlbHAAdmVyc2lvbgBk #SECOND:ZWZhdWx0LXZlbmRvcgBkZWZhdWx0LXByb2R1Y3QAdGFyZ2V0LXZlbmRvcgB0 #SECOND:YXJnZXQtcHJvZHVjdAB0YXJnZXQtY2xhc3MAbWVzc2FnZS1lbmRwb2ludABt #SECOND:ZXNzYWdlLWNvbnRlbnQAcmVzcG9uc2UtZW5kcG9pbnQAZGV0YWNoLW9ubHkA #SECOND:aHVhd2VpLW1vZGUAc2llcnJhLW1vZGUAc29ueS1tb2RlAGdjdC1tb2RlAG5l #SECOND:ZWQtcmVzcG9uc2UAcmVzZXQtdXNiAGNvbmZpZwB2ZXJib3NlAHF1aWV0AHN5 #SECOND:c21vZGUAbm8taW5xdWlyZQBjaGVjay1zdWNjZXNzAGludGVyZmFjZQBjb25m #SECOND:aWd1cmF0aW9uAGFsdHNldHRpbmcAUmVhZGluZyBjb25maWcgZmlsZTogJXMK #SECOND:AFRhcmdldFZlbmRvcgBUYXJnZXRQcm9kdWN0AFRhcmdldFByb2R1Y3RMaXN0 #SECOND:AFRhcmdldENsYXNzAERlZmF1bHRWZW5kb3IARGVmYXVsdFByb2R1Y3QARGV0 #SECOND:YWNoU3RvcmFnZU9ubHkASHVhd2VpTW9kZQBTaWVycmFNb2RlAFNvbnlNb2Rl #SECOND:AEdDVE1vZGUATWVzc2FnZUVuZHBvaW50AE1lc3NhZ2VDb250ZW50AE5lZWRS #SECOND:ZXNwb25zZQBSZXNwb25zZUVuZHBvaW50AFJlc2V0VVNCAElucXVpcmVEZXZp #SECOND:Y2UAQ2hlY2tTdWNjZXNzAEludGVyZmFjZQBDb25maWd1cmF0aW9uAEFsdFNl #SECOND:dHRpbmcARGVmYXVsdFZlbmRvcj0gIDB4JTA0eAoARGVmYXVsdFByb2R1Y3Q9 #SECOND:IDB4JTA0eAoAVGFyZ2V0VmVuZG9yPSAgIDB4JTA0eAoAVGFyZ2V0VmVuZG9y #SECOND:PSAgIG5vdCBzZXQAVGFyZ2V0UHJvZHVjdD0gIDB4JTA0eAoAVGFyZ2V0UHJv #SECOND:ZHVjdD0gIG5vdCBzZXQAVGFyZ2V0UHJvZHVjdExpc3Q9JXMKAFRhcmdldENs #SECOND:YXNzPSAgICAweCUwMngKAFRhcmdldENsYXNzPSAgICBub3Qgc2V0AApEZXRh #SECOND:Y2hTdG9yYWdlT25seT0laQoASHVhd2VpTW9kZT0laQoAU2llcnJhTW9kZT0l #SECOND:aQoAU29ueU1vZGU9JWkKAEdDVE1vZGU9JWkKAE1lc3NhZ2VFbmRwb2ludD0w #SECOND:eCUwMngKAE1lc3NhZ2VFbmRwb2ludD0gbm90IHNldABNZXNzYWdlQ29udGVu #SECOND:dD0iJXMiCgBNZXNzYWdlQ29udGVudD0gbm90IHNldABOZWVkUmVzcG9uc2U9 #SECOND:JWkKAFJlc3BvbnNlRW5kcG9pbnQ9MHglMDJ4CgBSZXNwb25zZUVuZHBvaW50 #SECOND:PSBub3Qgc2V0AEludGVyZmFjZT0weCUwMngKAENvbmZpZ3VyYXRpb249MHgl #SECOND:MDJ4CgBBbHRTZXR0aW5nPTB4JTAyeAoACklucXVpcmVEZXZpY2UgZW5hYmxl #SECOND:ZCAoZGVmYXVsdCkACklucXVpcmVEZXZpY2UgZGlzYWJsZWQAAAAAU3VjY2Vz #SECOND:cyBjaGVjayBlbmFibGVkLCBtYXguIHdhaXQgdGltZSAlZCBzZWNvbmRzCgBT #SECOND:dWNjZXNzIGNoZWNrIGRpc2FibGVkAAAAAFN5c3RlbSBpbnRlZ3JhdGlvbiBt #SECOND:b2RlIGVuYWJsZWQAU3lzdGVtIGludGVncmF0aW9uIG1vZGUgZGlzYWJsZWQA #SECOND:AAAAaGVXUURuZEhTT0dSSXY6cDpWOlA6QzptOk06cjpjOmk6dTphOnM6AFVz #SECOND:YWdlOiB1c2ItbW9kZXN3aXRjaCBbLWh2cFZQbU1yZEhuXSBbLWMgZmlsZW5h #SECOND:bWVdCgAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgICAgdGhpcyBoZWxw #SECOND:AAAAACAtZSwgLS12ZXJzaW9uICAgICAgICAgICAgICAgICBwcmludCB2ZXJz #SECOND:aW9uIG51bWJlciBhbmQgZXhpdAAAAAAgLXYsIC0tZGVmYXVsdC12ZW5kb3Ig #SECOND:TlVNICAgICAgdmVuZG9yIElEIHRvIGxvb2sgZm9yIChtYW5kYXRvcnkpAAAA #SECOND:ACAtcCwgLS1kZWZhdWx0LXByb2R1Y3QgTlVNICAgICBwcm9kdWN0IElEIHRv #SECOND:IGxvb2sgZm9yIChtYW5kYXRvcnkpAAAAIC1WLCAtLXRhcmdldC12ZW5kb3Ig #SECOND:TlVNICAgICAgIHRhcmdldCB2ZW5kb3IgKG9wdGlvbmFsLCBmb3Igc3VjY2Vz #SECOND:cyBjaGVjaykAACAtUCwgLS10YXJnZXQtcHJvZHVjdCBOVU0gICAgICB0YXJn #SECOND:ZXQgbW9kZWwgKG9wdGlvbmFsLCBmb3Igc3VjY2VzcyBjaGVjaykAAAAgLUMs #SECOND:IC0tdGFyZ2V0LWNsYXNzIE5VTSAgICAgICAgdGFyZ2V0IGRldmljZSBjbGFz #SECOND:cwAAIC1tLCAtLW1lc3NhZ2UtZW5kcG9pbnQgTlVNICAgIHdoZXJlIHRvIGRp #SECOND:cmVjdCB0aGUgbWVzc2FnZSAob3B0aW9uYWwpAAAAIC1NLCAtLW1lc3NhZ2Ut #SECOND:Y29udGVudCA8bXNnPiAgIGNvbW1hbmQgdG8gc2VuZCAoaGV4IG51bWJlciBh #SECOND:cyBzdHJpbmcpAAAAIC1uLCAtLW5lZWQtcmVzcG9uc2UgICAgICAgICAgIHJl #SECOND:YWQgYSByZXNwb25zZSB0byB0aGUgbWVzc2FnZSB0cmFuc2ZlcgAAIC1yLCAt #SECOND:LXJlc3BvbnNlLWVuZHBvaW50IE5VTSAgIHdoZXJlIGZyb20gcmVhZCB0aGUg #SECOND:cmVzcG9uc2UgKG9wdGlvbmFsKQAAIC1kLCAtLWRldGFjaC1vbmx5ICAgICAg #SECOND:ICAgICAgIGp1c3QgZGV0YWNoIHRoZSBzdG9yYWdlIGRyaXZlcgAAACAtSCwg #SECOND:LS1odWF3ZWktbW9kZSAgICAgICAgICAgICBhcHBseSBhIHNwZWNpYWwgcHJv #SECOND:Y2VkdXJlAAAAACAtUywgLS1zaWVycmEtbW9kZSAgICAgICAgICAgICBhcHBs #SECOND:eSBhIHNwZWNpYWwgcHJvY2VkdXJlAAAAACAtTywgLS1zb255LW1vZGUgICAg #SECOND:ICAgICAgICAgICBhcHBseSBhIHNwZWNpYWwgcHJvY2VkdXJlAAAAACAtRywg #SECOND:LS1nY3QtbW9kZSAgICAgICAgICAgICAgICBhcHBseSBhIHNwZWNpYWwgcHJv #SECOND:Y2VkdXJlAAAAACAtUiwgLS1yZXNldC11c2IgICAgICAgICAgICAgICByZXNl #SECOND:dCB0aGUgZGV2aWNlIGluIHRoZSBlbmQAACAtYywgLS1jb25maWcgPGZpbGVu #SECOND:YW1lPiAgICAgICBsb2FkIGRpZmZlcmVudCBjb25maWcgZmlsZQAAACAtUSwg #SECOND:LS1xdWlldCAgICAgICAgICAgICAgICAgICBkb24ndCBzaG93IHByb2dyZXNz #SECOND:IG9yIGVycm9yIG1lc3NhZ2VzAAAAACAtVywgLS12ZXJib3NlICAgICAgICAg #SECOND:ICAgICAgICBwcmludCBhbGwgc2V0dGluZ3MgYmVmb3JlIHJ1bm5pbmcAAAAA #SECOND:IC1ELCAtLXN5c21vZGUgICAgICAgICAgICAgICAgIHNwZWNpZmljIHJlc3Vs #SECOND:dCBhbmQgc3lzbG9nIG1lc3NhZ2UAAAAgLXMsIC0tc3VjY2VzcyBOVU0gICAg #SECOND:ICAgICAgICAgY2hlY2sgc3dpdGNoaW5nIHJlc3VsdCBhZnRlciBOVU0gc2Vj #SECOND:cwAAAAAgLUksIC0tbm8taW5xdWlyZSAgICAgICAgICAgICAgZG8gbm90IGdl #SECOND:dCBkZXZpY2UgZGV0YWlscyAoZGVmYXVsdCBvbikKAAAgLWksIC0taW50ZXJm #SECOND:YWNlIE5VTSAgICAgICAgICAgc2VsZWN0IGluaXRpYWwgVVNCIGludGVyZmFj #SECOND:ZSAoZGVmYXVsdCAwKQAgLXUsIC0tY29uZmlndXJhdGlvbiBOVU0gICAgICAg #SECOND:c2VsZWN0IFVTQiBjb25maWd1cmF0aW9uACAtYSwgLS1hbHRzZXR0aW5nIE5V #SECOND:TSAgICAgICAgICBzZWxlY3QgYWx0ZXJuYXRpdmUgVVNCIGludGVyZmFjZSBz #SECOND:ZXR0aW5nCgAAAABwmwQIh5wECKmeBAipngQIO5wECBecBAjCnAQIqZ4ECKme #SECOND:BAipngQIvpsECKmeBAgvnAQISZsECHCcBAjLmgQII5wECKmeBAipngQIIpsE #SECOND:CFmcBAipngQIqZ4ECKmeBAipngQIqZ4ECKmeBAipngQIqZ4ECKmeBAgcnQQI #SECOND:qZ4ECEecBAgLnAQIQ50ECKmeBAipngQIVJ0ECM6cBAipngQIqZ4ECKmeBAiX #SECOND:mwQI2JsECKmeBAj7mgQIqZ4ECOSbBAiXnAQIqZ4ECPWcBAjUmgQIL2V0Yy91 #SECOND:c2ItbW9kZXN3aXRjaC5jb25mAAAAAFRha2luZyBhbGwgcGFyYW1ldGVycyBm #SECOND:cm9tIHRoZSBjb21tYW5kIGxpbmUKAAAAAE5vIGRlZmF1bHQgdmVuZG9yL3By #SECOND:b2R1Y3QgSUQgZ2l2ZW4uIEFib3J0aW5nLgoAAEVycm9yOiBNZXNzYWdlQ29u #SECOND:dGVudCBoZXggc3RyaW5nIGhhcyB1bmV2ZW4gbGVuZ3RoLiBBYm9ydGluZy4K #SECOND:CgBFcnJvcjogTWVzc2FnZUNvbnRlbnQgJXMKIGlzIG5vdCBhIGhleCBzdHJp #SECOND:bmcuIEFib3J0aW5nLgoKAABOb3RlOiB0YXJnZXQgcGFyYW1ldGVyIG1pc3Np #SECOND:bmc7IHN1Y2Nlc3MgY2hlY2sgbGltaXRlZAAAAExvb2tpbmcgZm9yIHRhcmdl #SECOND:dCBkZXZpY2VzIC4uLgAAIEZvdW5kIGRldmljZXMgaW4gdGFyZ2V0IG1vZGUg #SECOND:b3IgY2xhc3MgKCVkKQoAAAAAIE5vIGRldmljZXMgaW4gdGFyZ2V0IG1vZGUg #SECOND:b3IgY2xhc3MgZm91bmQAAABMb29raW5nIGZvciBkZWZhdWx0IGRldmljZXMg #SECOND:Li4uAAAAIEZvdW5kIGRlZmF1bHQgZGV2aWNlcyAoJWQpCgAAIEZvdW5kIGEg #SECOND:ZGVmYXVsdCBkZXZpY2UgTk9UIGluIHRhcmdldCBjbGFzcyBtb2RlAAAAACBB #SECOND:bGwgZGV2aWNlcyBpbiB0YXJnZXQgY2xhc3MgbW9kZS4gTm90aGluZyB0byBk #SECOND:by4gQnllLgoAQWNjZXNzaW5nIGRldmljZSAlMDNkIG9uIGJ1cyAlMDNkIC4u #SECOND:LgoAACBObyBkZWZhdWx0IGRldmljZSBmb3VuZC4gSXMgaXQgY29ubmVjdGVk #SECOND:PyBCeWUuCgAAAABBbWJpZ3VvdXMgQ2xhc3MvSW50ZXJmYWNlQ2xhc3M6IDB4 #SECOND:JTAyeC8weDA4AEVycm9yOiBtZXNzYWdlIGVuZHBvaW50IG5vdCBnaXZlbiBv #SECOND:ciBmb3VuZC4gQWJvcnRpbmcuCgoARXJyb3I6IHJlc3BvbnNlIGVuZHBvaW50 #SECOND:IG5vdCBnaXZlbiBvciBmb3VuZC4gQWJvcnRpbmcuCgoAAAAAVXNpbmcgZW5k #SECOND:cG9pbnRzIDB4JTAyeCAob3V0KSBhbmQgMHglMDJ4IChpbikKAAAARW5kcG9p #SECOND:bnRzIG5vdCBmb3VuZCwgc2tpcHBpbmcgU0NTSSBpbnF1aXJ5AABJbnF1aXJp #SECOND:bmcgZGV2aWNlIGRldGFpbHM7IGRyaXZlciB3aWxsIGJlIGRldGFjaGVkIC4u #SECOND:LgAAAE5vdCBhIHN0b3JhZ2UgZGV2aWNlLCBza2lwcGluZyBTQ1NJIGlucXVp #SECOND:cnkAClVTQiBkZXNjcmlwdGlvbiBkYXRhIChmb3IgaWRlbnRpZmljYXRpb24p #SECOND:AC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ATWFudWZhY3R1cmVyOiAlcwoA #SECOND:ICAgICBQcm9kdWN0OiAlcwoAICBTZXJpYWwgTm8uOiAlcwoAAEludmFsaWQg #SECOND:bW9kZSBjb21iaW5hdGlvbi4gQ2hlY2sgeW91ciBjb25maWd1cmF0aW9uLiBB #SECOND:Ym9ydGluZy4KAABXYXJuaW5nOiBubyBzd2l0Y2hpbmcgbWV0aG9kIGdpdmVu #SECOND:LgB1c2ItbW9kZXN3aXRjaABzd2l0Y2hpbmcgJTA0eDolMDR4ICglczogJXMp #SECOND:AE9ubHkgZGV0YWNoaW5nIHN0b3JhZ2UgZHJpdmVyIGZvciBzd2l0Y2hpbmcg #SECOND:Li4uACBBbnkgZHJpdmVyIHdhcyBhbHJlYWR5IGRldGFjaGVkIGZvciBpbnF1 #SECOND:aXJ5AAAAACBZb3UgbWF5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzdG9yYWdlIGRy #SECOND:aXZlciBtYW51YWxseQBOb3RlOiBpZ25vcmluZyBDaGVja1N1Y2Nlc3MuIFNl #SECOND:cGFyYXRlIGNoZWNrcyBmb3IgU29ueSBtb2RlAABXYXJuaW5nOiBpZ25vcmlu #SECOND:ZyBNZXNzYWdlQ29udGVudC4gQ2FuJ3QgY29tYmluZSB3aXRoIHNwZWNpYWwg #SECOND:bW9kZQBvazolMDR4OiUwNHgKAGZhaWw6AAAAc3dpdGNoZWQgUy5FLiBNRDQw #SECOND:MCB0byBtb2RlbSBtb2RlAG9rOgAAAC0+IGRldmljZSBzaG91bGQgYmUgc3Rh #SECOND:YmxlIG5vdy4gQnllLgoAAAAtPiBzd2l0Y2hpbmcgd2FzIHByb2JhYmx5IG5v #SECOND:dCBjb21wbGV0ZWQuIEJ5ZS4KAAAtPiBSdW4gbHN1c2IgdG8gbm90ZSBhbnkg #SECOND:Y2hhbmdlcy4gQnllLgoARXJyb3I6IGNvdWxkIG5vdCBnZXQgZGVzY3JpcHRp #SECOND:b24gc3RyaW5nICJtYW51ZmFjdHVyZXIiCgBub3QgcHJvdmlkZWQAICAgIAAA #SECOND:AEVycm9yOiBjb3VsZCBub3QgZ2V0IGRlc2NyaXB0aW9uIHN0cmluZyAicHJv #SECOND:ZHVjdCIKAABFcnJvcjogY291bGQgbm90IGdldCBkZXNjcmlwdGlvbiBzdHJp #SECOND:bmcgInNlcmlhbCBudW1iZXIiCgBVU0JDEjRWeCQAAACAAAYSAAAAJAAAAAAA #SECOND:AAAAAAAAIENvdWxkIG5vdCBjbGFpbSBpbnRlcmZhY2UgKGVycm9yICVkKS4g #SECOND:U2tpcHBpbmcgZGV2aWNlIGlucXVpcnkKACBDb3VsZCBub3Qgc2VuZCBJTlFV #SECOND:SVJZIG1lc3NhZ2UgKGVycm9yICVkKQoAIENvdWxkIG5vdCBnZXQgSU5RVUlS #SECOND:WSByZXNwb25zZSAoZXJyb3IgJWQpCgAKU0NTSSBpbnF1aXJ5IGRhdGEgKGZv #SECOND:ciBpZGVudGlmaWNhdGlvbikAICBWZW5kb3IgU3RyaW5nOiAAICAgTW9kZWwg #SECOND:U3RyaW5nOiAAUmV2aXNpb24gU3RyaW5nOiAACi0tLS0tLS0tLS0tLS0tLS0t #SECOND:LS0tLS0tLS0AUmVzZXR0aW5nIHVzYiBkZXZpY2UgAAAKIFJlc2V0IGZhaWxl #SECOND:ZC4gQ2FuIGJlIGlnbm9yZWQgaWYgZGV2aWNlIHN3aXRjaGVkIE9LLgAKIE9L #SECOND:LCBkZXZpY2Ugd2FzIHJlc2V0AAAAAFNldHRpbmcgdXAgY29tbXVuaWNhdGlv #SECOND:biB3aXRoIGludGVyZmFjZSAlZCAuLi4KACBDb3VsZCBub3QgY2xhaW0gaW50 #SECOND:ZXJmYWNlIChlcnJvciAlZCkuIFNraXBwaW5nIG1lc3NhZ2Ugc2VuZGluZwoA #SECOND:AAAAVHJ5aW5nIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8gZW5kcG9pbnQgMHgl #SECOND:MDJ4IC4uLgoAAFJlYWRpbmcgdGhlIHJlc3BvbnNlIHRvIHRoZSBtZXNzYWdl #SECOND:IC4uLgAgRGV2aWNlIGlzIGdvbmUsIHNraXBwaW5nIGFueSBmdXJ0aGVyIGNv #SECOND:bW1hbmRzAABDaGFuZ2luZyBjb25maWd1cmF0aW9uIHRvICVpIC4uLgoAIE9L #SECOND:LCBjb25maWd1cmF0aW9uIHNldAAAAAAgU2V0dGluZyB0aGUgY29uZmlndXJh #SECOND:dGlvbiByZXR1cm5lZCBlcnJvciAlZC4gVHJ5aW5nIHRvIGNvbnRpbnVlCgAA #SECOND:AENoYW5naW5nIHRvIGFsdCBzZXR0aW5nICVpIC4uLgoAIENoYW5naW5nIHRv #SECOND:IGFsdCBzZXR0aW5nIHJldHVybmVkIGVycm9yICVkLiBUcnlpbmcgdG8gY29u #SECOND:dGludWUKACBPSywgY2hhbmdlZCB0byBhbHQgc2V0dGluZwBTZW5kaW5nIEh1 #SECOND:YXdlaSBjb250cm9sIG1lc3NhZ2UgLi4uAABFcnJvcjogc2VuZGluZyBIdWF3 #SECOND:ZWkgY29udHJvbCBtZXNzYWdlIGZhaWxlZCAoZXJyb3IgJWQpLiBBYm9ydGlu #SECOND:Zy4KCgAAAAAgT0ssIEh1YXdlaSBjb250cm9sIG1lc3NhZ2Ugc2VudAAAAABU #SECOND:cnlpbmcgdG8gc2VuZCBTaWVycmEgY29udHJvbCBtZXNzYWdlAAAARXJyb3I6 #SECOND:IHNlbmRpbmcgU2llcnJhIGNvbnRyb2wgbWVzc2FnZSBmYWlsZWQgKGVycm9y #SECOND:ICVkKS4gQWJvcnRpbmcuCgoAAAAAIE9LLCBTaWVycmEgY29udHJvbCBtZXNz #SECOND:YWdlIHNlbnQAAAAAIENvdWxkIG5vdCBjbGFpbSBpbnRlcmZhY2UgKGVycm9y #SECOND:ICVkKS4gU2tpcHBpbmcgR0NUIHNlcXVlbmNlIAoAAFNlbmRpbmcgR0NUIGNv #SECOND:bnRyb2wgbWVzc2FnZSAxIC4uLgAAAFNlbmRpbmcgR0NUIGNvbnRyb2wgbWVz #SECOND:c2FnZSAyIC4uLgAAACBPSywgR0NUIGNvbnRyb2wgbWVzc2FnZXMgc2VudAAA #SECOND:Tm90ZTogQ2hlY2tTdWNjZXNzIHBvaW50bGVzcyB3aXRoIFNvbnkgbW9kZSwg #SECOND:ZGlzYWJsaW5nAABUcnlpbmcgdG8gc2VuZCBTb255IGNvbnRyb2wgbWVzc2Fn #SECOND:ZQBFcnJvcjogc2VuZGluZyBTb255IGNvbnRyb2wgbWVzc2FnZSBmYWlsZWQg #SECOND:KGVycm9yICVkKS4gQWJvcnRpbmcuCgoAACBPSywgY29udHJvbCBtZXNzYWdl #SECOND:IHNlbnQsIHdhaXRpbmcgZm9yIGRldmljZSB0byByZXR1cm4gLi4uAAogQWZ0 #SECOND:ZXIgJWQgc2Vjb25kczoAIGRldmljZSBjYW1lIGJhY2ssIHByb2NlZWRpbmcA #SECOND:AABFcnJvcjogY291bGQgbm90IGdldCBoYW5kbGUgb24gZGV2aWNlCgAAIGRl #SECOND:dmljZSBzdGlsbCBnb25lLCBjYW5jZWxsaW5nAABTZW5kaW5nIFNvbnkgY29u #SECOND:dHJvbCBtZXNzYWdlIGFnYWluIC4uLgAARXJyb3I6IHNlbmRpbmcgU29ueSBj #SECOND:b250cm9sIG1lc3NhZ2UgKDIpIGZhaWxlZCAoZXJyb3IgJWQpCgAgT0ssIGNv #SECOND:bnRyb2wgbWVzc2FnZSBzZW50AExvb2tpbmcgZm9yIGFjdGl2ZSBkcml2ZXIg #SECOND:Li4uAAAgTm8gZHJpdmVyIGZvdW5kLiBFaXRoZXIgZGV0YWNoZWQgYmVmb3Jl #SECOND:IG9yIG5ldmVyIGF0dGFjaGVkACBPSywgZHJpdmVyIGZvdW5kICgiJXMiKQoA #SECOND:dXNiLXN0b3JhZ2UAAAAAIFdhcm5pbmc6IGRyaXZlciBpcyBub3QgdXNiLXN0 #SECOND:b3JhZ2UAIE9LLCBkcml2ZXIgIiVzIiBkZXRhY2hlZAoAACBEcml2ZXIgIiVz #SECOND:IiBkZXRhY2ggZmFpbGVkIHdpdGggZXJyb3IgJWQuIFRyeWluZyB0byBjb250 #SECOND:aW51ZQoAAAAKQ2hlY2tpbmcgZm9yIG1vZGUgc3dpdGNoIChtYXguICVkIHRp #SECOND:bWVzLCBvbmNlIHBlciBzZWNvbmQpIC4uLgoAIFdhaXRpbmcgZm9yIG9yaWdp #SECOND:bmFsIGRldmljZSB0byB2YW5pc2ggLi4uAAAgT3JpZ2luYWwgZGV2aWNlIGNh #SECOND:bid0IGJlIGFjY2Vzc2VkIGFueW1vcmUuIEdvb2QuAAAAIElmIHlvdSB3YW50 #SECOND:IHRhcmdldCBjaGVja2luZywgaW5jcmVhc2UgJ0NoZWNrU3VjY2VzcycgdmFs #SECOND:dWUuAAAAACBPcmlnaW5hbCBkZXZpY2Ugc3RpbGwgcHJlc2VudCBhZnRlciB0 #SECOND:aGUgdGltZW91dAoKTW9kZSBzd2l0Y2ggbW9zdCBsaWtlbHkgZmFpbGVkLiBC #SECOND:eWUuCgAgT3JpZ2luYWwgZGV2aWNlIGlzIGdvbmUgYWxyZWFkeSwgbm90IGNo #SECOND:ZWNraW5nAAAgU2VhcmNoaW5nIGZvciB0YXJnZXQgZGV2aWNlcyAuLi4AAAAK #SECOND:Rm91bmQgdGFyZ2V0IGRldmljZSAlMDNkIG9uIGJ1cyAlMDNkCgAAClRhcmdl #SECOND:dCBkZXZpY2UgZGVzY3JpcHRpb24gZGF0YQAgRm91bmQgY29ycmVjdCB0YXJn #SECOND:ZXQgZGV2aWNlCgpNb2RlIHN3aXRjaCBzdWNjZWVkZWQuIEJ5ZS4KAAAgTm8g #SECOND:bmV3IGRldmljZXMgaW4gdGFyZ2V0IG1vZGUgb3IgY2xhc3MgZm91bmQKCk1v #SECOND:ZGUgc3dpdGNoIGhhcyBmYWlsZWQuIEJ5ZS4KAAAAACAoRm9yIGEgYmV0dGVy #SECOND:IHN1Y2Nlc3MgY2hlY2sgcHJvdmlkZSB0YXJnZXQgSURzIG9yIGNsYXNzKQAA #SECOND:ACBPcmlnaW5hbCBkZXZpY2UgdmFuaXNoZWQgYWZ0ZXIgc3dpdGNoaW5nCgpN #SECOND:b2RlIHN3aXRjaCBtb3N0IGxpa2VseSBzdWNjZWVkZWQuIEJ5ZS4KAHN3aXRj #SECOND:aGVkIHRvICUwNHg6JTA0eCAoJXM6ICVzKQBkZXZpY2Ugc2VlbXMgdG8gaGF2 #SECOND:ZSBzd2l0Y2hlZAAAAAAgT0ssIG1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHNlbnQA #SECOND:ACBEZXZpY2Ugc2VlbXMgdG8gaGF2ZSB2YW5pc2hlZCByaWdodCBhZnRlciBz #SECOND:ZW5kaW5nLiBHb29kLgAAACBTZW5kaW5nIHRoZSBtZXNzYWdlIHJldHVybmVk #SECOND:IGVycm9yICVkLiBUcnlpbmcgdG8gY29udGludWUKACBPSywgcmVzcG9uc2Ug #SECOND:c3VjY2Vzc2Z1bGx5IHJlYWQgKCVkIGJ5dGVzKS4KAAAAACBEZXZpY2Ugc2Vl #SECOND:bXMgdG8gaGF2ZSB2YW5pc2hlZCBhZnRlciByZWFkaW5nLiBHb29kLgAgUmVz #SECOND:cG9uc2UgcmVhZGluZyBnb3QgZXJyb3IgJWQsIGNhbiBwcm9iYWJseSBiZSBp #SECOND:Z25vcmVkCgAAAABQcm9ncmFtIGNhbmNlbGxlZCBieSBzeXN0ZW0uIEJ5ZS4K #SECOND:AAAgIHNlYXJjaGluZyBkZXZpY2VzLCBmb3VuZCBVU0IgSUQgJTA0eDolMDR4 #SECOND:CgAgICBmb3VuZCBtYXRjaGluZyB2ZW5kb3IgSUQALAAARXJyb3I6IGVudHJ5 #SECOND:IGluIHByb2R1Y3QgSUQgbGlzdCBoYXMgd3JvbmcgbGVuZ3RoOiAlcy4gSWdu #SECOND:b3JpbmcKAEVycm9yOiBlbnRyeSBpbiBwcm9kdWN0IElEIGxpc3QgaXMgbm90 #SECOND:IGEgaGV4IHN0cmluZzogJXMuIElnbm9yaW5nCgAAICAgZm91bmQgbWF0Y2hp #SECOND:bmcgcHJvZHVjdCBJRCBmcm9tIGxpc3QAICAgZm91bmQgbWF0Y2hpbmcgcHJv #SECOND:ZHVjdCBJRAByAAAARXJyb3I6IENvdWxkIG5vdCBmaW5kIGZpbGUgJXMKCgA7 #SECOND:IyEARXJyb3IgcmVhZGluZyBwYXJhbWV0ZXIgZmlsZSAlcyBsaW5lICVkIC0g #SECOND:TWlzc2luZyBlbmQgcXVvdGUuCgAgCQAAAABFcnJvciByZWFkaW5nIHBhcmFt #SECOND:ZXRlciBmaWxlICVzIGxpbmUgJWQgLSBNaXNzaW5nIHZhcmlhYmxlIG5hbWUu #SECOND:CgAAAEVycm9yIHJlYWRpbmcgcGFyYW1ldGVyIGZpbGUgJXMgbGluZSAlZCAt #SECOND:IE1pc3NpbmcgdmFsdWUuCgAAAAogKiB1c2ItbW9kZXN3aXRjaDogaGFuZGxl #SECOND:IFVTQiBkZXZpY2VzIHdpdGggbXVsdGlwbGUgbW9kZXMAACAqIFZlcnNpb24g #SECOND:JXMgKEMpIEpvc3VhIERpZXR6ZSAyMDEwCgAgKiBCYXNlZCBvbiBsaWJ1c2Ig #SECOND:MC4xLjEyCgAgISBQTEVBU0UgUkVQT1JUIE5FVyBDT05GSUdVUkFUSU9OUyAh #SECOND:CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAP////8AAAAA/////wAAAAAAAAAAAQAAAAEAAAABAAAAcwEAAAwA #SECOND:AABgjAQIDQAAAJzJBAgEAAAASIEECPX+/2/kggQIBQAAACyHBAgGAAAALIME #SECOND:CAoAAAC6AgAACwAAABAAAAAVAAAAAAAAAAMAAADw8AQIAgAAAKgBAAAUAAAA #SECOND:EQAAABcAAAC4igQIEQAAAJiKBAgSAAAAIAAAABMAAAAIAAAA/v//b2iKBAj/ #SECOND://9vAQAAAPD//2/miQQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAABTwBAgAAAAAAAAAAKaMBAi2jAQIxowE #SECOND:CNaMBAjmjAQI9owECAaNBAgWjQQIJo0ECDaNBAhGjQQIVo0ECGaNBAh2jQQI #SECOND:ho0ECJaNBAimjQQIto0ECMaNBAjWjQQI5o0ECPaNBAgGjgQIFo4ECCaOBAg2 #SECOND:jgQIRo4ECFaOBAhmjgQIdo4ECIaOBAiWjgQIpo4ECLaOBAjGjgQI1o4ECOaO #SECOND:BAj2jgQIBo8ECBaPBAgmjwQINo8ECEaPBAhWjwQIZo8ECHaPBAiGjwQIlo8E #SECOND:CKaPBAi2jwQIxo8ECNaPBAjmjwQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMkECP//////////AQEAAP////// #SECOND:////AAAAAAAAAADGyQQIAAAAAAAAAABoAAAAy8kECAAAAAAAAAAAZQAAANPJ #SECOND:BAgBAAAAAAAAAHYAAADiyQQIAQAAAAAAAABwAAAA8skECAEAAAAAAAAAVgAA #SECOND:AADKBAgBAAAAAAAAAFAAAAAPygQIAQAAAAAAAABDAAAAHMoECAEAAAAAAAAA #SECOND:bQAAAC3KBAgBAAAAAAAAAE0AAAA9ygQIAQAAAAAAAAByAAAAT8oECAAAAAAA #SECOND:AAAAZAAAAFvKBAgAAAAAAAAAAEgAAABnygQIAAAAAAAAAABTAAAAc8oECAAA #SECOND:AAAAAAAATwAAAH3KBAgAAAAAAAAAAEcAAACGygQIAAAAAAAAAABuAAAAlMoE #SECOND:CAAAAAAAAAAAUgAAAJ7KBAgBAAAAAAAAAGMAAAClygQIAAAAAAAAAABXAAAA #SECOND:rcoECAAAAAAAAAAAUQAAALPKBAgAAAAAAAAAAEQAAAC7ygQIAAAAAAAAAABJ #SECOND:AAAAxsoECAEAAAAAAAAAcwAAANTKBAgBAAAAAAAAAGkAAADeygQIAQAAAAAA #SECOND:AAB1AAAA7MoECAEAAAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAR0NDOiAo #SECOND:RGViaWFuIDQuMy4yLTEuMSkgNC4zLjIAAEdDQzogKERlYmlhbiA0LjMuMi0x #SECOND:LjEpIDQuMy4yAABHQ0M6IChEZWJpYW4gNC4zLjItMS4xKSA0LjMuMgAAR0ND #SECOND:OiAoRGViaWFuIDQuMy4yLTEuMSkgNC4zLjIAAEdDQzogKERlYmlhbiA0LjMu #SECOND:Mi0xLjEpIDQuMy4yAABHQ0M6IChEZWJpYW4gNC4zLjItMS4xKSA0LjMuMgAA #SECOND:R0NDOiAoRGViaWFuIDQuMy4yLTEuMSkgNC4zLjIAAC5zaHN0cnRhYgAuaW50 #SECOND:ZXJwAC5ub3RlLkFCSS10YWcALmdudS5oYXNoAC5keW5zeW0ALmR5bnN0cgAu #SECOND:Z251LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALnJlbC5keW4ALnJlbC5wbHQA #SECOND:LmluaXQALnRleHQALmZpbmkALnJvZGF0YQAuZWhfZnJhbWUALmN0b3JzAC5k #SECOND:dG9ycwAuamNyAC5keW5hbWljAC5nb3QALmdvdC5wbHQALmRhdGEALmJzcwAu #SECOND:Y29tbWVudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAACwAAAAEAAAACAAAAFIEECBQBAAATAAAAAAAAAAAAAAABAAAAAAAAABMA #SECOND:AAAHAAAAAgAAACiBBAgoAQAAIAAAAAAAAAAAAAAABAAAAAAAAAAlAAAABQAA #SECOND:AAIAAABIgQQISAEAAJwBAAAFAAAAAAAAAAQAAAAEAAAAIQAAAPb//28CAAAA #SECOND:5IIECOQCAABIAAAABQAAAAAAAAAEAAAABAAAACsAAAALAAAAAgAAACyDBAgs #SECOND:AwAAAAQAAAYAAAABAAAABAAAABAAAAAzAAAAAwAAAAIAAAAshwQILAcAALoC #SECOND:AAAAAAAAAAAAAAEAAAAAAAAAOwAAAP///28CAAAA5okECOYJAACAAAAABQAA #SECOND:AAAAAAACAAAAAgAAAEgAAAD+//9vAgAAAGiKBAhoCgAAMAAAAAYAAAABAAAA #SECOND:BAAAAAAAAABXAAAACQAAAAIAAACYigQImAoAACAAAAAFAAAAAAAAAAQAAAAI #SECOND:AAAAYAAAAAkAAAACAAAAuIoECLgKAACoAQAABQAAAAwAAAAEAAAACAAAAGkA #SECOND:AAABAAAABgAAAGCMBAhgDAAAMAAAAAAAAAAAAAAABAAAAAAAAABkAAAAAQAA #SECOND:AAYAAACQjAQIkAwAAGADAAAAAAAAAAAAAAQAAAAEAAAAbwAAAAEAAAAGAAAA #SECOND:8I8ECPAPAACsOQAAAAAAAAAAAAAQAAAAAAAAAHUAAAABAAAABgAAAJzJBAic #SECOND:SQAAHAAAAAAAAAAAAAAABAAAAAAAAAB7AAAAAQAAAAIAAAC4yQQIuEkAACck #SECOND:AAAAAAAAAAAAAAQAAAAAAAAAgwAAAAEAAAACAAAA4O0ECOBtAAAEAAAAAAAA #SECOND:AAAAAAAEAAAAAAAAAI0AAAABAAAAAwAAAADwBAgAcAAACAAAAAAAAAAAAAAA #SECOND:BAAAAAAAAACUAAAAAQAAAAMAAAAI8AQICHAAAAgAAAAAAAAAAAAAAAQAAAAA #SECOND:AAAAmwAAAAEAAAADAAAAEPAECBBwAAAEAAAAAAAAAAAAAAAEAAAAAAAAAKAA #SECOND:AAAGAAAAAwAAABTwBAgUcAAA2AAAAAYAAAAAAAAABAAAAAgAAACpAAAAAQAA #SECOND:AAMAAADs8AQI7HAAAAQAAAAAAAAAAAAAAAQAAAAEAAAArgAAAAEAAAADAAAA #SECOND:8PAECPBwAADgAAAAAAAAAAAAAAAEAAAABAAAALcAAAABAAAAAwAAAODxBAjg #SECOND:cQAA8AEAAAAAAAAAAAAAIAAAAAAAAAC9AAAACAAAAAMAAADg8wQI0HMAAIAg #SECOND:AAAAAAAAAAAAACAAAAAAAAAAwgAAAAEAAAAAAAAAAAAAANBzAADZAAAAAAAA #SECOND:AAAAAAABAAAAAAAAAAEAAAADAAAAAAAAAAAAAACpdAAAywAAAAAAAAAAAAAA #SECOND:AQAAAAAAAAA= #SECOND:==== #SECOND:endl #SECOND: unset uudecodebin #SECOND: if [ -s "/tmp/usb_modeswitch.$$" ]; then #SECOND: chmod 700 /tmp/usb_modeswitch.$$ #SECOND: modeswitchbin="/tmp/usb_modeswitch.$$" #SECOND: debug "usb-modeswitch binary created as %s.\n" "${modeswitchbin}" #SECOND: return 0 #SECOND: fi #SECOND: notify "Unable to uudecode embedded usb_modeswitch binary." #SECOND: return 1 #SECOND:} #SECOND: #SECOND: #SECOND:getswitchabledevices() { #SECOND: unset usbswitchabledevices #SECOND: usbswitchabledevices="0421:0610 0471:1210 0471:1237 04e8:f000 057c:84ff 05c6:1000 05c6:2001 05c6:f000 072f:100d 0930:0d46 0ace:2011 0ace:20ff 0af0:6711 0af0:6731 0af0:6751 0af0:6771 0af0:6791 0af0:6811 0af0:6911 0af0:6951 0af0:6971 0af0:7011 0af0:7031 0af0:7051 0af0:7071 0af0:7111 0af0:7211 0af0:7251 0af0:7271 0af0:7301 0af0:7311 0af0:7361 0af0:7381 0af0:7401 0af0:7501 0af0:7601 0af0:7701 0af0:7801 0af0:7901 0af0:8200 0af0:8201 0af0:c031 0af0:d013 0af0:d031 0af0:d033 0af0:d035 0af0:d055 0af0:d057 0af0:d155 0af0:d157 0af0:d255 0af0:d257 0af0:d357 0fce:d0e1 1004:1000 1033:0035 106c:3b03 106c:3b06 1076:7f40 1199:0fff 12d1:1001 12d1:1003 12d1:101e 12d1:1414 12d1:1446 12d1:1520 12d1:1521 1410:5010 1410:5020 1410:5030 1410:5031 148f:2578 16d8:6803 16d8:700a 16d8:f000 198f:bccd 19d2:0026 19d2:0053 19d2:2000 19d2:fff5 19d2:fff6 1a8d:1000 1ab7:5700 1b7d:0700 1bbb:f000 1c9e:1001 1c9e:9200 1c9e:f000 1dd6:1000 1e0e:f000 1f28:0021" #SECOND: unset usbswitcheddevices #SECOND: usbswitcheddevices="0421:0612 1dbc:0005 0471:1206 0471:1234 04e8:6601 057c:8401 0af0:6901 0af0:6701 0af0:6600 16d5:6502 04e8:6601 1fe7:0100 1e0e:ce16 05c6:9000 072f:90cc 0930:0d45 12d1:1003 106c:3715 106c:3717 1076:7f00 1199:0017 1199:0018 1199:0019 1199:0020 1199:0021 1199:0022 1199:0024 1199:0026 1199:0027 1199:0028 1199:0029 1199:0112 1199:0120 1199:0218 1199:0220 1199:0224 1199:6802 1199:6803 1199:6804 1199:6805 1199:6808 1199:6809 1199:6812 1199:6813 1199:6815 1199:6816 1199:6820 1199:6821 1199:6822 1199:6832 1199:6833 1199:6834 1199:6835 1199:6838 1199:6839 1199:683a 1199:683b 1199:683c 1199:683d 1199:683e 1199:6850 1199:6851 1199:6852 1199:6853 1199:6855 1199:6856 1199:6859 1199:685a 1199:6893 1199:68a3 12d1:1001 12d1:1406 12d1:140c 12d1:14ac 12d1:1465 12d1:1464 1410:4100 1410:4400 1410:6000 1410:6002 148f:9021 16d8:680a 16d8:6006 198f:0220 19d2:0094 19d2:0031 19d2:0001 19d2:0002 19d2:0015 19d2:0031 19d2:0037 19d2:0052 19d2:0055 19d2:0063 19d2:0001 19d2:0002 19d2:0015 19d2:0031 19d2:0037 19d2:0052 19d2:0055 19d2:0063 19d2:0001 19d2:0002 19d2:0015 19d2:0031 19d2:0037 19d2:0052 19d2:0055 19d2:0063 19d2:0001 19d2:0002 19d2:0015 19d2:0031 19d2:0037 19d2:0052 19d2:0055 19d2:0063 19d2:fff1 19d2:ffff 19d2:fff1 1a8d:1002 1ab7:5731 1b7d:0001 1bbb:0000 1c9e:6061 1c9e:9202 1c9e:9063 1c9e:9603 1c9e:9000 1dd6:1002 1e0e:9200 1e0e:9000 1f28:0020" #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0421_0610() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0421:0610" #SECOND:######################################################## #SECOND:# Nokia CS-15 #SECOND: #SECOND:DefaultVendor= 0x0421 #SECOND:DefaultProduct=0x0610 #SECOND: #SECOND:TargetVendor= 0x0421 #SECOND:TargetProduct= 0x0612 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0421:0610" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0471_1210() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0471:1210" #SECOND:######################################### #SECOND:# Vodafone MD950 (Wisue Technology) #SECOND: #SECOND:DefaultVendor= 0x0471 #SECOND:DefaultProduct=0x1210 #SECOND: #SECOND:TargetVendor= 0x1dbc #SECOND:TargetProduct= 0x0005 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0471:1210" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0471_1237() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0471:1237" #SECOND:######################################################## #SECOND:# Philips TalkTalk (NXP Semiconductors "Dragonfly") #SECOND: #SECOND:DefaultVendor= 0x0471 #SECOND:DefaultProduct=0x1237 #SECOND: #SECOND:TargetVendor= 0x0471 #SECOND:TargetProductList="1206,1234" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000030000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0471:1237" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_04e8_f000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "04e8:f000" #SECOND:######################################################## #SECOND:# Samsung U209 #SECOND: #SECOND:DefaultVendor= 0x04e8 #SECOND:DefaultProduct=0xf000 #SECOND: #SECOND:TargetVendor= 0x04e8 #SECOND:TargetProduct= 0x6601 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000616000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "04e8:f000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_057c_84ff() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "057c:84ff" #SECOND:######################################################## #SECOND:# AVM Fritz!Wlan USB Stick N #SECOND: #SECOND:DefaultVendor= 0x057c #SECOND:DefaultProduct=0x84ff #SECOND: #SECOND:TargetVendor= 0x057c #SECOND:TargetProduct= 0x8401 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000ff0000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "057c:84ff" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_05c6_1000() { #SECOND: scsisysfsattr 05c6:1000 #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "aVertex" = "a`echo ${SYSFS_USB_Manufacturer} | cut -b1-6`" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "05c6:1000:uMa=Vertex" #SECOND:######################################################## #SECOND:# Vertex Wireless 100 Series #SECOND: #SECOND:DefaultVendor= 0x05c6 #SECOND:DefaultProduct=0x1000 #SECOND: #SECOND:TargetVendor= 0x1fe7 #SECOND:TargetProduct= 0x0100 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: elif [ "aSAMSUNG" = "a`echo ${SYSFS_USB_Manufacturer} | cut -b1-7`" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "05c6:1000:uMa=SAMSUNG" #SECOND:######################################################## #SECOND:# Samsung SGH-Z810 #SECOND: #SECOND:DefaultVendor= 0x05c6 #SECOND:DefaultProduct= 0x1000 #SECOND: #SECOND:TargetVendor= 0x04e8 #SECOND:TargetProduct= 0x6601 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000616000000000000000000000000000000" #SECOND: #SECOND: #SECOND:endl #SECOND: elif [ "aAnyDATA" = "a`echo ${SYSFS_USB_Manufacturer} | cut -b1-7`" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "05c6:1000:uMa=AnyDATA" #SECOND:######################################################## #SECOND:# AnyDATA ADU-500A, ADU-510A, ADU-510L, ADU-520A #SECOND: #SECOND:DefaultVendor= 0x05c6 #SECOND:DefaultProduct= 0x1000 #SECOND: #SECOND:TargetVendor= 0x16d5 #SECOND:TargetProduct= 0x6502 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND: #SECOND: #SECOND:endl #SECOND: elif [ "aOption" = "a`echo ${SYSFS_SCSI_Vendor} | cut -b1-6`" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "05c6:1000:sVe=Option" #SECOND:####################################################### #SECOND:# Older Option devices #SECOND: #SECOND:DefaultVendor= 0x05c6 #SECOND:DefaultProduct= 0x1000 #SECOND: #SECOND:TargetVendor= 0x0af0 #SECOND: #SECOND:TargetProductList="6901,6701,6600" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000601000000000000000000000000000000" #SECOND:NeedResponse=1endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "05c6:1000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_05c6_2001() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "05c6:2001" #SECOND:######################################################## #SECOND:# D-Link DWM-162-U5 #SECOND: #SECOND:DefaultVendor= 0x05c6 #SECOND:DefaultProduct=0x2001 #SECOND: #SECOND:TargetVendor= 0x1e0e #SECOND:TargetProduct= 0xce16 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "05c6:2001" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_05c6_f000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "05c6:f000" #SECOND:######################################################## #SECOND:# Siptune LM-75 ("LinuxModem") #SECOND: #SECOND:DefaultVendor= 0x05c6 #SECOND:DefaultProduct=0xf000 #SECOND: #SECOND:TargetVendor= 0x05c6 #SECOND:TargetProduct= 0x9000 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "05c6:f000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_072f_100d() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "072f:100d" #SECOND:######################################################## #SECOND:# InfoCert Business Key (SmartCard/Reader emulation) #SECOND: #SECOND:DefaultVendor= 0x072f #SECOND:DefaultProduct=0x100d #SECOND: #SECOND:TargetVendor= 0x072f #SECOND:TargetProduct= 0x90cc #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="01b0000000000000000000000000000000000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "072f:100d" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0930_0d46() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0930:0d46" #SECOND:######################################################## #SECOND:# Toshiba G450 #SECOND: #SECOND:DefaultVendor= 0x0930 #SECOND:DefaultProduct=0x0d46 #SECOND: #SECOND:TargetVendor= 0x0930 #SECOND:TargetProduct= 0x0d45 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0930:0d46" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0ace_2011() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0ace:2011" #SECOND:######################################################## #SECOND:# Zydas ZD1211RW WLAN USB, Sphairon HomeLink 1202 (Variant 1) #SECOND: #SECOND:DefaultVendor= 0x0ace #SECOND:DefaultProduct=0x2011 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0ace:2011" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0ace_20ff() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0ace:20ff" #SECOND:######################################################## #SECOND:# Zydas ZD1211RW WLAN USB, Sphairon HomeLink 1202 (Variant 2) #SECOND: #SECOND:DefaultVendor= 0x0ace #SECOND:DefaultProduct=0x20ff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0ace:20ff" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6711() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6711" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6711 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6711" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6731() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6731" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6731 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6731" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6751() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6751" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6751 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6751" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6771() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6771" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6771 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6771" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6791() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6791" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6791 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6791" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6811() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6811" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6811 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6811" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6911() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6911" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6911 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6911" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6951() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6951" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6951 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6951" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_6971() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:6971" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x6971 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:6971" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7011() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7011" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7011 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7011" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7031() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7031" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7031 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7031" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7051() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7051" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7051 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7051" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7071() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7071" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7071 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7071" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7111() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7111" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7111 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7111" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7211() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7211" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7211 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7211" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7251() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7251" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7251 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7251" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7271() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7271" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7271 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7271" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7301() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7301" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7301 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7301" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7311() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7311" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7311 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7311" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7361() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7361" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7361 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7361" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7381() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7381" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7381 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7381" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7401() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7401" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7401 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7401" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7501() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7501" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7501 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7501" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7601() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7601" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7601 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7601" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7701() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7701" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7701 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7701" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7801() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7801" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7801 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7801" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_7901() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:7901" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x7901 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:7901" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_8200() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:8200" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x8200 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:8200" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_8201() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:8201" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0x8201 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:8201" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_c031() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:c031" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xc031 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:c031" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d013() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d013" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd013 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d013" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d031() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d031" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd031 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d031" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d033() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d033" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd033 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d033" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d035() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d035" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd035 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d035" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d055() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d055" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd055 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d055" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d057() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d057" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd057 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d057" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d155() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d155" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd155 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d155" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d157() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d157" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd157 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d157" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d255() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d255" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd255 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d255" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d257() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d257" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd257 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d257" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0af0_d357() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0af0:d357" #SECOND:####################################################### #SECOND:# Option HSO device #SECOND: #SECOND:DefaultVendor= 0x0af0 #SECOND:DefaultProduct= 0xd357 #SECOND: #SECOND:TargetClass= 0xff #SECOND: #SECOND:CheckSuccess=10 #SECOND: #SECOND:MessageContent="55534243785634120100000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0af0:d357" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_0fce_d0e1() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "0fce:d0e1" #SECOND:######################################################## #SECOND:# Sony Ericsson MD400 #SECOND: #SECOND:DefaultVendor= 0x0fce #SECOND:DefaultProduct=0xd0e1 #SECOND: #SECOND:TargetClass=0x02 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:SonyMode=1 #SECOND:Configuration=2 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "0fce:d0e1" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1004_1000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1004:1000" #SECOND:######################################################## #SECOND:# LG LDU-1900D EV-DO (Rev. A) #SECOND: #SECOND:DefaultVendor= 0x1004 #SECOND:DefaultProduct=0x1000 #SECOND: #SECOND:TargetClass=0xff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000aff554d53434847000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1004:1000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1033_0035() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1033:0035" #SECOND:######################################################## #SECOND:# Huawei E630 #SECOND: #SECOND:DefaultVendor= 0x1033 #SECOND:DefaultProduct=0x0035 #SECOND: #SECOND:TargetVendor= 0x12d1 #SECOND:TargetProduct= 0x1003 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:HuaweiMode=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1033:0035" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_106c_3b03() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "106c:3b03" #SECOND:######################################################## #SECOND:# UTStarcom UM175 (distributor "Alltel") #SECOND: #SECOND:DefaultVendor= 0x106c #SECOND:DefaultProduct=0x3b03 #SECOND: #SECOND:TargetVendor= 0x106c #SECOND:TargetProduct= 0x3715 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="555342431234567824000000800008ff024445564348470000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "106c:3b03" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_106c_3b06() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "106c:3b06" #SECOND:######################################################## #SECOND:# UTStarcom UM185E (distributor "Alltel") #SECOND: #SECOND:DefaultVendor= 0x106c #SECOND:DefaultProduct=0x3b06 #SECOND: #SECOND:TargetVendor= 0x106c #SECOND:TargetProduct= 0x3717 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243b82e238c24000000800008ff020000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "106c:3b06" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1076_7f40() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1076:7f40" #SECOND:######################################################## #SECOND:# Sagem F@ST 9520-35-GLR #SECOND: #SECOND:DefaultVendor= 0x1076 #SECOND:DefaultProduct=0x7f40 #SECOND: #SECOND:TargetVendor= 0x1076 #SECOND:TargetProduct= 0x7f00 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:GCTMode=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1076:7f40" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1199_0fff() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1199:0fff" #SECOND:####################################################### #SECOND:# Sierra devices (specific driver) #SECOND: #SECOND:DefaultVendor= 0x1199 #SECOND:DefaultProduct= 0x0fff #SECOND: #SECOND:TargetVendor= 0x1199 #SECOND:TargetProductList="0017,0018,0019,0020,0021,0022,0024,0026,0027,0028,0029,0112,0120,0218,0220,0224,6802,6803,6804,6805,6808,6809,6812,6813,6815,6816,6820,6821,6822,6832,6833,6834,6835,6838,6839,683a,683b,683c,683d,683e,6850,6851,6852,6853,6855,6856,6859,685a,6893,68a3" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:SierraMode=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1199:0fff" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_12d1_1001() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "12d1:1001" #SECOND:######################################################## #SECOND:# Huawei E169 #SECOND: #SECOND:DefaultVendor= 0x12d1 #SECOND:DefaultProduct=0x1001 #SECOND: #SECOND:TargetClass=0xff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:HuaweiMode=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "12d1:1001" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_12d1_1003() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "12d1:1003" #SECOND:######################################################## #SECOND:# Huawei E220, E230, E270, E870 #SECOND: #SECOND:DefaultVendor= 0x12d1 #SECOND:DefaultProduct=0x1003 #SECOND: #SECOND:TargetClass=0xff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:HuaweiMode=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "12d1:1003" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_12d1_101e() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "12d1:101e" #SECOND:######################################################## #SECOND:# Huawei U7510 / U7517 #SECOND: #SECOND:DefaultVendor= 0x12d1 #SECOND:DefaultProduct=0x101e #SECOND: #SECOND:TargetClass=0xff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780600000080000601000000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "12d1:101e" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_12d1_1414() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "12d1:1414" #SECOND:######################################################## #SECOND:# Huawei E180 #SECOND: #SECOND:DefaultVendor= 0x12d1 #SECOND:DefaultProduct=0x1414 #SECOND: #SECOND:TargetClass=0xff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:HuaweiMode=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "12d1:1414" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_12d1_1446() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "12d1:1446" #SECOND:######################################################## #SECOND:# Huawei E270+ (HSPA+ modem) #SECOND: #SECOND:DefaultVendor= 0x12d1 #SECOND:DefaultProduct=0x1446 #SECOND: #SECOND:TargetVendor= 0x12d1 #SECOND:TargetProductList="1001,1406,140c,14ac" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000011060000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "12d1:1446" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_12d1_1520() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "12d1:1520" #SECOND:######################################################## #SECOND:# Huawei K3765 #SECOND: #SECOND:DefaultVendor= 0x12d1 #SECOND:DefaultProduct=0x1520 #SECOND: #SECOND:TargetVendor= 0x12d1 #SECOND:TargetProduct= 0x1465 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000011060000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "12d1:1520" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_12d1_1521() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "12d1:1521" #SECOND:######################################################## #SECOND:# Huawei K4505 #SECOND: #SECOND:DefaultVendor= 0x12d1 #SECOND:DefaultProduct=0x1521 #SECOND: #SECOND:TargetVendor= 0x12d1 #SECOND:TargetProduct= 0x1464 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000011060000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "12d1:1521" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1410_5010() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1410:5010" #SECOND:######################################################## #SECOND:# Novatel Wireless devices #SECOND: #SECOND:DefaultVendor= 0x1410 #SECOND:DefaultProduct=0x5010 #SECOND: #SECOND:TargetVendor= 0x1410 #SECOND:TargetProductList="4100,4400" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1410:5010" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1410_5020() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1410:5020" #SECOND:######################################################## #SECOND:# Novatel MC990D #SECOND: #SECOND:DefaultVendor= 0x1410 #SECOND:DefaultProduct=0x5020 #SECOND: #SECOND:TargetClass=0xff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:Interface= 5 #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1410:5020" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1410_5030() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1410:5030" #SECOND:######################################################## #SECOND:# Novatel U760 #SECOND: #SECOND:DefaultVendor= 0x1410 #SECOND:DefaultProduct=0x5030 #SECOND: #SECOND:TargetVendor= 0x1410 #SECOND:TargetProduct= 0x6000 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1410:5030" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1410_5031() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1410:5031" #SECOND:######################################################## #SECOND:# Novatel MC760 3G #SECOND: #SECOND:DefaultVendor= 0x1410 #SECOND:DefaultProduct=0x5031 #SECOND: #SECOND:TargetVendor= 0x1410 #SECOND:TargetProduct= 0x6002 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1410:5031" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_148f_2578() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "148f:2578" #SECOND:######################################################## #SECOND:# Motorola 802.11 bg WLAN (TER/GUSB3-E) #SECOND: #SECOND:DefaultVendor= 0x148f #SECOND:DefaultProduct=0x2578 #SECOND: #SECOND:TargetVendor= 0x148f #SECOND:TargetProduct= 0x9021 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243908ecd89000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "148f:2578" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_16d8_6803() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "16d8:6803" #SECOND:######################################################## #SECOND:# C-motech D-50 (aka "CDU-680") #SECOND: #SECOND:DefaultVendor= 0x16d8 #SECOND:DefaultProduct=0x6803 #SECOND: #SECOND:TargetVendor= 0x16d8 #SECOND:TargetProduct= 0x680a #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="555342431234567824000000800008ff524445564348470000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "16d8:6803" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_16d8_700a() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "16d8:700a" #SECOND:######################################################## #SECOND:# C-motech CHU-629S #SECOND: #SECOND:DefaultVendor= 0x16d8 #SECOND:DefaultProduct=0x700a #SECOND: #SECOND:TargetClass=0xff #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456782400000080000dfe524445564348473d4e444953000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "16d8:700a" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_16d8_f000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "16d8:f000" #SECOND:######################################################## #SECOND:# C-motech CGU-628 (aka "Franklin Wireless CGU-628A" aka "4G Systems XS Stick W12") #SECOND: #SECOND:DefaultVendor= 0x16d8 #SECOND:DefaultProduct=0xf000 #SECOND: #SECOND:TargetVendor= 0x16d8 #SECOND:TargetProduct= 0x6006 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243d85dd88524000000800008ff524445564348470000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "16d8:f000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_198f_bccd() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "198f:bccd" #SECOND:######################################################## #SECOND:# Beceem BCSM250 #SECOND: #SECOND:DefaultVendor= 0x198f #SECOND:DefaultProduct=0xbccd #SECOND: #SECOND:TargetVendor= 0x198f #SECOND:TargetProduct= 0x0220 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243f0298d8124000000800006bc626563240000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "198f:bccd" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_19d2_0026() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:0026" #SECOND:######################################################## #SECOND:# ZTE AC581 #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct=0x0026 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND:TargetProduct= 0x0094 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000030000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "19d2:0026" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_19d2_0053() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:0053" #SECOND:######################################################## #SECOND:# ZTE MF110 #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct=0x0053 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND:TargetProduct= 0x0031 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456782000000080000c85010101180101010101000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "19d2:0053" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_19d2_2000() { #SECOND: sysfsattr 19d2:2000 #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "aZTE_WCDMA" = "a`echo ${SYSFS_USB_Product} | cut -b1-9`" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:2000:uPr=ZTE_WCDMA" #SECOND:######################################################## #SECOND:# ZTE MF626 and others (WE NEED MORE ID INFO!) #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct= 0x2000 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND: #SECOND:TargetProductList="0001,0002,0015,0031,0037,0052,0055,0063" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456782000000080000c85010101180101010101000000000000" #SECOND:endl #SECOND: elif [ "aZTE_CDMA" = "a`echo ${SYSFS_USB_Product} | cut -b1-8`" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:2000:uPr=ZTE_CDMA" #SECOND:######################################################## #SECOND:# ZTE MF626 and others (WE NEED MORE ID INFO!) #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct= 0x2000 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND: #SECOND:TargetProductList="0001,0002,0015,0031,0037,0052,0055,0063" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456782000000080000c85010101180101010101000000000000" #SECOND:endl #SECOND: elif [ "aUSB_ZTE" = "a`echo ${SYSFS_USB_Product} | cut -b1-7`" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:2000:uPr=USB_ZTE" #SECOND:######################################################## #SECOND:# ZTE MF622 and probably others (WE NEED MORE ID INFO) #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct= 0x2000 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND:TargetProductList="0001,0002,0015,0031,0037,0052,0055,0063" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456782000000080000c85010101180101010101000000000000" #SECOND:endl #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:2000" #SECOND:######################################################## #SECOND:# ZTE Devices #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct= 0x2000 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND: #SECOND:TargetProductList="0001,0002,0015,0031,0037,0052,0055,0063" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000030000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "19d2:2000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_19d2_fff5() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:fff5" #SECOND:######################################################## #SECOND:# ZTE "fff" devices 1 #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct=0xfff5 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND:TargetProductList="fff1,ffff" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678c00000008000069f030000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "19d2:fff5" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_19d2_fff6() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "19d2:fff6" #SECOND:######################################################## #SECOND:# ZTE "fff" devices 2 #SECOND: #SECOND:DefaultVendor= 0x19d2 #SECOND:DefaultProduct=0xfff6 #SECOND: #SECOND:TargetVendor= 0x19d2 #SECOND:TargetProduct= 0xfff1 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678c00000008000069f030000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "19d2:fff6" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1a8d_1000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1a8d:1000" #SECOND:######################################################## #SECOND:# BandLuxe C120 #SECOND: #SECOND:DefaultVendor= 0x1a8d #SECOND:DefaultProduct=0x1000 #SECOND: #SECOND:TargetVendor= 0x1a8d #SECOND:TargetProduct= 0x1002 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456781200000080000603000000020000000000000000000000" #SECOND:ResponseNeeded=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1a8d:1000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1ab7_5700() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1ab7:5700" #SECOND:######################################################## #SECOND:# Hummer DTM5731 #SECOND: #SECOND:DefaultVendor= 0x1ab7 #SECOND:DefaultProduct=0x5700 #SECOND: #SECOND:TargetVendor= 0x1ab7 #SECOND:TargetProduct= 0x5731 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="5553424312345678000000000000061b000000020000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1ab7:5700" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1b7d_0700() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1b7d:0700" #SECOND:######################################################## #SECOND:# EpiValley SEC-7089 (featured by Alegro and Starcomms / iZAP) #SECOND: #SECOND:DefaultVendor= 0x1b7d #SECOND:DefaultProduct=0x0700 #SECOND: #SECOND:TargetVendor= 0x1b7d #SECOND:TargetProduct= 0x0001 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="555342431234567824000000800008FF05B112AEE102000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1b7d:0700" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1bbb_f000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1bbb:f000" #SECOND:######################################################## #SECOND:# Alcatel X200/X060S #SECOND: #SECOND:DefaultVendor= 0x1bbb #SECOND:DefaultProduct=0xf000 #SECOND: #SECOND:TargetVendor= 0x1bbb #SECOND:TargetProduct= 0x0000 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456788000000080000606f50402527000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1bbb:f000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1c9e_1001() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1c9e:1001" #SECOND:######################################################## #SECOND:# Alcatel One Touch X020 #SECOND: #SECOND:DefaultVendor= 0x1c9e #SECOND:DefaultProduct=0x1001 #SECOND: #SECOND:TargetVendor= 0x1c9e #SECOND:TargetProduct= 0x6061 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000606f50402527000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1c9e:1001" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1c9e_9200() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1c9e:9200" #SECOND:######################################################## #SECOND:# MyWave SW006 Sport Phone/Modem Combination #SECOND: #SECOND:DefaultVendor= 0x1c9e #SECOND:DefaultProduct=0x9200 #SECOND: #SECOND:TargetVendor= 0x1c9e #SECOND:TargetProduct= 0x9202 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456780000000000000606f50402527000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1c9e:9200" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1c9e_f000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1c9e:f000" #SECOND:######################################################## #SECOND:# MobiData MBD-200HU #SECOND: #SECOND:DefaultVendor= 0x1c9e #SECOND:DefaultProduct=0xf000 #SECOND: #SECOND:TargetVendor= 0x1c9e #SECOND:TargetProductList="9063,9603,9000" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456788000000080000606f50402527000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1c9e:f000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1dd6_1000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1dd6:1000" #SECOND:######################################################## #SECOND:# Solomon S3Gm-660 #SECOND: #SECOND:DefaultVendor= 0x1dd6 #SECOND:DefaultProduct=0x1000 #SECOND: #SECOND:TargetVendor= 0x1dd6 #SECOND:TargetProduct= 0x1002 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="55534243123456781200000080000603000000020000000000000000000000" #SECOND:ResponseNeeded=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1dd6:1000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1e0e_f000() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1e0e:f000" #SECOND:######################################################## #SECOND:# Option iCON 210, PROLiNK PHS100, Hyundai MB-810, A-Link 3GU #SECOND: #SECOND:DefaultVendor= 0x1e0e #SECOND:DefaultProduct=0xf000 #SECOND: #SECOND:TargetVendor= 0x1e0e #SECOND:TargetProductList="9200,9000" #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="555342431234567800000000000006bd000000020000000000000000000000" #SECOND:ResponseNeeded=1 #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1e0e:f000" #SECOND: fi #SECOND:} #SECOND: #SECOND: #SECOND:usbswitchconf_1f28_0021() { #SECOND: if [ "1" = "2" ]; then #SECOND: echo Dummy IF #SECOND: elif [ "1" = "1" ]; then #SECOND: modeswitchconf="/tmp/usb_switchconf.$$" #SECOND: cat < "${modeswitchconf}" #SECOND:## Original filename: "1f28:0021" #SECOND:######################################################## #SECOND:# Cricket A600 #SECOND: #SECOND:DefaultVendor= 0x1f28 #SECOND:DefaultProduct=0x0021 #SECOND: #SECOND:TargetVendor= 0x1f28 #SECOND:TargetProduct= 0x0020 #SECOND: #SECOND:CheckSuccess=20 #SECOND: #SECOND:MessageContent="555342431234567824000000800108df200000000000000000000000000000" #SECOND:endl #SECOND: else #SECOND: debug "No configuration file found for %s.\n" "1f28:0021" #SECOND: fi #SECOND:} #SECOND: #SECOND:get_9menu() { #SECOND: unset dynamic9bin #SECOND: uudecodebin=`which uudecode` #SECOND: if [ "a${uudecodebin}" = "a" ]; then #SECOND: debug "uudecode not installed. Unable to present 9menu.\n" #SECOND: return 1 #SECOND: fi #SECOND: #SECOND: cat < /tmp/9menu.$$ #SECOND:begin-base64 750 /dev/stdout #SECOND:f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAIJAECDQAAAAMNgAAAAAAADQAIAAH #SECOND:ACgAGgAZAAYAAAA0AAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQB #SECOND:AAAUgQQIFIEECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQIHDIA #SECOND:ABwyAAAFAAAAABAAAAEAAAAcMgAAHMIECBzCBAgsAwAA0AMAAAYAAAAAEAAA #SECOND:AgAAADAyAAAwwgQIMMIECOAAAADgAAAABgAAAAQAAAAEAAAAKAEAACiBBAgo #SECOND:gQQIIAAAACAAAAAEAAAABAAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYA #SECOND:AAAEAAAAL2xpYi9sZC1saW51eC5zby4yAAAEAAAAEAAAAAEAAABHTlUAAAAA #SECOND:AAIAAAAGAAAACAAAACUAAABAAAAAIAAAAAgAAAAAAAAALwAAABEAAAAuAAAA #SECOND:KAAAAAQAAAA1AAAAOwAAACUAAAAPAAAAAAAAAAAAAAAsAAAAJAAAACMAAAA2 #SECOND:AAAAOQAAAD4AAAAxAAAAIgAAAAAAAAAnAAAAAAAAAD8AAAAUAAAAAAAAAD0A #SECOND:AAA3AAAALQAAADgAAAAzAAAAJgAAAAkAAAA8AAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAACAAAAAAAAAAsAAAAAAAAA #SECOND:BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABIAAAAVAAAAAAAAAAEAAAAA #SECOND:AAAAAAAAABkAAAAbAAAABwAAADoAAAANAAAAAAAAAA4AAAAeAAAAIQAAAAAA #SECOND:AAAMAAAAEAAAAAAAAAAYAAAAHAAAABMAAAAWAAAAHwAAAAAAAAAAAAAAKwAA #SECOND:AAAAAAAAAAAAMAAAACoAAAAdAAAANAAAAAAAAAApAAAAFwAAADIAAAAAAAAA #SECOND:AAAAAAAAAAAaAAAACgAAAAAAAAADAAAAOAAAAAIAAAAGAAAAiAAgAYDlYAs4 #SECOND:AAAAOgAAAD8AAAC645J8Q0XV7KxL48A48osc2HFYHGZVYRC5jfEO69PvDgAA #SECOND:AAAAAAAAAAAAAAAAAABSAQAAAAAAAJECAAASAAAAAwIAAAAAAAAxAAAAEgAA #SECOND:AGoBAAAAAAAAlQAAABIAAACAAAAAAAAAAJ0AAAASAAAAzQEAAAAAAAA9AAAA #SECOND:EgAAABgCAAAAAAAA3AAAABIAAAAOAAAAAAAAAAAAAAAgAAAAHQAAAAAAAAAA #SECOND:AAAAIAAAAH8CAAAAAAAAZwEAABIAAABdAgAAAAAAABUBAAASAAAAPAIAAAAA #SECOND:AABxAQAAEgAAAI4CAAAAAAAAMgAAABIAAACWAgAAAAAAALkBAAASAAAA/QEA #SECOND:AAAAAABJAQAAEgAAABMCAAAAAAAArAAAABIAAAAvAgAAAAAAABMAAAASAAAA #SECOND:CwIAAAAAAAC5AQAAEgAAAJwBAAAAAAAAoAAAABIAAAC5AQAAAAAAAOAAAAAS #SECOND:AAAAXgEAAAAAAAAgAwAAEgAAAHYBAAAAAAAA6QwAABIAAAABAQAAAAAAAA8C #SECOND:AAASAAAAqAIAAAAAAAD7AAAAEgAAANcAAAAAAAAALAAAABIAAACrAQAAAAAA #SECOND:ABEBAAASAAAAjQEAAAAAAAA4AQAAEgAAAEICAAAAAAAArwAAABIAAACNAAAA #SECOND:AAAAAI0AAAASAAAA8QAAAAAAAACEAAAAEgAAAPYBAAAAAAAAJQAAABIAAACj #SECOND:AAAAAAAAAIUAAAASAAAAWQAAAAAAAAA3AQAAEgAAAEkCAAAAAAAAkQAAABIA #SECOND:AACDAQAAAAAAAIsBAAASAAAAeQIAAAAAAABlAAAAEgAAAHICAAAAAAAAcQEA #SECOND:ABIAAABFAQAAAAAAAJUAAAASAAAAhgIAAAAAAAAhAAAAEgAAAFYCAAAAAAAA #SECOND:iQEAABIAAACYAAAAAAAAAPgBAAASAAAAOAEAAAAAAAC4AAAAEgAAAFACAAAA #SECOND:AAAAEwEAABIAAAC6AAAAAAAAANMBAAASAAAANQIAAAAAAAASAQAAEgAAAOUA #SECOND:AAAAAAAAJQMAABIAAABvAAAAAAAAALICAAASAAAAawIAAAAAAABZAQAAEgAA #SECOND:AK4AAAAAAAAA6AAAABIAAAASAQAAAAAAAD0BAAASAAAAHwIAAAAAAADMAQAA #SECOND:EgAAACQCAAAAAAAAqAIAABIAAADJAAAAAAAAABABAAASAAAASQAAAAAAAAAs #SECOND:AAAAEgAAAB4BAAAAAAAAIgEAABIAAAAwAgAAAAAAAP0AAAASAAAAwAIAAOzF #SECOND:BAgAAAAAEADx/60CAABIxQQIAAAAABAA8f/nAQAALK4ECAQAAAARAA8AZAIA #SECOND:AEjFBAgEAAAAEQAYALQCAABIxQQIAAAAABAA8f8pAgAATMUECAQAAAARABgA #SECOND:MQAAAHyMBAgAAAAAEgALADcAAAAMrgQIAAAAABIADgAAbGliWGV4dC5zby42 #SECOND:AF9fZ21vbl9zdGFydF9fAF9Kdl9SZWdpc3RlckNsYXNzZXMAX2luaXQAX2Zp #SECOND:bmkAbGliWDExLnNvLjYAWEFsbG9jU2l6ZUhpbnRzAFhDcmVhdGVCaXRtYXBG #SECOND:cm9tRGF0YQBYS2V5Y29kZVRvS2V5c3ltAFhDbGVhcldpbmRvdwBYTmV4dEV2 #SECOND:ZW50AFhUZXh0V2lkdGgAWE1hcFdpbmRvdwBYQWxsb2NDb2xvcgBYTG9hZFF1 #SECOND:ZXJ5Rm9udABYUXVlcnlQb2ludGVyAFhBbGxvY1dNSGludHMAWFBhcnNlQ29s #SECOND:b3IAWFNldFdNUHJvdG9jb2xzAFhTZXRXTVByb3BlcnRpZXMAWEludGVybkF0 #SECOND:b20AWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0eQBYV2FycFBvaW50ZXIAWFNl #SECOND:bGVjdElucHV0AFhEcmF3U3RyaW5nAFhXTUdlb21ldHJ5AFhNb3ZlV2luZG93 #SECOND:AFhPcGVuRGlzcGxheQBYQ3JlYXRlR0MAWEZpbGxSZWN0YW5nbGUAWEljb25p #SECOND:ZnlXaW5kb3cAWENsb3NlRGlzcGxheQBYQ3JlYXRlU2ltcGxlV2luZG93AFhB #SECOND:bGxvY0NsYXNzSGludABsaWJjLnNvLjYAX0lPX3N0ZGluX3VzZWQAc3RyY3B5 #SECOND:AGV4ZWNsAHNwcmludGYAc3RycmNocgB3YWl0AHNpZ25hbABwdXRzAGZvcmsA #SECOND:c3RkaW4AX2V4aXQAc3RydG9rAGZnZXRzAHN0cmxlbgBwdXRlbnYAZnB1dGMA #SECOND:bWFsbG9jAGdldGVudgBzdGRlcnIAZ2V0Y3dkAGZ3cml0ZQBjbG9zZQBzdHJj #SECOND:aHIAZnByaW50ZgBmb3BlbjY0AF9fbGliY19zdGFydF9tYWluAGZyZWUAX2Vk #SECOND:YXRhAF9fYnNzX3N0YXJ0AF9lbmQAR0xJQkNfMi4xAEdMSUJDXzIuMAAAAAAA #SECOND:AAIAAAAAAAAAAgAAAAAAAgACAAIAAwACAAIAAgACAAIAAAAAAAAAAAAAAAIA #SECOND:AAAAAAAAAgAAAAAAAgAAAAAAAgAAAAIAAgAAAAIAAgAAAAAAAgAAAAIAAAAA #SECOND:AAIAAAAAAAIAAgAAAAAAAAACAAEAAQABAAIAAQACAAEAAQAAAAEAAgDdAQAA #SECOND:EAAAAAAAAAARaWkNAAADAMUCAAAQAAAAEGlpDQAAAgDPAgAAAAAAABDDBAgG #SECOND:BwAASMUECAU7AABMxQQIBT0AACDDBAgHAQAAJMMECAcCAAAowwQIBwMAACzD #SECOND:BAgHBAAAMMMECAcFAAA0wwQIBwYAADjDBAgHBwAAPMMECAcJAABAwwQIBwoA #SECOND:AETDBAgHCwAASMMECAcMAABMwwQIBw0AAFDDBAgHDgAAVMMECAcPAABYwwQI #SECOND:BxAAAFzDBAgHEQAAYMMECAcSAABkwwQIBxMAAGjDBAgHFAAAbMMECAcVAABw #SECOND:wwQIBxYAAHTDBAgHFwAAeMMECAcYAAB8wwQIBxkAAIDDBAgHGgAAhMMECAcb #SECOND:AACIwwQIBxwAAIzDBAgHHQAAkMMECAceAACUwwQIBx8AAJjDBAgHIAAAnMME #SECOND:CAchAACgwwQIByIAAKTDBAgHIwAAqMMECAckAACswwQIByUAALDDBAgHJgAA #SECOND:tMMECAcnAAC4wwQIBygAALzDBAgHKQAAwMMECAcqAADEwwQIBysAAMjDBAgH #SECOND:LAAAzMMECActAADQwwQIBy4AANTDBAgHLwAA2MMECAcwAADcwwQIBzEAAODD #SECOND:BAgHMgAA5MMECAczAADowwQIBzQAAOzDBAgHNQAA8MMECAc2AAD0wwQIBzcA #SECOND:AFWJ5VOD7AToAAAAAFuBw4w2AACLk/z///+F0nQF6H4AAADoDQQAAOg4IQAA #SECOND:WFvJw/81GMMECP8lHMMECAAAAAD/JSDDBAhoAAAAAOng/////yUkwwQIaAgA #SECOND:AADp0P////8lKMMECGgQAAAA6cD/////JSzDBAhoGAAAAOmw/////yUwwwQI #SECOND:aCAAAADpoP////8lNMMECGgoAAAA6ZD/////JTjDBAhoMAAAAOmA/////yU8 #SECOND:wwQIaDgAAADpcP////8lQMMECGhAAAAA6WD/////JUTDBAhoSAAAAOlQ//// #SECOND:/yVIwwQIaFAAAADpQP////8lTMMECGhYAAAA6TD/////JVDDBAhoYAAAAOkg #SECOND://///yVUwwQIaGgAAADpEP////8lWMMECGhwAAAA6QD/////JVzDBAhoeAAA #SECOND:AOnw/v///yVgwwQIaIAAAADp4P7///8lZMMECGiIAAAA6dD+////JWjDBAho #SECOND:kAAAAOnA/v///yVswwQIaJgAAADpsP7///8lcMMECGigAAAA6aD+////JXTD #SECOND:BAhoqAAAAOmQ/v///yV4wwQIaLAAAADpgP7///8lfMMECGi4AAAA6XD+//// #SECOND:JYDDBAhowAAAAOlg/v///yWEwwQIaMgAAADpUP7///8liMMECGjQAAAA6UD+ #SECOND:////JYzDBAho2AAAAOkw/v///yWQwwQIaOAAAADpIP7///8llMMECGjoAAAA #SECOND:6RD+////JZjDBAho8AAAAOkA/v///yWcwwQIaPgAAADp8P3///8loMMECGgA #SECOND:AQAA6eD9////JaTDBAhoCAEAAOnQ/f///yWowwQIaBABAADpwP3///8lrMME #SECOND:CGgYAQAA6bD9////JbDDBAhoIAEAAOmg/f///yW0wwQIaCgBAADpkP3///8l #SECOND:uMMECGgwAQAA6YD9////JbzDBAhoOAEAAOlw/f///yXAwwQIaEABAADpYP3/ #SECOND://8lxMMECGhIAQAA6VD9////JcjDBAhoUAEAAOlA/f///yXMwwQIaFgBAADp #SECOND:MP3///8l0MMECGhgAQAA6SD9////JdTDBAhoaAEAAOkQ/f///yXYwwQIaHAB #SECOND:AADpAP3///8l3MMECGh4AQAA6fD8////JeDDBAhogAEAAOng/P///yXkwwQI #SECOND:aIgBAADp0Pz///8l6MMECGiQAQAA6cD8////JezDBAhomAEAAOmw/P///yXw #SECOND:wwQIaKABAADpoPz///8l9MMECGioAQAA6ZD8//8AAAAAMe1eieGD5PBQVFJo #SECOND:cK0ECGiArQQIUVZooKUECOgr/f//9JCQkJCQkJCQkJCQkJCQVYnlU4PsBIA9 #SECOND:UMUECAB1QIsVVMUECLgowgQILSTCBAjB+AKNWP852nMfjbYAAAAAjUIBo1TF #SECOND:BAj/FIUkwgQIixVUxQQIOdpy58YFUMUECAGDxARbXcONdgCNvCcAAAAAVYnl #SECOND:g+wIoSzCBAiFwHQSuAAAAACFwHQJxwQkLMIECP/QycOQkJCQkJCQkJCQkJCQ #SECOND:VYnlg+wooeDFBAjHRCQYAAAAAMdEJBQAAAAAx0QkEAAAAACJRCQgoYDFBAjH #SECOND:RCQMAAAAAIlEJByhnMUECIlEJAih2MUECIlEJAShqMUECIkEJOj1/f//ycON #SECOND:tCYAAAAAVYnlVlOD7EChiMUECItwSItYTI1F9IlEJCCJRCQciUQkGI1F8IlE #SECOND:JAyJRCQIodjFBAjHRCQU4MUECMdEJBCAxQQIiUQkBKGoxQQIiQQk6En+//+F #SECOND:wHR2jUQzAYnCweofAcKLRRAPr0UI0frHRCQYAAAAAMdEJBQAAAAAjVQCBotF #SECOND:EMdEJBAAAAAAx0QkDAAAAADHRCQEAAAAAMHoHwNFENH4KcKLRQyJVCQgwegf #SECOND:A0UM0fiJRCQcodjFBAiJRCQIoajFBAiJBCToH/3//4PEQFteXcONtgAAAACN #SECOND:vwAAAABVieVTg+w0i10QjUXwiUQkIIlEJByJRCQYjUX0iUQkFI1F+IlEJBCN #SECOND:ReyJRCQMiUQkCKHYxQQIiUQkBKGoxQQIiQQk6HT9//+FwHRCidjB6B8B2NH4 #SECOND:D69dCPfYA0X0KdiJRCQMi0UMwegfA0UM0fj32ANF+IlEJAih2MUECIlEJASh #SECOND:qMUECIkEJOgu+v//g8Q0W13DjbYAAAAAjb8AAAAAVYnlV1ZTg+wsoYzFBAiF #SECOND:wA+OowAAADH/x0XwAAAAAJCh5MUECIscuIkcJOhc+///iVwkBIlEJAihiMUE #SECOND:CIkEJOgX/P//icah5MUECIscuIPHAYkcJOgy+///iVwkFIlEJBihiMUECItV #SECOND:8ItASI1EAgGJRCQQi1UQKfKJ0MHoHwHQ0fiJRCQMoejFBAiJRCQIodjFBAiJ #SECOND:RCQEoajFBAiJBCToVvn//6GMxQQIi1UMAVXwOfgPj2f///+LVQiF0ngFO0UI #SECOND:fwuDxCxbXl9dw412AItFDIlEJBiLVRCJVCQUD69FCMdEJAwAAAAAiUQkEKHo #SECOND:xQQIiUQkCKHYxQQIiUQkBKGoxQQIiQQk6G/6//+DxCxbXl9dw410JgCNvCcA #SECOND:AAAAVYnlg+wYoajFBAjHRCQIAAAAAMdEJAQwrgQIiQQk6Kn7///HRCQIAAAA #SECOND:AMdEJAQ9rgQIo8zFBAihqMUECIkEJOiH+///x0QkDAEAAADHRCQIlMUECKOU #SECOND:xQQIodjFBAiJRCQEoajFBAiJBCToHPr//4PoAXQeodDFBAjHRCQERLAECIlE #SECOND:JAihSMUECIkEJOiJ+v//ycONdCYAjbwnAAAAAFWJ5YPsGKHQxQQIx0QkBGiw #SECOND:BAiJRCQIoUjFBAiJBCToWPr//6FIxQQIx0QkCBgAAADHRCQEAQAAAMcEJE6u #SECOND:BAiJRCQM6BP6//+hSMUECMdEJAgvAAAAx0QkBAEAAADHBCSYsAQIiUQkDOju #SECOND:+f//oUjFBAjHRCQIKwAAAMdEJAQBAAAAxwQkyLAECIlEJAzoyfn//6FIxQQI #SECOND:x0QkCCgAAADHRCQEAQAAAMcEJPSwBAiJRCQM6KT5///HBCQAAAAA6Mj6//+N #SECOND:tgAAAACNvwAAAABVieWD7BiLRQjHRCQEILEECIlEJAyh0MUECIlEJAihSMUE #SECOND:CIkEJOiB+f//xwQkAQAAAOiF+v//ifaNvCcAAAAAVYnlV1ZTg+xci3UI6Ev6 #SECOND://+FwInDD4QdAgAA6Gz4//+FwInHD4QmAgAA6D33//+FwIlF0A+ELgIAAIlz #SECOND:HIlzFIlzDItFDMcDOgAAAIlDIIlDGIlDEI1DRIlEJCiNQxCJRCQkjUMMiUQk #SECOND:II1DCIlEJByNQwSJRCQYoTjEBAiJXCQUx0QkEAEAAADHRCQMjq8ECIlEJAih #SECOND:aMUECIlEJAShqMUECIkEJOih9///qAN0A4MLAYlzHI1F5IlzFIlzDItVDIlT #SECOND:IIlTGIlTEIlEJAjHRCQEAQAAAMcEJNzFBAjoivn//4XAD4QeAQAAjXXUiXQk #SECOND:CMdEJAQBAAAAxwQk3MUECOhn+f//hcAPhBMBAAChsMUECMdEJBgBAAAAiUQk #SECOND:IKG0xQQIiUQkHItDEIlEJBSLQwyJRCQQi0MIiUQkDItDBIlEJAihnMUECIlE #SECOND:JAShqMUECIkEJOjj9v//x0QkECgAAADHRCQMKAAAAMdEJAiAxAQIiUQkBKPY #SECOND:xQQIoajFBAiJBCTohff//8dHBAAAAACJRwyDPZjFBAgBxwcHAAAAGcCD4P6D #SECOND:wAOJRwiLVdCh0MUECMdCBL2uBAiJAqFwxQQIiXwkHIlcJBiJdCQMiUQkFKHU #SECOND:xQQIiVQkIIlEJBCNReSJRCQIodjFBAiJRCQEoajFBAiJBCToc/b//4PEXFte #SECOND:X13DjbQmAAAAAMcEJJOuBAjorP3//+nR/v//jbQmAAAAAMcEJKmuBAjolP3/ #SECOND:/410JgDp2P7//412AMcEJGeuBAjofP3//410JgDpzv3//412AMcEJHKuBAjo #SECOND:ZP3//410JgDpxf3//412AMcEJIeuBAjoTP3//410JgDpvf3//412AFWJ5YPs #SECOND:CMcEJAAAAADoavX//4tFCMdEJAQQmAQIiQQk6Nf0///Jw4n2jbwnAAAAAFWJ #SECOND:5YPsKIld9Il1+Il9/PyLNWDFBAiLXQiF9g+EtwAAAIsNkMUECIXJdRO/w64E #SECOND:CLkFAAAAid7zpnV1g8MFoajFBAiLQAiJBCToPvb//6FgxQQIx0QkEAAAAACJ #SECOND:XCQMx0QkCNmuBAiJRCQEoWDEBAiJBCToxPT//8dEJBAAAAAAiVwkDMdEJAjZ #SECOND:rgQIx0QkBOGuBAjHBCTcrgQI6Jz0///HBCQBAAAA6LD0//+NdCYA6Nf2//+D #SECOND:+AB8Ro22AAAAAA+EeP///4td9It1+It9/InsXcOQjXQmAIs9YMQECMdEJAQv #SECOND:AAAAiTwk6H70//+FwHQug8ABo2DFBAjpIv///5Ch0MUECMdEJATJrgQIiUQk #SECOND:CKFIxQQIiQQk6J71///rpok9YMUECOn2/v//kI10JgBVieVXVlOB7LwAAAD8 #SECOND:iw2MxQQIMfaFycdFiAAAAAB+PaHkxQQIixywiRwk6Kz0//+JXCQEiUQkCKGI #SECOND:xQQIiQQk6Gf1//+DwAQ5RYh9A4lFiIsNjMUECIPGATnxf8OLFYjFBAiLQkgD #SECOND:QkyDwAEPr8iJRYCJTCQEi0WIiQQk6J/7///o6vn//6HYxQQIx0QkCG2gAgCJ #SECOND:RCQEoajFBAiJBCTo2PT//6HYxQQIiUQkBKGoxQQIiQQk6GL0///HRYwAAAAA #SECOND:x4Vs/////////8eFfP/////////HRYQBAAAA6zBmkIlEJAyh0MUECMdEJATk #SECOND:rgQIiUQkCKFIxQQIiQQk6Ir0//+LnWz///+JnWz///+hqMUECI11lIl0JASJ #SECOND:BCToyvP//4tFlIP4Ine2/ySFjLEECI20JgAAAACLRag7BczFBAgPhOEDAACL #SECOND:nWz////ruZCLRYSFwHQboWzFBAiFwA+FNAQAAIs9pMUECIX/D4XeBAAAodjF #SECOND:BAiJRCQEoajFBAiJBCTo9PH//4t1iIl0JAiLRYCJRCQEi1WMiRQk6K/3//+L #SECOND:XYzHRYQAAAAA6Vj///+h2MUECLv/////iUQkBKGoxQQIiQQk6LHx//+LRYiJ #SECOND:RCQIi1WAxwQk/////4lUJAToa/f//8eFfP/////////pFP///410JgCDfcgC #SECOND:D4RF////i1W4idDB+h/3fYCJw4lFjItFtIXAD4gq////O0WID48h////hdsP #SECOND:iBn///87HYzFBAiNdCYAD40J////iz2kxQQIhf8PhRoFAACh5MUECI0UnQAA #SECOND:AAC//K4ECImVcP///7kFAAAAiwSYiUWQicbzpg+EhQUAAKGgxQQIiwSYiQQk #SECOND:6Ej8//+LNZDFBAiF9g+FoQIAAIudbP///4XbeBKLtWz///85NYzFBAgPjwoF #SECOND:AACLDcjFBAi7/////4XJD4RD/v//oWjFBAiJRCQIodjFBAiJRCQEoajFBAiJ #SECOND:BCToaPH//+kf/v//jbQmAAAAAKHYxQQIiUQkBKGoxQQIiQQk6Hbw//+LnWz/ #SECOND:///HRYQBAAAA6fD9//+LRbSLVbiFwHgeO0WIfxmJ0MH6H/d9gIXAicN4CzsF #SECOND:jMUECHwIjXYAu/////87nWz///90LIuVbP///4XSeBKLlWz///85FYzFBAgP #SECOND:j58CAACF23gMOx2MxQQID4w/AgAAi5Vs////iZV8////6X79//+NtgAAAADH #SECOND:RCQIAAAAAA+2RciJRCQEoajFBAiJBCToX/L//z1S/wAAiccPhL4BAAA9VP8A #SECOND:AA+EgwEAAD0N/wAAjbYAAAAAD4Vx/f//i41s////hckPiYEBAACLFYzFBAiJ #SECOND:lWj///+NBBGQjXQmAInBA4Vo////O4Vo////ePCJyonIwfof971o////gf9S #SECOND:/wAAiZVs////idN0e4H/VP8AAHRzoaTFBAiFwA+FNgIAAIH/Df8AAA+EhwIA #SECOND:AKGQxQQIhcAPheQAAAChyMUECIXAD4So/P//6WD+//+NdgCh2MUECIlEJASh #SECOND:qMUECIkEJOj+7v//i3WIiXQkCItFgIlEJASLlWz///+JFCTotvT//+mo/P// #SECOND:kIu1bP///zm1fP///w+EVvz//4uFfP///4XAeBKLhWj///85hXz///8PjFEC #SECOND:AACLhWz///87BYzFBAgPjSj8//+LVYAPr8KJVCQYi3WIx0QkDAAAAACJRCQQ #SECOND:oejFBAiJdCQUiUQkCKHYxQQIiUQkBKGoxQQIiQQk6LDv///p5/v//420JgAA #SECOND:AACLRbA7BZTFBAgPhRD8//+BxLwAAABbXl9dw422AAAAAIuNbP///4uVbP// #SECOND:/4PBAYXJiZV8////D4h//v//oYzFBAiJhWj////pk/7//412AIuNbP///4u1 #SECOND:bP///4PpAYm1fP///+lK/v//jbYAAAAAi3WAiXQkCItFiIlEJASLVYyJFCTo #SECOND://L//+m8+///ZpCLVYCJ0A+vw4lUJBiLdYjHRCQMAAAAAIlEJBCh6MUECIl0 #SECOND:JBSJRCQIodjFBAiJRCQEoajFBAiJBCTo1u7//4uFbP///4mFfP///+kB+/// #SECOND:kIt1gIl0JBiLRYjHRCQMAAAAAIlEJBSJ8A+vwolEJBCh6MUECIlEJAih2MUE #SECOND:CIlEJAShqMUECIkEJOiG7v//6R79//+QjXQmAIt1gIl0JAiLRYiJRCQEi1WM #SECOND:iRQk6Gfx///pBPv//2aQoeDFBAjHRCQYAAAAAMdEJBQAAAAAx0QkEAAAAACJ #SECOND:RCQgoYDFBAjHRCQMAAAAAIlEJByhnMUECIlEJAih2MUECIlEJAShqMUECIkE #SECOND:JOj77v//gf8N/wAAD4V5/f//i4Vs////v/yuBAi5BQAAAIuVbP///8HgAomF #SECOND:dP///6HkxQQIiwSQiYV4////icbzpg+EIwEAAIu1bP///6GgxQQIiwSwiQQk #SECOND:6Lb3///pJ/3//4tVgIlUJBiLdYiJdCQUi4V8////x0QkDAAAAAAPr8KJRCQQ #SECOND:oejFBAiJRCQIodjFBAiJRCQEoajFBAiJBCToa+3//+lo/f//oeDFBAjHRCQY #SECOND:AAAAAMdEJBQAAAAAx0QkEAAAAACJRCQgoYDFBAjHRCQMAAAAAIlEJByhnMUE #SECOND:CIlEJAih2MUECIlEJAShqMUECIkEJOgF7v//6ZD6//+LRYCJRCQYD6/woejF #SECOND:BAiLVYjHRCQMAAAAAIlEJAih2MUECIlUJBSJdCQQiUQkBKGoxQQIiQQk6NTs #SECOND:///ptfr//6GgxQQIi5Vw////iwQQO0WQD4Qj/f//iQQk6LT2//+BxLwAAABb #SECOND:Xl9dw6GgxQQIi5V0////iwQQO4V4////ddfp9fz//420JgAAAACNvCcAAAAA #SECOND:VYnlgewoEAAAiV30iXX4iX38/ItFCIXAD4TKAAAAi0UMhcAPhL8AAACLRQyL #SECOND:GIXbD4SyAAAAi0UIx4Xo7///AAAAAIXAD46nAAAAjZX07///x4Xo7///AAAA #SECOND:AMeF8O///wAAAACJlezv///rPo12AIuV8O///4tNDItEkQSDhejv//8Bo8TF #SECOND:BAiDhejv//8Bi4Xo7///OUUIfleLVQyJhfDv//+LHIKF23RHid6/Aa8ECLkJ #SECOND:AAAA86Z0tb8KrwQIuQYAAACJ3vOmdT2LlfDv//+LTQyLRJEEg4Xo7///AaOE #SECOND:xQQI66NmkMeF6O////////+Lhejv//+LXfSLdfiLffyJ7F3DjXYAvxCvBAi5 #SECOND:BgAAAIne86Z1IIuV8O///4tNDItEkQSDhejv//8Bo7zFBAjpU////2aQvxav #SECOND:BAi5CgAAAIne86Z1HouV8O///4tNDItEkQSDhejv//8BozjEBAjpI////78g #SECOND:rwQIuQcAAACJ3vOmdR6LlfDv//+LTQyLRJEEg4Xo7///AaPcxQQI6fX+//+/ #SECOND:J68ECLkHAAAAid7zpnUei5Xw7///i00Mi0SRBIOF6O///wGjYMQECOnH/v// #SECOND:vy6vBAi5BwAAAIne86Z1DIMFkMUECAHpq/7//781rwQIid65CQAAAPOmdQyD #SECOND:BcjFBAgB6Y/+//+AOy10Ib8+rwQIuQgAAACJ3vOmdVSDBZjFBAgB6W7+//+Q #SECOND:jXQmAIB7AWYPhQ4BAACAewJnZpAPhQIBAACAewMAjbYAAAAAD4XyAAAAg4Xo #SECOND:7///AYuV6O///4tNDIsEkaNYxQQI6Sb+//+/Rq8ECLkGAAAAid7zpg+FpQAA #SECOND:AMcEJEyvBAjo+ej//4XAiccPhPz9//+NhfTv///HRCQEABAAAIkEJOgp6/// #SECOND:iTwk6OHp//+NjfTv//+Jw4sBg8EEjZD//v7+99AhwoHigICAgHTp98KAgAAA #SECOND:dQbB6hCDwQIA0oPZAyuN7O///41EGQeJBCToXer//42V9O///4l8JAyJVCQI #SECOND:x0QkBFGvBAiJw4kEJOj95///iRwk6NXp///pbf3//79crwQIuQoAAACJ3vOm #SECOND:dU+DBWzFBAgB6VH9//+AewFiD4W9/v//gHsCZ2aQD4Wx/v//gHsDAI22AAAA #SECOND:AA+Fof7//4OF6O///wGLtejv//+LVQyLBLKjXMUECOkO/f//v2avBAi5BgAA #SECOND:AIne86Z1DIMFpMUECAHp8vz//79srwQIid65CQAAAPOmdBaAOy0PhUL9///o #SECOND:C+///412AOnM/P//xwQkIMQECOgz6v//xwQkAAAAAOh36v//jXQmAI28JwAA #SECOND:AACNTCQEg+Tw/3H8VYnlV1ZTUYHsmAQAAIsZi0kEiR1wxQQIiY1w+///iQ3U #SECOND:xQQIizHHRCQELwAAAIk0JOjM5///hcAPhI0GAACDwAGj3MUECKHcxQQIg+sB #SECOND:iRwko9DFBAiLhXD7//+DwASJRCQE6K77//8pw4XbiYV0+///iR2MxQQID44g #SECOND:BgAAoYTFBAjHhXj7//8AAAAAhcAPhAEBAACAOC0PhegDAACAeAEAD4XeAwAA #SECOND:ixVMxQQIiZV8+///i718+///hf8PhM4GAADHhXj7//8AAAAAZpCLlXz7//+N #SECOND:hYj7///HRCQEAAQAAIkEJIlUJAjotOb//4XAD4SgAAAAjYWI+///x0QkBI2v #SECOND:BAiJBCTopuj//w+2hYj7//88LQ+E6wQAADwjdK88XI29iPv//w+EyQQAAKG4 #SECOND:xQQIOYV4+///D41YBAAAiTwki7V4+///6Fbn///B5gKJ8wMdrMUECIPAAYkE #SECOND:JOgA6P//iQOLDazFBAiLhXj7//+LHIGF2w+ECwUAAIl8JASLBDGJBCToSOf/ #SECOND:/4OFePv//wHpOP///4uFePv//wMFjMUECMHgAokEJOi15///o+TFBAiLhXj7 #SECOND://8DBYzFBAjB4AKJBCTomef//4XAo6DFBAgPhOAEAACLFeTFBAiF0g+E0gQA #SECOND:AKGMxQQIMduFwH53i5V0+///MduLhXD7//+NdJAE6x+NdgDGAACNUAGhoMUE #SECOND:CIPGBIkUmIPDATkdjMUECH5EiwaLFeTFBAiJBJqh5MUECIs8mMdEJAQ6AAAA #SECOND:iTwk6D3l//+FwHW9oaDFBAiDxgSJPJiDwwE5HYzFBAh/w420JgAAAACLhXj7 #SECOND://+FwHRuweMCMfbrI420JgAAAADGAACNUAGhoMUECIPGAYkUGIPDBDm1ePv/ #SECOND:/35EoazFBAiLFLCh5MUECIkUGKHkxQQIizwYx0QkBDoAAACJPCTowOT//4XA #SECOND:dbihoMUECIPGAYk8GIPDBDm1ePv//3++ZpChxMUECIuVePv//wEVjMUECIkE #SECOND:JOhL5f//hcCJwaOoxQQID4QpBAAAi4CEAAAAo2jFBAiLkYwAAACNBIDB4ASL #SECOND:VBAIiRWcxQQIi5GMAAAAi1QQMKFYxQQIiRXAxQQIhcB0IMdEJAx0xQQIiUQk #SECOND:CIlUJASJDCToaub//4XAD4VGAQAAiw2oxQQIoWjFBAiLkYwAAACNBIDB4ASL #SECOND:RAI4o7TFBAihXMUECIXAdCuJRCQIocDFBAjHRCQMdMUECIkMJIlEJAToHOb/ #SECOND:/4XAD4U4AQAAiw2oxQQIoWjFBAiLkYwAAACNBIDB4ASLRAI0o7DFBAihvMUE #SECOND:CIXAD4RLAQAAiUQkBKGoxQQIiQQk6Lbl//+FwKOIxQQID4QKAwAAixWwxQQI #SECOND:idAzBbTFBAiJVZSJRZChiMUECItABMdFiAYAAADHRZgAAAAAx0QkCB1AAACJ #SECOND:RcSNRYiJRCQMoZzFBAiJRCQEoajFBAiJBCTox+T//8dEJAQQmAQIxwQkEQAA #SECOND:AKPoxQQI6P7i///oXe///6GoxQQIiQQk6Azk///HBCQAAAAA6ODl//+NdCYA #SECOND:x0QkBHWvBAiJBCToHOP//4mFfPv//+kT/P//kI10JgChwMUECMdEJAh0xQQI #SECOND:iUQkBKGoxQQIiQQk6C7l//+FwA+ElP7//6F0xQQIiw2oxQQIo7TFBAjpn/7/ #SECOND:/5CNdCYAocDFBAjHRCQIdMUECIlEJAShqMUECIkEJOju5P//hcAPhKL+//+h #SECOND:dMUECKOwxQQIobzFBAiFwA+FuP7//412AKGIxQQIhcAPhcb+//+hQMQECIXA #SECOND:dC4x24lEJAShqMUECIkEJOhT5P//hcCjiMUECA+Fnf7//4PDAYsEnUDEBAiF #SECOND:wHXUodDFBAjHRCQEbLEECIlEJAihSMUECIkEJOjK4///xwQkAQAAAOjO5P// #SECOND:ZpCNBIUUAAAAiQQk6L3j//+FwInDD4QyAQAAi7V4+///hfYPjhkBAACLDazF #SECOND:BAgx0pCLBJGJBJODwgE5lXj7//9/74kMJOiD4v//iR2sxQQIgwW4xQQIBelN #SECOND:+///kI10JgCNvYn7///pLPv//5CNdCYAjZWI+///iVXkx0QkBCAAAACJFCTo #SECOND:Y+H//4XAiUXodDjGAACDwAGJReiJBCToa+L//4PAAYkEJOgg4///hcCJww+E #SECOND:pgAAAItF6IkcJIlEJATod+L//4ld6IN96AGNVeTHRewAAAAAGcCDwAKJVCQE #SECOND:iQQk6Jn1///pTPr//410JgDHBCSxrwQI6BTp//+LDazFBAjp3vr//5ChhMUE #SECOND:CIXAD4Xq+f//6Cbo///pyfn//5DHBCTArwQI6OTo//+NdCYA6Rn7//+JNdzF #SECOND:BAjpcPn//4sNrMUECOn2/v//xwQkoq8ECOi56P//6b3+///HBCSPrwQI6Kjo #SECOND:///pSf///6G8xQQIx0QkBEixBAiJRCQModDFBAiJRCQIoUjFBAiJBCToKOL/ #SECOND:/+n3/f//odDFBAjHRCQE2a8ECIlEJAihSMUECIkEJOgF4v//ocTFBAiFwHQZ #SECOND:iUQkCKFIxQQIx0QkBPGvBAiJBCTo4+H//6FIxQQIxwQkCgAAAIlEJAToDuL/ #SECOND:/8cEJAEAAADo0uL//6GExQQIx0QkBHevBAiJRCQModDFBAiJRCQIoUjFBAiJ #SECOND:BCTom+H//8cEJAEAAADon+L//5CQkFWJ5V3DjXQmAI28JwAAAABVieVXVlPo #SECOND:TwAAAIHDiRUAAIPsDOjj3v//jbsI////jYMI////KcfB/wKF/3QkMfaLRRCJ #SECOND:RCQIi0UMiUQkBItFCIkEJP+Uswj///+DxgE5/nLeg8QMW15fXcOLHCTDkJBV #SECOND:ieVTg+wEoRzCBAiD+P90E7scwgQIZpCD6wT/0IsDg/j/dfSDxARbXcOQkFWJ #SECOND:5VOD7AToAAAAAFuBw/wUAADoLOL//1lbycMDAAAAAQACAFdNX1BST1RPQ09M #SECOND:UwBXTV9ERUxFVEVfV0lORE9XAFstZmlsZSBmaWxlbmFtZV0gWy1wYXRoXQBz #SECOND:aXplIGhpbnRzAHdpbmRvdyBtYW5hZ2VyIGhpbnRzAGNsYXNzIGhpbnRzAHdp #SECOND:bmRvdyBuYW1lIHN0cnVjdHVyZQBpY29uIG5hbWUgc3RydWN0dXJlADltZW51 #SECOND:AGV4ZWMgACVzOiBjYW4ndCBmb3JrCgAtYwAvYmluL3NoACVzOiB1bmtub3du #SECOND:IGV2LnR5cGUgJWQKAGV4aXQALWRpc3BsYXkALWZpbGUALWZvbnQALWdlb21l #SECOND:dHJ5AC1sYWJlbAAtc2hlbGwALXBvcHVwAC1wb3Bkb3duAC1pY29uaWMALXBh #SECOND:dGgAUEFUSABQQVRIPSVzOiVzAC10ZWxlcG9ydAAtd2FycAAtdmVyc2lvbgBy #SECOND:ACVzOiBjb3VsZG4ndCBvcGVuICclcycKAHRlbXBvcmFyeSBhcmd1bWVudAB0 #SECOND:ZW1wb3JhcnkgaXRlbQB0ZW1wb3JhcnkgdGV4dABjb21tYW5kIGFuZCBsYWJl #SECOND:bCBhcnJheXMAJXM6IGNhbm5vdCBvcGVuIGRpc3BsYXkAICVzAHBlbG0ubGF0 #SECOND:aW4xLjkAbHVjbS5sYXRpbjEuOQBibGl0ADl4MTVib2xkADl4MTUAbHVjaWRh #SECOND:c2Fuc3R5cGV3cml0ZXItMTIAZml4ZWQAAAAlczogY291bGQgbm90IGFzayBm #SECOND:b3IgY2xlYW4gZGVsZXRlCgB1c2FnZTogJXMgWy1kaXNwbGF5IGRpc3BsYXlu #SECOND:YW1lXSBbLWZvbnQgZm5hbWVdIABbLWdlb21ldHJ5IGdlb21dIFstc2hlbGwg #SECOND:c2hlbGxdICBbLWxhYmVsIG5hbWVdIABbLXBvcHVwXSBbLXBvcGRvd25dIFst #SECOND:aWNvbmljXSAgWy10ZWxlcG9ydF0gAFstd2FycF0gIFstdmVyc2lvbl0gbWVu #SECOND:aXRlbTpjb21tYW5kIC4uLgoAAAAAJXM6IGNvdWxkbid0IGFsbG9jYXRlIG1l #SECOND:bW9yeSBmb3IgJXMKAAAAACVzOiB3YXJuaW5nOiBjYW4ndCBsb2FkIGZvbnQg #SECOND:JXMKAAAAACVzOiBmYXRhbDogY2Fubm90IGxvYWQgYSBmb250CgAAUJoECFCa #SECOND:BAgAnQQIUJoECIicBAhomwQIiJwECFCaBAggmwQIUJoECFCaBAhQmgQI2J0E #SECOND:CFCaBAhQmgQIUJoECFCaBAhQmgQIYJwECMCaBAhQmgQIfpoECH6aBAhQmgQI #SECOND:UJoECFCaBAhQmgQIUJoECFCaBAhQmgQIUJoECFCaBAhQmgQIqJoECH6aBAgA #SECOND:AAAA/////wAAAAD/////AAAAAAAAAAABAAAAAQAAAAEAAAA9AAAAAQAAAN0B #SECOND:AAAMAAAAfIwECA0AAAAMrgQIBAAAAEiBBAj1/v9v5IIECAUAAAAohwQIBgAA #SECOND:ACiDBAgKAAAA2QIAAAsAAAAQAAAAFQAAAAAAAAADAAAAFMMECAIAAACwAQAA #SECOND:FAAAABEAAAAXAAAAzIoECBEAAAC0igQIEgAAABgAAAATAAAACAAAAP7//2+E #SECOND:igQI////bwEAAADw//9vAooECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwwgQIAAAAAAAAAADCjAQI0owE #SECOND:COKMBAjyjAQIAo0ECBKNBAgijQQIMo0ECEKNBAhSjQQIYo0ECHKNBAiCjQQI #SECOND:ko0ECKKNBAiyjQQIwo0ECNKNBAjijQQI8o0ECAKOBAgSjgQIIo4ECDKOBAhC #SECOND:jgQIUo4ECGKOBAhyjgQIgo4ECJKOBAiijgQIso4ECMKOBAjSjgQI4o4ECPKO #SECOND:BAgCjwQIEo8ECCKPBAgyjwQIQo8ECFKPBAhijwQIco8ECIKPBAiSjwQIoo8E #SECOND:CLKPBAjCjwQI0o8ECOKPBAjyjwQIApAECBKQBAgAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCgjKSA5bWVudSB2ZXJzaW9uIDEu #SECOND:OAAAjq8ECAAAAAD1rwQIA7AECBGwBAgWsAQIH7AECCSwBAg8sAQIAAAAANyu #SECOND:BAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8//8AAAQAgAAA #SECOND:BACAAAD8//8AAPz//wAABACAAAAEAIAAAPz//wAA/P//AAAEAIAAAAQAgAAA #SECOND:/P//AAD8//8AAAQAgOABBACA4AD8///gAfz//yADBACAAAYEAIAADPz//wAI #SECOND:/P//AAAEAIAAAAQAgAAA/P//AAD8//8AAAQAgAAABACAAAD8//8AAPz//wAA #SECOND:BACAAAAEAIAAAPz//wAA/P//AAAEAIAAAAQAgAAA/P//AAAAAAAAAAAAAAAA #SECOND:AAAAAAAALnNoc3RydGFiAC5pbnRlcnAALm5vdGUuQUJJLXRhZwAuZ251Lmhh #SECOND:c2gALmR5bnN5bQAuZHluc3RyAC5nbnUudmVyc2lvbgAuZ251LnZlcnNpb25f #SECOND:cgAucmVsLmR5bgAucmVsLnBsdAAuaW5pdAAudGV4dAAuZmluaQAucm9kYXRh #SECOND:AC5laF9mcmFtZQAuY3RvcnMALmR0b3JzAC5qY3IALmR5bmFtaWMALmdvdAAu #SECOND:Z290LnBsdAAuZGF0YQAuYnNzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA #SECOND:AAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAgAAABSBBAgUAQAAEwAAAAAAAAAA #SECOND:AAAAAQAAAAAAAAATAAAABwAAAAIAAAAogQQIKAEAACAAAAAAAAAAAAAAAAQA #SECOND:AAAAAAAAJQAAAAUAAAACAAAASIEECEgBAACcAQAABQAAAAAAAAAEAAAABAAA #SECOND:ACEAAAD2//9vAgAAAOSCBAjkAgAARAAAAAUAAAAAAAAABAAAAAQAAAArAAAA #SECOND:CwAAAAIAAAAogwQIKAMAAAAEAAAGAAAAAQAAAAQAAAAQAAAAMwAAAAMAAAAC #SECOND:AAAAKIcECCgHAADZAgAAAAAAAAAAAAABAAAAAAAAADsAAAD///9vAgAAAAKK #SECOND:BAgCCgAAgAAAAAUAAAAAAAAAAgAAAAIAAABIAAAA/v//bwIAAACEigQIhAoA #SECOND:ADAAAAAGAAAAAQAAAAQAAAAAAAAAVwAAAAkAAAACAAAAtIoECLQKAAAYAAAA #SECOND:BQAAAAAAAAAEAAAACAAAAGAAAAAJAAAAAgAAAMyKBAjMCgAAsAEAAAUAAAAM #SECOND:AAAABAAAAAgAAABpAAAAAQAAAAYAAAB8jAQIfAwAADAAAAAAAAAAAAAAAAQA #SECOND:AAAAAAAAZAAAAAEAAAAGAAAArIwECKwMAABwAwAAAAAAAAAAAAAEAAAABAAA #SECOND:AG8AAAABAAAABgAAACCQBAggEAAA7B0AAAAAAAAAAAAAEAAAAAAAAAB1AAAA #SECOND:AQAAAAYAAAAMrgQIDC4AABwAAAAAAAAAAAAAAAQAAAAAAAAAewAAAAEAAAAC #SECOND:AAAAKK4ECCguAADwAwAAAAAAAAAAAAAEAAAAAAAAAIMAAAABAAAAAgAAABiy #SECOND:BAgYMgAABAAAAAAAAAAAAAAABAAAAAAAAACNAAAAAQAAAAMAAAAcwgQIHDIA #SECOND:AAgAAAAAAAAAAAAAAAQAAAAAAAAAlAAAAAEAAAADAAAAJMIECCQyAAAIAAAA #SECOND:AAAAAAAAAAAEAAAAAAAAAJsAAAABAAAAAwAAACzCBAgsMgAABAAAAAAAAAAA #SECOND:AAAABAAAAAAAAACgAAAABgAAAAMAAAAwwgQIMDIAAOAAAAAGAAAAAAAAAAQA #SECOND:AAAIAAAAqQAAAAEAAAADAAAAEMMECBAzAAAEAAAAAAAAAAAAAAAEAAAABAAA #SECOND:AK4AAAABAAAAAwAAABTDBAgUMwAA5AAAAAAAAAAAAAAABAAAAAQAAAC3AAAA #SECOND:AQAAAAMAAAAAxAQIADQAAEgBAAAAAAAAAAAAACAAAAAAAAAAvQAAAAgAAAAD #SECOND:AAAASMUECEg1AACkAAAAAAAAAAAAAAAEAAAAAAAAAAEAAAADAAAAAAAAAAAA #SECOND:AABINQAAwgAAAAAAAAAAAAAAAQAAAAAAAAA= #SECOND:==== #SECOND:endl #SECOND: unset uudecodebin #SECOND: if [ -s "/tmp/9menu.$$" ]; then #SECOND: chmod 755 /tmp/9menu.$$ #SECOND: dynamic9bin="/tmp/9menu.$$" #SECOND: return 0 #SECOND: fi #SECOND: debug "Unable to uudecode embedded 9menu binary.\n" #SECOND: return 1 #SECOND:} #SECOND: