pax_global_header00006660000000000000000000000064135646021050014514gustar00rootroot0000000000000052 comment=044a0640985ef007c0b2fb6eaf660d9d51800cda systemtap-4.2/000077500000000000000000000000001356460210500134125ustar00rootroot00000000000000systemtap-4.2/.gitignore000066400000000000000000000006471356460210500154110ustar00rootroot00000000000000*~ #* *# .#* autom4te.* cscope.files cscope*out gmon.out config.h config.log config.status .deps loc2c-test run-stap run-staprun stamp-h1 stap staprun/staprun testresults staprun/stapio stap_merge CVS .checkstyle .cproject .metadata .project .settings .autotools SNAPSHOT *.o git_version.h Makefile build-elfutils include-elfutils lib-elfutils stamp-elfutils dtrace stappaths.7 .zanata-cache build-log.txt macros.systemtap systemtap-4.2/.mailmap000066400000000000000000000043071356460210500150370ustar00rootroot00000000000000# Early history did not include userid->full-name mappings, so we do # that explicitly here. Aaron Merey Aaron Merey Ananth N Mavinakayanahalli Anil Keshavamurthy bibo mao Brad Chen Charles Spirakis Dave Brolley Dave Nomura David Smith David J. Wilder Denys Vlasenko Don Domingo Elliott Baron Eugene Teo Frank Ch. Eigler Frederic Turgis Graydon Hoare Hien Nguyen Jim Keniston Josh Stone Kai Meyer Kent Sebastian Kevin Stafford K.Prasad Li Guanglei Mark McLoughlin Martin Hunt Masami Hiramatsu Maynard Johnson Michael Behm Mike Mason Prasanna S Panchamukhi Prerna Saxena Rajan Arora Roland McGrath Rusty Lynch Shaohua Li Srikar Dronamraju Srinivasa DS Thang Nguyen Tom Zanussi Wenji Huang William Cohen Zhaolei Zhaolei # Normalize a few git commit names too Anithra Janakiraman Breno Leitao Bryn M. Reeves Dave Nomura Don Domingo K.Prasad K.Prasad Kent Sebastian Maran Pakkirisamy Mark Wielaard Negreanu Marius Adrian Negreanu Marius Adrian Prerna Saxena Przemysław Pawełczyk Przemysław Pawełczyk Srinivasa DS Wenji Huang Wenji Huang William Cohen William Cohen Rayson Ho Rayson Ho Tomoki Sekiyama Yichun Zhang (agentzh) systemtap-4.2/ABOUT-NLS000066400000000000000000002671331356460210500146550ustar00rootroot000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. systemtap-4.2/AUTHORS000066400000000000000000000057661356460210500145000ustar00rootroot00000000000000Aaron Merey Aaron Tomlin Abegail Jakop Adrien Kunysz Alexander Lochmann Alexander Y. Fomichev Alfred Landrum Ananth N Mavinakayanahalli Andre Detsch Andreas Müller Andy Fitzsimon Anil Keshavamurthy Anithra Janakiraman Anton Vorontsov Arjun Shankar Aryeh Weinreb Athira Atsushi Tsuji Benjamin Coddington Bernhard M. Wiedemann Bernhard Wiedemann Bingwu Yang Brendan Gregg Breno Leitao Brent Baude Brian Chrisman Bryn M. Reeves Carlos O'Donell Casey Dahlin Charles Spirakis Charley Wang Chris Meek Chung-Lin Tang Cody Santing Daan Spitz Dan Horak Daniel Migault Daniel Tschan Dave Brolley Dave Nomura David J. Wilder David Juran David Smith David Ward Dennis Gilmore Diego Elio Pettenò Don Domingo Elliott Baron Erick Tryzelaar Eugene Teo Eugeniy Meshcheryakov Fabio Olive Leite Fahad Arshad Felix Lin Felix Lu Francis Giraldeau Frank Ch. Eigler Frederic Turgis Fredrik Östman Grant Edwards Graydon Hoare Guilherme G. Piccoli Gustavo Moreira Han Pingtian Hemant Kumar Hien Nguyen Hilko Bengen Honggyu Kim Hou Tao Hushan Jia Igor Gnatenko Igor Zhbanov Iryna Shcherbina Ivan Diorditsa Jafeer Uddin Jakub Jelinek James Bottomley Jan Kratochvil Jeff Moyer Jesper Brouer Jim Keniston Jiri Horky Jiri Slaby Joe Gorse JoeLynn Keniston Jonathan Lebon Jose Castillo Josh Stone Jóhann B. Guðmundsson K.Prasad Kai Meyer Kapileshwar Singh (KP) Keiichi KII Ken Raeburn Kent Sebastian Kevin Stafford Kim van der Riet Kiran Prakesh Kyle Walker Lars R. Damerow Li Guanglei Lubomir Rintel Lukas Berk Lukas Czerner Lukas Herbolt Lukáš Hejtmánek Mahesh J Salgaonkar Malte Nuhn Maran Pakkirisamy Marc Milgram Marcin Nowakowski Mark McLoughlin Mark Wielaard Martin Cermak Martin Hunt Martin Lazar Masami Hiramatsu Masanari Iida Masatake YAMATO Mateusz Guzik Maynard Johnson Michael Meeks Michal Toman Mikael Dubik Mike Mason Mikhail Kulemin Miroslav Franc Nan Xiao Naresh Kamboju Nathan Scott Negreanu Marius Adrian Nicolas Brito Nikolay Borisov Nitin A Kamble Nobuhiro Tachino Oleksandr Chumachenko Orivej Desh Otavio Pontes Paddie O'Brien Paulo Andrade Peter Feiner Peter Kjellström Peter Robinson Petr Matousek Petr Muller Petr Viktorin Phil Muldoon Prerna Saxena Przemysław Pawełczyk Qiao Nuohan Quentin Barnes Rajan Arora Rajasekhar Duddu Raphaël Beamonte Ravi Bangoria Rayson Ho Rich Megginson Richard Fontana Richard Henderson Richard Purdie Ritesh Raj Sarraf Robb Romans Robin Hack Robin Lee Roland Grunberg Roland McGrath Ross Burton Ruslan Kuprieiev Rüdiger Sonderfeld Sagar Patel Sandipan Das Santosh Shukla Saul Wold Serguei Makarov Serhei Makarov Shaohua Li Siddhesh Poyarekar Snehal Phule Srikar Dronamraju Srinivasa DS Stan Cox Stefan Hajnoczi Steve Dickson Sunzen Wang Tetsuo Handa Thang Nguyen Theodore Ts'o Tim Moore Timo Juhani Lindfors Tom Callaway Tom Tromey Tom Zanussi Tomoki Sekiyama Tony Jones Torsten Polle Varun Chandramohan Victor Kamensky Vincent Bernat Vitaly Mayatskikh Wade Farnsworth Wenji Huang Wenzong Fan William Cohen Yaakov Selkowitz Yang Wen Yichun Zhang (agentzh) Yoshihide Sonoda Zexuan Luo Zhaolei Zhou Wenjian Zifei Tong ch huang systemtap-4.2/AUTHORS.sh000077500000000000000000000004651356460210500151030ustar00rootroot00000000000000#! /bin/sh # Create the AUTHORS file, by searching the git history. # Run as "AUTHORS.sh" to get complete history # Run with "AUTHORS.sh commitish..commitish" for history between tags # shortlog will canonicalize the names using the file .mailmap git shortlog -s ${1-} | cut -b8- # strip the commit counts systemtap-4.2/COPYING000066400000000000000000000432541356460210500144550ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. systemtap-4.2/EXAMPLES000077700000000000000000000000001356460210500223702testsuite/systemtap.examplesustar00rootroot00000000000000systemtap-4.2/HACKING000066400000000000000000000201431356460210500144010ustar00rootroot00000000000000This text describes contribution procedures to systemtap. Please read and understand them before jumping in. Discussions take place on the mailing list. - general Submissions should be in an easy-to-read diff/patch form, unless this is inappropriate due to size, relevance, or fraction of novel content. They should be accompanied by an explanation. The relevant test suites should be run before and after your changes, and regressions avoided, explained, or corrected. Established contributors may be considered for direct GIT write access. Other contributors should simply pack up the goods into a plain text email message to the mailing list. It is not necessary to include machine-generated files like autoconf*, sample-script indexes, etc. in patches posted for review. - obvious changes Trivial, obvious patches may be posted or committed without other formalities. - copyright You must designate the appropriate copyright holder for your contribution. If not already there, this name should be added by your patch to the copyright header in the affected files. The copyright holder is assumed to agree with the general licensing terms (GPLv2+). - coding style Abide by the general formatting of the code you are modifying. The code base generally follows the GNU standards in usermode code and the Linux kernel standards in runtime code. - commit messages In the git commit message, make the first line a brief (<=50 char) summary of the patch, and leave the second line blank. If you have trouble coming up with a concise summary, consider whether your patch might be better broken into smaller commits. For trivial changes, the summary alone may be sufficient, but most commits should include a paragraph or two giving more details about what the change is and why it is needed. Extra information like bugzilla numbers and mailing-list discussion links are appreciated as a supplement, but they are not a replacement for a real description. - test suites As far as practicable, changes should be accompanied by test cases to prevent future regressions. Tests should be run on at least x86, and ideally also on some 64-bit platform. The test suite is located under /src/testsuite and is based on dejagnu. "make check" runs unprivileged tests only against an uninstalled build tree. "make installcheck" runs all tests against an installed tree. Tests that don't require probe execution should go into new or modified files under the *{ok,ko} directories, which are scanned by corresponding systemtap.pass1-4/*.exp files. The "ko" tests are for expected (deliberate) errors. Tests that execute probes (pass 5) should include their own .exp/.stp files under any other appropriate systemtap.* testsuite subdirectory. To run a particular test or set of tests, do: cd testsuite make check RUNTESTFLAGS=testname.exp or make installcheck RUNTESTFLAGS=testname.exp To disambiguate among multiple tests with the same name, specify the directory as well -- for example: make installcheck RUNTESTFLAGS=systemtap.base/print.exp - translator Translator changes can easily invalidate tapsets and user script code. One must tread carefully and run regression tests rigorously. Both positive and negative polarity (expect-pass / expect-fail) test cases may need to be written to assert a bug fix. Script language changes should be documented in the stap.1 man page and emphasized in the NEWS file. - tapsets Tapset script files should demonstrate effective economy, and avoid conflicts with user and other tapset code. It may be necessary to prefix symbols with the tapset name to ensure systemtap-wide uniqueness. All "external interfaces" expected to be used by user scripts (or perhaps other tapsets) should be documented -- either in stapprobes.3stap if they are built into the language or otherwise somehow essential; or in kernel-doc style comments if they are defined in a tapset (see almost any existing tapset for an example of how this is done); any new tapset should be mentioned in doc/SystemTap_Tapset_Reference/tapsets.tmpl. Major or incompatible changes should be mentioned in the NEWS file; see also the deprecation section below. Internal function, variable, probe identifiers should be prefixed with "_" for extra uniqueness, and not documented in the man pages. Tapsets should come with a tests cases that provide good test coverage. Every alias definition should be tested for pass-2 correctness. Every embedded-C routine should be tested for pass-4 buildability. As they are a security hazard, every tapset embedded-C routine should be pass-5 stress-tested for response to erroneous inputs. This applies doubly to /* unprivileged */ ones. The platforms/architectures against which the tapset was tested should be published, and ideally asserted by code. Embedded-C code should avoid making references to the runtime or other code possibly generated by the translator. Embedded-C code that dereferences pointers should use deref() type functions to check each individual operation if there exists a possibility that the function may be called with invalid pointers or pointer chains. - deprecation Try to remain compatible with existing valid scripts, with respect to changes in the script language or the tapset. Where this is not practicable, preserve the old functionality using the %( systemtap_v %) preprocessor conditional in the tapset and systemtap_session.compatible in the translator. If needed, after several major releases, deprecated functionality may be dropped outright. Note both pending and final deprecation in NEWS and the permanent DEPRECATION section in stap.1. The intent is to protect old scripts for a year or longer. Tapset functions to be deprecated should be kept for at least one major release. For example, if we're in development between versions 1.2 and 1.3, wrap to-be-deprecated tapset functions or probes in %( systemtap_v <= "1.3" %? function foo() {} %) so as to preserve the tapset function during the life of the 1.3 release. Script language changes that cause earlier valid scripts to become invalid should be opt-in (requiring --compatible=NEWVERSION) for at least one major release before becoming default. For example, test strverscmp(s.compatible.c_str(), "1.4") >= 0 in the 1.3 release sources in order to activate the change. - runtime Changes to the runtime can cause problems on different architectures or kernel versions. Luckily, many code mistakes show up easily in the pass-4 tests. - i18n We use the zanata [1] system for managing translations of runtime strings. If interested, create yourself a zanata account, and help translate online! In addition, you can ship systemtap sources to/from zanata by installing the zanata-cli and getting a $HOME/.config/zanata.ini file, thereafter following the advice [2][3] of "make update-po" (invoked from the top of the build tree). [1] https://translate.zanata.org/zanata/iteration/view/systemtap/master [2] http://zanata.org/help/cli/cli-push [3] http://zanata.org/help/cli/cli-pull - meta Proposed changes to these guidelines should be discussed on the mailing list. - git basics git clone ssh://sourceware.org/git/systemtap.git # OR: use git://sourceware.org/git/systemtap.git then add to .git/config: # [remote "origin"] # pushurl=ssh://sourceware.org/git/systemtap.git # build ; hack hack hack; test git add FILE1 FILE2 # enumerate all modified or new files git status # to confirm that needed local changes are "staged" git commit # to your local repository, add nice commit message git show # to check that the last commit included all changes git pull # to make sure your copy is up to date & merged # last minute rebuild; retest git rebase origin/master # clean git commit of merge history git diff origin/master # final visual check git push # to the central one, if you have access OR git format-patch -s origin/master.. then email the resulting files to the mailing list systemtap-4.2/INSTALL000066400000000000000000000224501356460210500144460ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 6. Often, you can also type `make uninstall' to remove the installed files again. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. systemtap-4.2/INTERNALS000066400000000000000000000135271356460210500147040ustar00rootroot00000000000000The Systemtap Translator - a tour on the inside Outline: - general principles - main data structures - pass 1: parsing - pass 2: semantic analysis (parts 1, 2, 3) - pass 3: translation (parts 1, 2) - pass 4: compilation - pass 5: run ------------------------------------------------------------------------ Translator general principles - written in standard C++ - mildly O-O, sparing use of C++ features - uses "visitor" concept for type-dependent (virtual) traversal ------------------------------------------------------------------------ Main data structures - abstract syntax tree - family of types and subtypes for language parts: expressions, literals, statements - includes outermost constructs: probes, aliases, functions - an instance of "stapfile" represents an entire script file - each annotated with a token (script source coordinates) - data persists throughout run - session - contains run-time parameters from command line - contains all globals - passed by reference to many functions ------------------------------------------------------------------------ Pass 1 - parsing - hand-written recursive-descent - language specified in man page - reads user-specified script file - also searches path for all <*.stp> files, parses them too - => syntax errors are caught immediately, throughout tapset - now includes baby preprocessor probe kernel. %( kernel_v == "2.6.9" %? inline("foo") %: function("bar") %) { } - enforces guru mode for embedded code %{ C %} ------------------------------------------------------------------------ Pass 2 - semantic analysis - step 1: resolve symbols - code in - want to know all global and per-probe/function local variables - one "vardecl" instance interned per variable - fills in "referent" field in AST for nodes that refer to it - collect "needed" probe/global/function list in session variable - loop over file queue, starting with user script "stapfile" - add to "needed" list this file's globals, functions, probes - resolve any symbols used in this file (function calls, variables) against "needed" list - if not resolved, search through all tapset "stapfile" instances; add to file queue if matched - if still not resolved, create as local scalar, or signal an error ------------------------------------------------------------------------ Pass 2 - semantic analysis - step 2: resolve types - fills in "type" field in AST - iterate along all probes and functions, until convergence - infer types of variables from usage context / operators: a = 5 # a is a pe_long b["foo",a]++ # b is a pe_long array with indexes pe_string and pe_long - loop until no further variable types can be inferred - signal error if any still unresolved ------------------------------------------------------------------------ Pass 2 - semantic analysis - step 3: resolve probes - probe points turned to "derived_probe" instances by code in - derived_probes know how to talk to kernel API for registration/callbacks - aliases get expanded at this point - some probe points ("begin", "end", "timer*") are very simple - dwarf ("kernel*", "module*") implementation very complicated - target-variables "$foo" expanded to getter/setter functions with synthesized embedded-C ------------------------------------------------------------------------ Pass 3 - translation - step 1: data - - we now know all types, all variables - strings are everywhere copied by value (MAXSTRINGLEN bytes) - emit data storage mega-struct "context" for all probes/functions - array instantiated per-CPU, per-nesting-level - can be pretty big static data ------------------------------------------------------------------------ Pass 3 - translation - step 2: code - map script functions to C functions taking a context pointer - map probes to two C functions: - one to interface with the probe point infrastructure (kprobes, kernel timer): reserves per-cpu context - one to implement probe body, just like a script function - emit global startup/shutdown routine to manage orderly registration/deregistration of probes - expressions/statements emitted in "natural" evaluation sequence - emit code to enforce activity-count limits, simple safety tests - global variables protected by locks global k function foo () { k ++ } # write lock around increment probe bar { if (k>5) ... } # read lock around read - same thing for arrays, except foreach/sort take longer-duration locks ------------------------------------------------------------------------ Pass 4 - compilation - - write out C code in a temporary directory - call into kbuild makefile to build module ------------------------------------------------------------------------ Pass 5 - running - run "staprun" - clean up temporary directory - nothing to it! ------------------------------------------------------------------------ Peculiarities - We tend to use visitor idioms for polymorphic traversals of parse trees, in preference to dynamic_cast<> et al. The former is a little more future-proof and harder to break accidentally. {reinterpret,static}_cast<> should definitely be avoided. - We use our interned_string type (a derivative of boost::string_ref) to use shareable references to strings that may be used in duplicate many times. It can slide in for std::string most of the time. It can save RAM and maybe even CPU, if used judiciously: such as for frequently duplicated strings, duplicated strings, duplicated strings, duplicated. OTOH, it costs CPU (for management of the interned string set, or if copied between std::string and interned_string unnecessarily), and RAM (2 pointers when empty, vs. 1 for std::string), and its instances are not modifiable, so tradeoffs must be confirmed with tools like memusage, massif, perf-stat, etc. systemtap-4.2/Makefile.am000066400000000000000000000404261356460210500154540ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap ## process this file with automake to produce Makefile.in # we don't maintain a ChangeLog, which makes us non-GNU -> foreign AUTOMAKE_OPTIONS = no-dist foreign pkglibexecdir = ${libexecdir}/${PACKAGE} oldincludedir = ${includedir}/sys AM_CPPFLAGS = -DBINDIR='"$(bindir)"' \ -DSYSCONFDIR='"$(sysconfdir)"' \ -DPKGDATADIR='"$(pkgdatadir)"' \ -DPKGLIBDIR='"$(pkglibexecdir)"' \ -DLOCALEDIR='"$(localedir)"' \ -DDOCDIR='"$(docdir)"' \ -DPYEXECDIR='"$(pyexecdir)"' \ -DPY3EXECDIR='"$(py3execdir)"' \ -I$(srcdir)/includes -I$(builddir)/includes/sys AM_CFLAGS = -D_GNU_SOURCE -fexceptions -Wall -Wextra -Werror -Wunused -Wformat=2 -W AM_CXXFLAGS = -Wall -Wextra -Werror bin_SCRIPTS = stap-report pkglibexec_SCRIPTS = stap-env oldinclude_HEADERS = includes/sys/sdt.h includes/sys/sdt-config.h bin_PROGRAMS = if BUILD_TRANSLATOR bin_PROGRAMS += stap bin_SCRIPTS += dtrace pkglibexec_PROGRAMS = if HAVE_NSS pkglibexec_PROGRAMS += stap-sign-module stap-authorize-cert if BUILD_SERVER pkglibexec_PROGRAMS += stap-serverd stap-gen-cert bin_SCRIPTS += stap-server pkglibexec_SCRIPTS += stap-start-server stap-stop-server endif endif stap_SOURCES = main.cxx session.cxx \ parse.cxx staptree.cxx elaborate.cxx translate.cxx \ tapsets.cxx buildrun.cxx loc2stap.cxx hash.cxx mdfour.c \ cache.cxx util.cxx coveragedb.cxx dwarf_wrappers.cxx \ tapset-been.cxx tapset-procfs.cxx tapset-timers.cxx tapset-netfilter.cxx \ tapset-perfmon.cxx tapset-mark.cxx tapset-itrace.cxx \ tapset-utrace.cxx task_finder.cxx dwflpp.cxx rpm_finder.cxx \ setupdwfl.cxx remote.cxx privilege.cxx cmdline.cxx \ tapset-dynprobe.cxx tapset-method.cxx translator-output.cxx \ stapregex.cxx stapregex-tree.cxx stapregex-parse.cxx \ stapregex-dfa.cxx stringtable.cxx tapset-python.cxx noinst_HEADERS = sdt_types.h stap_LDADD = @stap_LIBS@ @sqlite3_LIBS@ @LIBINTL@ -lpthread stap_DEPENDENCIES = if HAVE_LIBREADLINE stap_SOURCES += interactive.cxx stap_LDADD += @READLINE_LIBS@ endif if HAVE_BPF_DECLS stap_SOURCES += bpf-base.cxx bpf-bitset.cxx bpf-translate.cxx bpf-opt.cxx endif if BUILD_VIRT bin_PROGRAMS += stapvirt stapvirt_SOURCES = stapvirt.c stapvirt_CFLAGS = $(AM_CFLAGS) stapvirt_CFLAGS += $(libvirt_CFLAGS) $(libxml2_CFLAGS) stapvirt_LDFLAGS = $(AM_LDFLAGS) stapvirt_LDADD = $(libvirt_LIBS) $(libxml2_LIBS) endif endif all: macros.systemtap macros.systemtap: $(srcdir)/macros.systemtap.in sed -e "s#@pkgdatadir@#$(pkgdatadir)#g" < $< > $@ install: all $(MAKE) $(AM_MAKEFLAGS) install-recursive BUILT_SOURCES = CLEANFILES = # Arrange for git_version.h to be regenerated at every "make". # Code fragment is based upon RadeonHD.am. # The stamp file which is never created ensures that git_version.h is updated # before every build. Having git_version.h in foo_SOURCES ensures a recompile # of foo-bar.c if it is newer than the foo-bar.o file. Using noinst_foo_SOURCES # instead of foo_SOURCES prevents shipping git_version.h in dist tarballs, # which may cause false GIT_FOO readings. BUILT_SOURCES += git_version.stamp CLEANFILES += git_version.h GIT_VERSION_CMD = $(SHELL) $(top_srcdir)/git_version.sh git_version.stamp: @if test -f "$(srcdir)/git_version.h"; then \ if test -f "git_version.h"; then :; \ else \ cp "$(srcdir)/git_version.h" "git_version.h"; \ fi; \ fi $(GIT_VERSION_CMD) -k -s $(top_srcdir) -o git_version.h @if test -s "$(srcdir)/git_version.h"; then \ if cmp "$(srcdir)/git_version.h" "git_version.h"; then :; \ else \ echo "Error: $(srcdir)/git_version.h and git_version.h differ."; \ echo " You probably want to remove the former."; \ exit 1; \ fi; \ fi git_version.h: $(srcdir)/git_version.sh -k --srcdir $(srcdir) -o git_version.h cscope: cd $(srcdir) && \ (echo -q ; git ls-files '*.cxx' '*.c' '*.h' | grep -v '^testsuite' ) > cscope.files && \ cscope -b -q @DYNINST_CXXFLAGS@ PHONIES = if BUILD_TRANSLATOR stap_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ stap_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ stap_CPPFLAGS = $(AM_CPPFLAGS) -DSTAP_SDT_V2 stap_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ if HAVE_AVAHI stap_CXXFLAGS += $(avahi_CFLAGS) stap_CPPFLAGS += $(avahi_CFLAGS) stap_LDADD += $(avahi_LIBS) endif if NEED_BASE_CLIENT_CODE stap_SOURCES += csclient.cxx endif if HAVE_NSS stap_SOURCES += nsscommon.cxx client-nss.cxx cscommon.cxx nss-server-info.cxx stap_CFLAGS += $(nss_CFLAGS) -DSTAP stap_CXXFLAGS += $(nss_CFLAGS) stap_CPPFLAGS += $(nss_CFLAGS) stap_LDADD += $(nss_LIBS) install-exec-local: install-scripts PHONIES += install-scripts # scripts must be installed before this rule is run install-scripts: install-binSCRIPTS install-pkglibexecSCRIPTS for f in $(bin_SCRIPTS); do \ sed -i -e "s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(bindir)/$$f; \ done for f in $(pkglibexec_SCRIPTS); do \ sed -i -e "/INSTALL-HOOK/d;s,sysconfdir=.*,sysconfdir=$(sysconfdir),;s,pkglibexecdir=.*,pkglibexecdir=$(pkglibexecdir)/,;s,localstatedir=.*,localstatedir=$(localstatedir),;s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(pkglibexecdir)/$$f; \ done endif if HAVE_HTTP_SUPPORT stap_SOURCES += client-http.cxx stap_LDADD += $(libcurl_LIBS) $(jsonc_LIBS) $(openssl_LIBS) endif if BUILD_ELFUTILS stap_CPPFLAGS += -Iinclude-elfutils stap_LDFLAGS += -Llib-elfutils -Wl,-rpath-link,lib-elfutils \ -Wl,--enable-new-dtags,-rpath,$(pkglibdir) BUILT_SOURCES += stamp-elfutils CLEANFILES += stamp-elfutils stamp-elfutils: config.status $(MAKE) $(AM_MAKEFLAGS) -C build-elfutils all bin_PROGRAMS= for dir in libelf libebl libdw libdwfl libdwelf backends; do \ $(MAKE) $(AM_MAKEFLAGS) -j1 -C build-elfutils/$$dir bin_PROGRAMS= install; \ done $(MAKE) $(AM_MAKEFLAGS) -j1 -C build-elfutils install-pkgincludeHEADERS; touch $@ stap_DEPENDENCIES += lib-elfutils/libdw.so lib-elfutils/libdw.so: stamp-elfutils ; PHONIES += install-elfutils install-elfutils: mkdir -p $(DESTDIR)$(pkglibdir) for file in lib-elfutils/*.so* lib-elfutils/${PACKAGE_NAME}/*.so*; do \ $(INSTALL_PROGRAM) $$file $(DESTDIR)$(pkglibdir); \ done install-exec-local: install-elfutils endif endif CLEANFILES += $(pkglibexec_PROGRAMS) if BUILD_TRANSLATOR if HAVE_NSS stap_sign_module_SOURCES = stap-sign-module.cxx nsscommon.cxx util.cxx stap_sign_module_CPPFLAGS = $(AM_CPPFLAGS) stap_sign_module_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_sign_module_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) stap_sign_module_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_sign_module_LDADD = $(nss_LIBS) if HAVE_HTTP_SUPPORT stap_sign_module_LDADD += $(openssl_LIBS) endif stap_authorize_cert_SOURCES = stap-authorize-cert.cxx nsscommon.cxx util.cxx stap_authorize_cert_CPPFLAGS = $(AM_CPPFLAGS) stap_authorize_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_authorize_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) stap_authorize_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_authorize_cert_LDADD = $(nss_LIBS) if HAVE_HTTP_SUPPORT stap_authorize_cert_LDADD += $(openssl_LIBS) endif if BUILD_SERVER stap_serverd_SOURCES = stap-serverd.cxx cscommon.cxx util.cxx privilege.cxx nsscommon.cxx cmdline.cxx stap_serverd_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_serverd_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) stap_serverd_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_serverd_LDADD = $(nss_LIBS) -lpthread if HAVE_AVAHI stap_serverd_CFLAGS += $(avahi_CFLAGS) stap_serverd_CXXFLAGS += $(avahi_CFLAGS) stap_serverd_LDADD += $(avahi_LIBS) endif if HAVE_HTTP_SUPPORT stap_serverd_LDADD += $(openssl_LIBS) endif stap_gen_cert_SOURCES = stap-gen-cert.cxx util.cxx nsscommon.cxx stap_gen_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_gen_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) stap_gen_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_gen_cert_LDADD = $(nss_LIBS) if HAVE_HTTP_SUPPORT stap_gen_cert_LDADD += $(openssl_LIBS) endif endif endif endif # crash(8) extension if BUILD_CRASHMOD STAPLOG=staplog.so $(STAPLOG): staplog.c $(CC) $(staplog_CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -shared -rdynamic \ $(AM_LDFLAGS) $(LDFLAGS) -fPIC -o $@ $< all-local: $(STAPLOG) example_index install-exec-local: $(STAPLOG) $(MKDIR_P) $(DESTDIR)$(pkglibdir) $(INSTALL) $(STAPLOG) $(DESTDIR)$(pkglibdir) else all-local: example_index endif # Get extra libs as needed LDADD = EXAMPLE_SOURCE_DIR = $(srcdir)/testsuite/systemtap.examples EXAMPLE_META_FILES = $(EXAMPLE_SOURCE_DIR)/*/*.meta example_index: $(EXAMPLE_SOURCE_DIR)/index.html $(EXAMPLE_SOURCE_DIR)/index.html: $(EXAMPLE_META_FILES) $(EXAMPLE_INDEX_GEN) @echo "The script example index is outdated, run" @echo " cd $(EXAMPLE_SOURCE_DIR) && \\ " @echo " perl examples-index-gen.pl" @echo "to regenerate it." install-data-local: (cd $(srcdir)/runtime; for f in *.[ch]; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/$$f; done) if HAVE_DYNINST (cd $(srcdir)/runtime/dyninst; find . \( -name '*.[ch]' \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/dyninst/$$f; done) endif (cd $(srcdir)/runtime/unwind; find . \( -name '*.[ch]' \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/unwind/$$f; done) (cd $(srcdir)/runtime/transport; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/transport/$$f; done) (cd $(srcdir)/runtime/linux; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/$$f; done) (cd $(srcdir)/runtime/linux/uprobes; for f in Makefile *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes/$$f; done) (cd $(srcdir)/runtime/linux/uprobes2; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes2/$$f; done) (cd $(srcdir)/tapset; find . \( -name '*.stp' -o -name '*.stpm' -o -name README \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/tapset/$$f; done) (cd $(srcdir)/testsuite/systemtap.examples; find . -type f -print \ | egrep -v 'check.exp|ChangeLog|examples-index-gen.pl|html/.*\.tmpl|metadatabase.dbq$$' \ | while read f; do if test -x $$f; then \ i_cmd="$(INSTALL_PROGRAM)"; else \ i_cmd="$(INSTALL_DATA)"; fi; \ $$i_cmd -D $$f $(DESTDIR)$(pkgdatadir)/examples/$$f; done) test -e $(DESTDIR)$(sysconfdir)/systemtap || mkdir -p $(DESTDIR)$(sysconfdir)/systemtap if BUILD_SERVER test -e $(DESTDIR)$(localstatedir)/run/stap-server || mkdir -p $(DESTDIR)$(localstatedir)/run/stap-server test -e $(DESTDIR)$(localstatedir)/log || mkdir -p $(DESTDIR)$(localstatedir)/log endif TEST_COV_DIR = coverage gcov: find . -name '*.gc*' | xargs rm -f $(MAKE) clean CXXFLAGS="-g -fprofile-arcs -ftest-coverage" CFLAGS="-g -fprofile-arcs -ftest-coverage" all install -sudo $(MAKE) installcheck $${RUNTESTFLAGS+RUNTESTFLAGS=$${RUNTESTFLAGS}} for dir in $(SUBDIRS); do \ (cd $$dir; gcov *.gcno > SUMMARY.gcov 2>&1 || true); \ done find . -name '*.gcov' clean-local: rm -rf ${PACKAGE_TARNAME}-*.tar.gz rm -rf ${PACKAGE_TARNAME}-${PACKAGE_VERSION} rm -rf $(TEST_COV_DIR) rm -rf stap.info rm -rf staplog.so distclean-local: rm -rf build-elfutils include-elfutils lib-elfutils rm -f doc/beginners/en-US doc/beginners/build/en-US/testsuite uninstall-local: rm -rf $(DESTDIR)$(pkgdatadir) rm -rf $(DESTDIR)$(libdir)/$(PACKAGE) -rm -rf $(DESTDIR)$(localstatedir)/cache/$(PACKAGE) @list='$(EXAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(EXAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(EXAMPLE_INSTALL_DIR)/$$p"; \ done @list='$(DEMO_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(DEMO_INSTALL_DIR)/$$p'"; \ rm -f "$(DEMO_INSTALL_DIR)/$$p"; \ done @list='$(SAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(SAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(SAMPLE_INSTALL_DIR)/$$p"; \ done rm -rf $(DESTDIR)$(sysconfdir)/systemtap rm -rf $(DESTDIR)$(docdir)/examples if BUILD_SERVER rm -rf $(DESTDIR)$(localstatedir)/run/stap-server rm -f $(DESTDIR)$(localstatedir)/log/stap-server/log endif SUBDIRS = . java python stapdyn staprun stapbpf doc man po httpd stap-exporter # NB: the gcov target above uses this to enumarate linked binaries' build directories DIST_SUBDIRS = testsuite $(SUBDIRS) EXTRA_DIST = m4/ChangeLog check-local: SRCDIR=`cd $(srcdir); pwd`; \ PWD=`pwd`; \ $(MAKE) -C testsuite check SYSTEMTAP_RUNTIME=$$SRCDIR/runtime SYSTEMTAP_TAPSET=$$SRCDIR/tapset LD_LIBRARY_PATH=$$LD_LIBRARY_PATH$${LD_LIBRARY_PATH:+:}$$PWD/lib-elfutils:$$PWD/lib-elfutils/systemtap SYSTEMTAP_PATH=$$PWD SYSTEMTAP_INCLUDES=$$PWD/includes RUNTESTFLAGS="$(RUNTESTFLAGS)" PKGLIBDIR="$(pkglibexecdir)"; installcheck: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" installcheck-parallel: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck-parallel RUNTESTFLAGS="$(RUNTESTFLAGS)" list-unfinished: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite list-unfinished RUNTESTFLAGS="$(RUNTESTFLAGS)" PHONIES += runcheck # All the variables are overridden by run-stap, but SYSTEMTAP_RUNTIME # is used by the testsuite scripts themselves. runcheck: testsuite/stap testsuite/dtrace $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" \ SYSTEMTAP_PATH="`cd testsuite; pwd`" \ SYSTEMTAP_RUNTIME="`cd $(srcdir)/runtime; pwd`" testsuite/stap: run-stap (echo '#!/bin/sh'; echo "exec `pwd`/run-stap" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ testsuite/dtrace: dtrace (echo '#!/bin/sh'; echo "exec `pwd`/dtrace" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ PHONIES += update-po update-po: (cd $(srcdir); ls -1d *.c *.cxx *.h staprun/*.c staprun/*.h) \ | grep -v loc2c-test.c \ | grep -v config.h \ | grep -v git_version.h \ | grep -v staprun/config.h \ | sort > $(srcdir)/po/POTFILES.in $(MAKE) -C po update-po @echo @echo if systemtam.pot is shown as modified ... @echo (cd $(srcdir)/po; git status *.pot) @echo @echo ... then check in with zanata ... @echo @echo % cd $(srcdir) @echo % zanata-cli -B push -s po -t po @echo % zanata-cli -B pull -s po -t po @echo @echo if the .po files are shown as modified ... @echo (cd $(srcdir)/po; git status *.po) @echo @echo ... regenerate just once ... @echo @echo % $(MAKE) -C `pwd` update-po # Any extra flags, such as: # --define "with_docs 0" # --define "with_bundled_elfutils 1" --define "elfutils_version 0.135" RPMBUILDFLAGS= PHONIES += dist-gzip rpm srpm PHONIES += uprobes install-uprobes uprobes: $(MAKE) -C $(srcdir)/runtime/uprobes clean default install-uprobes: $(MAKE) -C $(DESTDIR)$(pkgdatadir)/runtime/uprobes clean default .PHONY: $(PHONIES) dist-gzip: cd $(srcdir); git status | grep working.directory.clean || (echo "You should commit your changes before 'make rpm'.") (cd $(srcdir); git archive --prefix=systemtap-$(VERSION)/ --format=tar HEAD) | gzip > systemtap-$(VERSION).tar.gz rpm: dist-gzip if [ `id -u` = 0 ]; then echo NOTE: do not run this as root; exit 1; fi if [ ! -w `rpm --eval %_topdir` ]; then \ echo WARNING: you do not have access to `rpm --eval %_topdir`; \ echo WARNING: you may receive a permission denied error; \ echo WARNING: consider adding \'%_topdir $(HOME)/rpmbuild\' to $(HOME)/.rpmmacros; \ fi mkdir -p `rpm --eval %_specdir` mkdir -p `rpm --eval %_srcrpmdir` mkdir -p `rpm --eval %_rpmdir` mkdir -p `rpm --eval %_builddir` mkdir -p `rpm --eval %_buildroot` rpmbuild --define "_sourcedir $(PWD)/" --define "release_override .`date +%Y%m%d%H%M`" -ta systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) srpm: dist-gzip mkdir -p `rpm --eval %_srcrpmdir` rpmbuild --define "_sourcedir $(PWD)/" -ts systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) ACLOCAL_AMFLAGS = -I m4 systemtap-4.2/Makefile.in000066400000000000000000006242341356460210500154720ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) @BUILD_TRANSLATOR_TRUE@am__append_1 = stap @BUILD_TRANSLATOR_TRUE@am__append_2 = dtrace @BUILD_TRANSLATOR_TRUE@pkglibexec_PROGRAMS = $(am__EXEEXT_3) \ @BUILD_TRANSLATOR_TRUE@ $(am__EXEEXT_4) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_3 = stap-sign-module stap-authorize-cert @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_4 = stap-serverd stap-gen-cert @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_5 = stap-server @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_6 = stap-start-server stap-stop-server @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__append_7 = interactive.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__append_8 = @READLINE_LIBS@ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@am__append_9 = bpf-base.cxx bpf-bitset.cxx bpf-translate.cxx bpf-opt.cxx @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@am__append_10 = stapvirt @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_11 = $(avahi_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_12 = $(avahi_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_13 = $(avahi_LIBS) @BUILD_TRANSLATOR_TRUE@@NEED_BASE_CLIENT_CODE_TRUE@am__append_14 = csclient.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_15 = nsscommon.cxx client-nss.cxx cscommon.cxx nss-server-info.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_16 = $(nss_CFLAGS) -DSTAP @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_17 = $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_18 = $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_19 = $(nss_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_20 = install-scripts @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__append_21 = client-http.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__append_22 = $(libcurl_LIBS) $(jsonc_LIBS) $(openssl_LIBS) @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@am__append_23 = -Iinclude-elfutils @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@am__append_24 = -Llib-elfutils -Wl,-rpath-link,lib-elfutils \ @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ -Wl,--enable-new-dtags,-rpath,$(pkglibdir) @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@am__append_25 = stamp-elfutils @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@am__append_26 = stamp-elfutils @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@am__append_27 = lib-elfutils/libdw.so @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@am__append_28 = install-elfutils @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_29 = $(openssl_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_30 = $(openssl_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_31 = $(avahi_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_32 = $(avahi_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_33 = $(avahi_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_34 = $(openssl_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_35 = $(openssl_LIBS) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__noinst_HEADERS_DIST) \ $(oldinclude_HEADERS) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = includes/sys/sdt-config.h \ initscript/config.systemtap initscript/config.stap-server \ initscript/systemtap initscript/stap-server \ initscript/99stap/module-setup.sh initscript/99stap/install \ initscript/99stap/check run-stap dtrace staprun/guest/stapshd \ staprun/guest/stapsh-daemon staprun/guest/stapsh@.service CONFIG_CLEAN_VPATH_FILES = @BUILD_TRANSLATOR_TRUE@am__EXEEXT_1 = stap$(EXEEXT) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@am__EXEEXT_2 = \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ stapvirt$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" \ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" \ "$(DESTDIR)$(oldincludedir)" @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__EXEEXT_3 = stap-sign-module$(EXEEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-authorize-cert$(EXEEXT) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__EXEEXT_4 = stap-serverd$(EXEEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-gen-cert$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(pkglibexec_PROGRAMS) @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__objects_1 = stap-interactive.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@am__objects_2 = stap-bpf-base.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@ stap-bpf-bitset.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@ stap-bpf-translate.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@ stap-bpf-opt.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@NEED_BASE_CLIENT_CODE_TRUE@am__objects_3 = stap-csclient.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__objects_4 = stap-nsscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-client-nss.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-cscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-nss-server-info.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__objects_5 = stap-client-http.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@am_stap_OBJECTS = stap-main.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-session.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-parse.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-staptree.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-elaborate.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-translate.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapsets.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-buildrun.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-loc2stap.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-hash.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-mdfour.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-cache.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-util.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-coveragedb.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-dwarf_wrappers.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-been.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-procfs.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-timers.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-netfilter.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-perfmon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-mark.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-itrace.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-utrace.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-task_finder.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-dwflpp.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-rpm_finder.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-setupdwfl.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-remote.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-privilege.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-cmdline.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-dynprobe.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-method.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-translator-output.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex-tree.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex-parse.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex-dfa.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stringtable.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-python.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ $(am__objects_1) $(am__objects_2) \ @BUILD_TRANSLATOR_TRUE@ $(am__objects_3) $(am__objects_4) \ @BUILD_TRANSLATOR_TRUE@ $(am__objects_5) stap_OBJECTS = $(am_stap_OBJECTS) am__DEPENDENCIES_1 = @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__DEPENDENCIES_2 = \ @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@ $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_3 = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) stap_LINK = $(CXXLD) $(stap_CXXFLAGS) $(CXXFLAGS) $(stap_LDFLAGS) \ $(LDFLAGS) -o $@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_authorize_cert_OBJECTS = stap_authorize_cert-stap-authorize-cert.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_authorize_cert-nsscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_authorize_cert-util.$(OBJEXT) stap_authorize_cert_OBJECTS = $(am_stap_authorize_cert_OBJECTS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_DEPENDENCIES = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_5) stap_authorize_cert_LINK = $(CXXLD) $(stap_authorize_cert_CXXFLAGS) \ $(CXXFLAGS) $(stap_authorize_cert_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_gen_cert_OBJECTS = stap_gen_cert-stap-gen-cert.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_gen_cert-util.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_gen_cert-nsscommon.$(OBJEXT) stap_gen_cert_OBJECTS = $(am_stap_gen_cert_OBJECTS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_6) stap_gen_cert_LINK = $(CXXLD) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) \ $(stap_gen_cert_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_serverd_OBJECTS = stap_serverd-stap-serverd.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-cscommon.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-util.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-privilege.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-nsscommon.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-cmdline.$(OBJEXT) stap_serverd_OBJECTS = $(am_stap_serverd_OBJECTS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_7) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_6) stap_serverd_LINK = $(CXXLD) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) \ $(stap_serverd_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_sign_module_OBJECTS = stap_sign_module-stap-sign-module.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_sign_module-nsscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_sign_module-util.$(OBJEXT) stap_sign_module_OBJECTS = $(am_stap_sign_module_OBJECTS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_DEPENDENCIES = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_5) stap_sign_module_LINK = $(CXXLD) $(stap_sign_module_CXXFLAGS) \ $(CXXFLAGS) $(stap_sign_module_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@am_stapvirt_OBJECTS = stapvirt-stapvirt.$(OBJEXT) stapvirt_OBJECTS = $(am_stapvirt_OBJECTS) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_DEPENDENCIES = \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(am__DEPENDENCIES_1) stapvirt_LINK = $(CCLD) $(stapvirt_CFLAGS) $(CFLAGS) \ $(stapvirt_LDFLAGS) $(LDFLAGS) -o $@ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(bin_SCRIPTS) $(pkglibexec_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/stap-bpf-base.Po \ ./$(DEPDIR)/stap-bpf-bitset.Po ./$(DEPDIR)/stap-bpf-opt.Po \ ./$(DEPDIR)/stap-bpf-translate.Po ./$(DEPDIR)/stap-buildrun.Po \ ./$(DEPDIR)/stap-cache.Po ./$(DEPDIR)/stap-client-http.Po \ ./$(DEPDIR)/stap-client-nss.Po ./$(DEPDIR)/stap-cmdline.Po \ ./$(DEPDIR)/stap-coveragedb.Po ./$(DEPDIR)/stap-csclient.Po \ ./$(DEPDIR)/stap-cscommon.Po \ ./$(DEPDIR)/stap-dwarf_wrappers.Po ./$(DEPDIR)/stap-dwflpp.Po \ ./$(DEPDIR)/stap-elaborate.Po ./$(DEPDIR)/stap-hash.Po \ ./$(DEPDIR)/stap-interactive.Po ./$(DEPDIR)/stap-loc2stap.Po \ ./$(DEPDIR)/stap-main.Po ./$(DEPDIR)/stap-mdfour.Po \ ./$(DEPDIR)/stap-nss-server-info.Po \ ./$(DEPDIR)/stap-nsscommon.Po ./$(DEPDIR)/stap-parse.Po \ ./$(DEPDIR)/stap-privilege.Po ./$(DEPDIR)/stap-remote.Po \ ./$(DEPDIR)/stap-rpm_finder.Po ./$(DEPDIR)/stap-session.Po \ ./$(DEPDIR)/stap-setupdwfl.Po \ ./$(DEPDIR)/stap-stapregex-dfa.Po \ ./$(DEPDIR)/stap-stapregex-parse.Po \ ./$(DEPDIR)/stap-stapregex-tree.Po \ ./$(DEPDIR)/stap-stapregex.Po ./$(DEPDIR)/stap-staptree.Po \ ./$(DEPDIR)/stap-stringtable.Po \ ./$(DEPDIR)/stap-tapset-been.Po \ ./$(DEPDIR)/stap-tapset-dynprobe.Po \ ./$(DEPDIR)/stap-tapset-itrace.Po \ ./$(DEPDIR)/stap-tapset-mark.Po \ ./$(DEPDIR)/stap-tapset-method.Po \ ./$(DEPDIR)/stap-tapset-netfilter.Po \ ./$(DEPDIR)/stap-tapset-perfmon.Po \ ./$(DEPDIR)/stap-tapset-procfs.Po \ ./$(DEPDIR)/stap-tapset-python.Po \ ./$(DEPDIR)/stap-tapset-timers.Po \ ./$(DEPDIR)/stap-tapset-utrace.Po ./$(DEPDIR)/stap-tapsets.Po \ ./$(DEPDIR)/stap-task_finder.Po ./$(DEPDIR)/stap-translate.Po \ ./$(DEPDIR)/stap-translator-output.Po ./$(DEPDIR)/stap-util.Po \ ./$(DEPDIR)/stap_authorize_cert-nsscommon.Po \ ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po \ ./$(DEPDIR)/stap_authorize_cert-util.Po \ ./$(DEPDIR)/stap_gen_cert-nsscommon.Po \ ./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po \ ./$(DEPDIR)/stap_gen_cert-util.Po \ ./$(DEPDIR)/stap_serverd-cmdline.Po \ ./$(DEPDIR)/stap_serverd-cscommon.Po \ ./$(DEPDIR)/stap_serverd-nsscommon.Po \ ./$(DEPDIR)/stap_serverd-privilege.Po \ ./$(DEPDIR)/stap_serverd-stap-serverd.Po \ ./$(DEPDIR)/stap_serverd-util.Po \ ./$(DEPDIR)/stap_sign_module-nsscommon.Po \ ./$(DEPDIR)/stap_sign_module-stap-sign-module.Po \ ./$(DEPDIR)/stap_sign_module-util.Po \ ./$(DEPDIR)/stapvirt-stapvirt.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(stap_SOURCES) $(stap_authorize_cert_SOURCES) \ $(stap_gen_cert_SOURCES) $(stap_serverd_SOURCES) \ $(stap_sign_module_SOURCES) $(stapvirt_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__noinst_HEADERS_DIST = sdt_types.h HEADERS = $(noinst_HEADERS) $(oldinclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope pkglibexecdir = ${libexecdir}/${PACKAGE} ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ elfutils_abs_srcdir = @elfutils_abs_srcdir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = ${includedir}/sys openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ # we don't maintain a ChangeLog, which makes us non-GNU -> foreign AUTOMAKE_OPTIONS = no-dist foreign AM_CPPFLAGS = -DBINDIR='"$(bindir)"' \ -DSYSCONFDIR='"$(sysconfdir)"' \ -DPKGDATADIR='"$(pkgdatadir)"' \ -DPKGLIBDIR='"$(pkglibexecdir)"' \ -DLOCALEDIR='"$(localedir)"' \ -DDOCDIR='"$(docdir)"' \ -DPYEXECDIR='"$(pyexecdir)"' \ -DPY3EXECDIR='"$(py3execdir)"' \ -I$(srcdir)/includes -I$(builddir)/includes/sys AM_CFLAGS = -D_GNU_SOURCE -fexceptions -Wall -Wextra -Werror -Wunused -Wformat=2 -W AM_CXXFLAGS = -Wall -Wextra -Werror bin_SCRIPTS = stap-report $(am__append_2) $(am__append_5) pkglibexec_SCRIPTS = stap-env $(am__append_6) oldinclude_HEADERS = includes/sys/sdt.h includes/sys/sdt-config.h @BUILD_TRANSLATOR_TRUE@stap_SOURCES = main.cxx session.cxx parse.cxx \ @BUILD_TRANSLATOR_TRUE@ staptree.cxx elaborate.cxx \ @BUILD_TRANSLATOR_TRUE@ translate.cxx tapsets.cxx buildrun.cxx \ @BUILD_TRANSLATOR_TRUE@ loc2stap.cxx hash.cxx mdfour.c \ @BUILD_TRANSLATOR_TRUE@ cache.cxx util.cxx coveragedb.cxx \ @BUILD_TRANSLATOR_TRUE@ dwarf_wrappers.cxx tapset-been.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-procfs.cxx tapset-timers.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-netfilter.cxx tapset-perfmon.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-mark.cxx tapset-itrace.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-utrace.cxx task_finder.cxx \ @BUILD_TRANSLATOR_TRUE@ dwflpp.cxx rpm_finder.cxx setupdwfl.cxx \ @BUILD_TRANSLATOR_TRUE@ remote.cxx privilege.cxx cmdline.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-dynprobe.cxx tapset-method.cxx \ @BUILD_TRANSLATOR_TRUE@ translator-output.cxx stapregex.cxx \ @BUILD_TRANSLATOR_TRUE@ stapregex-tree.cxx stapregex-parse.cxx \ @BUILD_TRANSLATOR_TRUE@ stapregex-dfa.cxx stringtable.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-python.cxx $(am__append_7) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_9) $(am__append_14) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_15) $(am__append_21) @BUILD_TRANSLATOR_TRUE@noinst_HEADERS = sdt_types.h @BUILD_TRANSLATOR_TRUE@stap_LDADD = @stap_LIBS@ @sqlite3_LIBS@ \ @BUILD_TRANSLATOR_TRUE@ @LIBINTL@ -lpthread $(am__append_8) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_13) $(am__append_19) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_22) @BUILD_TRANSLATOR_TRUE@stap_DEPENDENCIES = $(am__append_27) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_SOURCES = stapvirt.c @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_CFLAGS = \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(AM_CFLAGS) \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(libvirt_CFLAGS) \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(libxml2_CFLAGS) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_LDFLAGS = $(AM_LDFLAGS) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_LDADD = $(libvirt_LIBS) $(libxml2_LIBS) # Arrange for git_version.h to be regenerated at every "make". # Code fragment is based upon RadeonHD.am. # The stamp file which is never created ensures that git_version.h is updated # before every build. Having git_version.h in foo_SOURCES ensures a recompile # of foo-bar.c if it is newer than the foo-bar.o file. Using noinst_foo_SOURCES # instead of foo_SOURCES prevents shipping git_version.h in dist tarballs, # which may cause false GIT_FOO readings. BUILT_SOURCES = git_version.stamp $(am__append_25) CLEANFILES = git_version.h $(am__append_26) $(pkglibexec_PROGRAMS) GIT_VERSION_CMD = $(SHELL) $(top_srcdir)/git_version.sh PHONIES = $(am__append_20) $(am__append_28) runcheck update-po \ dist-gzip rpm srpm uprobes install-uprobes @BUILD_TRANSLATOR_TRUE@stap_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_16) @BUILD_TRANSLATOR_TRUE@stap_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_11) $(am__append_17) @BUILD_TRANSLATOR_TRUE@stap_CPPFLAGS = $(AM_CPPFLAGS) -DSTAP_SDT_V2 \ @BUILD_TRANSLATOR_TRUE@ $(am__append_12) $(am__append_18) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_23) @BUILD_TRANSLATOR_TRUE@stap_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_24) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_SOURCES = stap-sign-module.cxx nsscommon.cxx util.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_CPPFLAGS = $(AM_CPPFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_LDADD = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_LIBS) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_29) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_SOURCES = stap-authorize-cert.cxx nsscommon.cxx util.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_CPPFLAGS = $(AM_CPPFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_LDADD = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_LIBS) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_30) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_SOURCES = stap-serverd.cxx cscommon.cxx util.cxx privilege.cxx nsscommon.cxx cmdline.cxx @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_CXXFLAGS = $(AM_CXXFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ @PIECXXFLAGS@ \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_32) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_CFLAGS = $(AM_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ @PIECFLAGS@ \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_31) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_LDADD = $(nss_LIBS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ -lpthread \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_33) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_34) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_SOURCES = stap-gen-cert.cxx util.cxx nsscommon.cxx @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_LDADD = $(nss_LIBS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_35) # crash(8) extension @BUILD_CRASHMOD_TRUE@STAPLOG = staplog.so # Get extra libs as needed LDADD = EXAMPLE_SOURCE_DIR = $(srcdir)/testsuite/systemtap.examples EXAMPLE_META_FILES = $(EXAMPLE_SOURCE_DIR)/*/*.meta TEST_COV_DIR = coverage SUBDIRS = . java python stapdyn staprun stapbpf doc man po httpd stap-exporter # NB: the gcov target above uses this to enumarate linked binaries' build directories DIST_SUBDIRS = testsuite $(SUBDIRS) EXTRA_DIST = m4/ChangeLog # Any extra flags, such as: # --define "with_docs 0" # --define "with_bundled_elfutils 1" --define "elfutils_version 0.135" RPMBUILDFLAGS = ACLOCAL_AMFLAGS = -I m4 all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .cxx .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 includes/sys/sdt-config.h: $(top_builddir)/config.status $(top_srcdir)/includes/sys/sdt-config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/config.systemtap: $(top_builddir)/config.status $(top_srcdir)/initscript/config.systemtap.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/config.stap-server: $(top_builddir)/config.status $(top_srcdir)/initscript/config.stap-server.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/systemtap: $(top_builddir)/config.status $(top_srcdir)/initscript/systemtap.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/stap-server: $(top_builddir)/config.status $(top_srcdir)/initscript/stap-server.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/99stap/module-setup.sh: $(top_builddir)/config.status $(top_srcdir)/initscript/99stap/module-setup.sh.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/99stap/install: $(top_builddir)/config.status $(top_srcdir)/initscript/99stap/install.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/99stap/check: $(top_builddir)/config.status $(top_srcdir)/initscript/99stap/check.in cd $(top_builddir) && $(SHELL) ./config.status $@ run-stap: $(top_builddir)/config.status $(srcdir)/run-stap.in cd $(top_builddir) && $(SHELL) ./config.status $@ dtrace: $(top_builddir)/config.status $(srcdir)/dtrace.in cd $(top_builddir) && $(SHELL) ./config.status $@ staprun/guest/stapshd: $(top_builddir)/config.status $(top_srcdir)/staprun/guest/stapshd.in cd $(top_builddir) && $(SHELL) ./config.status $@ staprun/guest/stapsh-daemon: $(top_builddir)/config.status $(top_srcdir)/staprun/guest/stapsh-daemon.in cd $(top_builddir) && $(SHELL) ./config.status $@ staprun/guest/stapsh@.service: $(top_builddir)/config.status $(top_srcdir)/staprun/guest/stapsh@.service.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) install-pkglibexecPROGRAMS: $(pkglibexec_PROGRAMS) @$(NORMAL_INSTALL) @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-pkglibexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkglibexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkglibexecdir)" && rm -f $$files clean-pkglibexecPROGRAMS: -test -z "$(pkglibexec_PROGRAMS)" || rm -f $(pkglibexec_PROGRAMS) stap$(EXEEXT): $(stap_OBJECTS) $(stap_DEPENDENCIES) $(EXTRA_stap_DEPENDENCIES) @rm -f stap$(EXEEXT) $(AM_V_CXXLD)$(stap_LINK) $(stap_OBJECTS) $(stap_LDADD) $(LIBS) stap-authorize-cert$(EXEEXT): $(stap_authorize_cert_OBJECTS) $(stap_authorize_cert_DEPENDENCIES) $(EXTRA_stap_authorize_cert_DEPENDENCIES) @rm -f stap-authorize-cert$(EXEEXT) $(AM_V_CXXLD)$(stap_authorize_cert_LINK) $(stap_authorize_cert_OBJECTS) $(stap_authorize_cert_LDADD) $(LIBS) stap-gen-cert$(EXEEXT): $(stap_gen_cert_OBJECTS) $(stap_gen_cert_DEPENDENCIES) $(EXTRA_stap_gen_cert_DEPENDENCIES) @rm -f stap-gen-cert$(EXEEXT) $(AM_V_CXXLD)$(stap_gen_cert_LINK) $(stap_gen_cert_OBJECTS) $(stap_gen_cert_LDADD) $(LIBS) stap-serverd$(EXEEXT): $(stap_serverd_OBJECTS) $(stap_serverd_DEPENDENCIES) $(EXTRA_stap_serverd_DEPENDENCIES) @rm -f stap-serverd$(EXEEXT) $(AM_V_CXXLD)$(stap_serverd_LINK) $(stap_serverd_OBJECTS) $(stap_serverd_LDADD) $(LIBS) stap-sign-module$(EXEEXT): $(stap_sign_module_OBJECTS) $(stap_sign_module_DEPENDENCIES) $(EXTRA_stap_sign_module_DEPENDENCIES) @rm -f stap-sign-module$(EXEEXT) $(AM_V_CXXLD)$(stap_sign_module_LINK) $(stap_sign_module_OBJECTS) $(stap_sign_module_LDADD) $(LIBS) stapvirt$(EXEEXT): $(stapvirt_OBJECTS) $(stapvirt_DEPENDENCIES) $(EXTRA_stapvirt_DEPENDENCIES) @rm -f stapvirt$(EXEEXT) $(AM_V_CCLD)$(stapvirt_LINK) $(stapvirt_OBJECTS) $(stapvirt_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) install-pkglibexecSCRIPTS: $(pkglibexec_SCRIPTS) @$(NORMAL_INSTALL) @list='$(pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-pkglibexecSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(pkglibexecdir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-base.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-bitset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-opt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-translate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-buildrun.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-cache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-client-http.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-client-nss.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-cmdline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-coveragedb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-csclient.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-cscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-dwarf_wrappers.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-dwflpp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-elaborate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-hash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-interactive.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-loc2stap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-mdfour.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-nss-server-info.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-parse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-privilege.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-remote.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-rpm_finder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-session.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-setupdwfl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex-dfa.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex-parse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex-tree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-staptree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stringtable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-been.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-dynprobe.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-itrace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-mark.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-method.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-netfilter.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-perfmon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-procfs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-python.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-timers.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-utrace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapsets.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-task_finder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-translate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-translator-output.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_authorize_cert-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_authorize_cert-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_gen_cert-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_gen_cert-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-cmdline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-cscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-privilege.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-stap-serverd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_sign_module-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_sign_module-stap-sign-module.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_sign_module-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stapvirt-stapvirt.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` stap-mdfour.o: mdfour.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -MT stap-mdfour.o -MD -MP -MF $(DEPDIR)/stap-mdfour.Tpo -c -o stap-mdfour.o `test -f 'mdfour.c' || echo '$(srcdir)/'`mdfour.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-mdfour.Tpo $(DEPDIR)/stap-mdfour.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdfour.c' object='stap-mdfour.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -c -o stap-mdfour.o `test -f 'mdfour.c' || echo '$(srcdir)/'`mdfour.c stap-mdfour.obj: mdfour.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -MT stap-mdfour.obj -MD -MP -MF $(DEPDIR)/stap-mdfour.Tpo -c -o stap-mdfour.obj `if test -f 'mdfour.c'; then $(CYGPATH_W) 'mdfour.c'; else $(CYGPATH_W) '$(srcdir)/mdfour.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-mdfour.Tpo $(DEPDIR)/stap-mdfour.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdfour.c' object='stap-mdfour.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -c -o stap-mdfour.obj `if test -f 'mdfour.c'; then $(CYGPATH_W) 'mdfour.c'; else $(CYGPATH_W) '$(srcdir)/mdfour.c'; fi` stapvirt-stapvirt.o: stapvirt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -MT stapvirt-stapvirt.o -MD -MP -MF $(DEPDIR)/stapvirt-stapvirt.Tpo -c -o stapvirt-stapvirt.o `test -f 'stapvirt.c' || echo '$(srcdir)/'`stapvirt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stapvirt-stapvirt.Tpo $(DEPDIR)/stapvirt-stapvirt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stapvirt.c' object='stapvirt-stapvirt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -c -o stapvirt-stapvirt.o `test -f 'stapvirt.c' || echo '$(srcdir)/'`stapvirt.c stapvirt-stapvirt.obj: stapvirt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -MT stapvirt-stapvirt.obj -MD -MP -MF $(DEPDIR)/stapvirt-stapvirt.Tpo -c -o stapvirt-stapvirt.obj `if test -f 'stapvirt.c'; then $(CYGPATH_W) 'stapvirt.c'; else $(CYGPATH_W) '$(srcdir)/stapvirt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stapvirt-stapvirt.Tpo $(DEPDIR)/stapvirt-stapvirt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stapvirt.c' object='stapvirt-stapvirt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -c -o stapvirt-stapvirt.obj `if test -f 'stapvirt.c'; then $(CYGPATH_W) 'stapvirt.c'; else $(CYGPATH_W) '$(srcdir)/stapvirt.c'; fi` .cxx.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` stap-main.o: main.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-main.o -MD -MP -MF $(DEPDIR)/stap-main.Tpo -c -o stap-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-main.Tpo $(DEPDIR)/stap-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cxx' object='stap-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx stap-main.obj: main.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-main.obj -MD -MP -MF $(DEPDIR)/stap-main.Tpo -c -o stap-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-main.Tpo $(DEPDIR)/stap-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cxx' object='stap-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi` stap-session.o: session.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-session.o -MD -MP -MF $(DEPDIR)/stap-session.Tpo -c -o stap-session.o `test -f 'session.cxx' || echo '$(srcdir)/'`session.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-session.Tpo $(DEPDIR)/stap-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cxx' object='stap-session.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-session.o `test -f 'session.cxx' || echo '$(srcdir)/'`session.cxx stap-session.obj: session.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-session.obj -MD -MP -MF $(DEPDIR)/stap-session.Tpo -c -o stap-session.obj `if test -f 'session.cxx'; then $(CYGPATH_W) 'session.cxx'; else $(CYGPATH_W) '$(srcdir)/session.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-session.Tpo $(DEPDIR)/stap-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cxx' object='stap-session.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-session.obj `if test -f 'session.cxx'; then $(CYGPATH_W) 'session.cxx'; else $(CYGPATH_W) '$(srcdir)/session.cxx'; fi` stap-parse.o: parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-parse.o -MD -MP -MF $(DEPDIR)/stap-parse.Tpo -c -o stap-parse.o `test -f 'parse.cxx' || echo '$(srcdir)/'`parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-parse.Tpo $(DEPDIR)/stap-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parse.cxx' object='stap-parse.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-parse.o `test -f 'parse.cxx' || echo '$(srcdir)/'`parse.cxx stap-parse.obj: parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-parse.obj -MD -MP -MF $(DEPDIR)/stap-parse.Tpo -c -o stap-parse.obj `if test -f 'parse.cxx'; then $(CYGPATH_W) 'parse.cxx'; else $(CYGPATH_W) '$(srcdir)/parse.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-parse.Tpo $(DEPDIR)/stap-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parse.cxx' object='stap-parse.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-parse.obj `if test -f 'parse.cxx'; then $(CYGPATH_W) 'parse.cxx'; else $(CYGPATH_W) '$(srcdir)/parse.cxx'; fi` stap-staptree.o: staptree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-staptree.o -MD -MP -MF $(DEPDIR)/stap-staptree.Tpo -c -o stap-staptree.o `test -f 'staptree.cxx' || echo '$(srcdir)/'`staptree.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-staptree.Tpo $(DEPDIR)/stap-staptree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staptree.cxx' object='stap-staptree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-staptree.o `test -f 'staptree.cxx' || echo '$(srcdir)/'`staptree.cxx stap-staptree.obj: staptree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-staptree.obj -MD -MP -MF $(DEPDIR)/stap-staptree.Tpo -c -o stap-staptree.obj `if test -f 'staptree.cxx'; then $(CYGPATH_W) 'staptree.cxx'; else $(CYGPATH_W) '$(srcdir)/staptree.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-staptree.Tpo $(DEPDIR)/stap-staptree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staptree.cxx' object='stap-staptree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-staptree.obj `if test -f 'staptree.cxx'; then $(CYGPATH_W) 'staptree.cxx'; else $(CYGPATH_W) '$(srcdir)/staptree.cxx'; fi` stap-elaborate.o: elaborate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-elaborate.o -MD -MP -MF $(DEPDIR)/stap-elaborate.Tpo -c -o stap-elaborate.o `test -f 'elaborate.cxx' || echo '$(srcdir)/'`elaborate.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-elaborate.Tpo $(DEPDIR)/stap-elaborate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='elaborate.cxx' object='stap-elaborate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-elaborate.o `test -f 'elaborate.cxx' || echo '$(srcdir)/'`elaborate.cxx stap-elaborate.obj: elaborate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-elaborate.obj -MD -MP -MF $(DEPDIR)/stap-elaborate.Tpo -c -o stap-elaborate.obj `if test -f 'elaborate.cxx'; then $(CYGPATH_W) 'elaborate.cxx'; else $(CYGPATH_W) '$(srcdir)/elaborate.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-elaborate.Tpo $(DEPDIR)/stap-elaborate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='elaborate.cxx' object='stap-elaborate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-elaborate.obj `if test -f 'elaborate.cxx'; then $(CYGPATH_W) 'elaborate.cxx'; else $(CYGPATH_W) '$(srcdir)/elaborate.cxx'; fi` stap-translate.o: translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translate.o -MD -MP -MF $(DEPDIR)/stap-translate.Tpo -c -o stap-translate.o `test -f 'translate.cxx' || echo '$(srcdir)/'`translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translate.Tpo $(DEPDIR)/stap-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translate.cxx' object='stap-translate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translate.o `test -f 'translate.cxx' || echo '$(srcdir)/'`translate.cxx stap-translate.obj: translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translate.obj -MD -MP -MF $(DEPDIR)/stap-translate.Tpo -c -o stap-translate.obj `if test -f 'translate.cxx'; then $(CYGPATH_W) 'translate.cxx'; else $(CYGPATH_W) '$(srcdir)/translate.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translate.Tpo $(DEPDIR)/stap-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translate.cxx' object='stap-translate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translate.obj `if test -f 'translate.cxx'; then $(CYGPATH_W) 'translate.cxx'; else $(CYGPATH_W) '$(srcdir)/translate.cxx'; fi` stap-tapsets.o: tapsets.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapsets.o -MD -MP -MF $(DEPDIR)/stap-tapsets.Tpo -c -o stap-tapsets.o `test -f 'tapsets.cxx' || echo '$(srcdir)/'`tapsets.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapsets.Tpo $(DEPDIR)/stap-tapsets.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapsets.cxx' object='stap-tapsets.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapsets.o `test -f 'tapsets.cxx' || echo '$(srcdir)/'`tapsets.cxx stap-tapsets.obj: tapsets.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapsets.obj -MD -MP -MF $(DEPDIR)/stap-tapsets.Tpo -c -o stap-tapsets.obj `if test -f 'tapsets.cxx'; then $(CYGPATH_W) 'tapsets.cxx'; else $(CYGPATH_W) '$(srcdir)/tapsets.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapsets.Tpo $(DEPDIR)/stap-tapsets.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapsets.cxx' object='stap-tapsets.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapsets.obj `if test -f 'tapsets.cxx'; then $(CYGPATH_W) 'tapsets.cxx'; else $(CYGPATH_W) '$(srcdir)/tapsets.cxx'; fi` stap-buildrun.o: buildrun.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-buildrun.o -MD -MP -MF $(DEPDIR)/stap-buildrun.Tpo -c -o stap-buildrun.o `test -f 'buildrun.cxx' || echo '$(srcdir)/'`buildrun.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-buildrun.Tpo $(DEPDIR)/stap-buildrun.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='buildrun.cxx' object='stap-buildrun.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-buildrun.o `test -f 'buildrun.cxx' || echo '$(srcdir)/'`buildrun.cxx stap-buildrun.obj: buildrun.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-buildrun.obj -MD -MP -MF $(DEPDIR)/stap-buildrun.Tpo -c -o stap-buildrun.obj `if test -f 'buildrun.cxx'; then $(CYGPATH_W) 'buildrun.cxx'; else $(CYGPATH_W) '$(srcdir)/buildrun.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-buildrun.Tpo $(DEPDIR)/stap-buildrun.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='buildrun.cxx' object='stap-buildrun.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-buildrun.obj `if test -f 'buildrun.cxx'; then $(CYGPATH_W) 'buildrun.cxx'; else $(CYGPATH_W) '$(srcdir)/buildrun.cxx'; fi` stap-loc2stap.o: loc2stap.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-loc2stap.o -MD -MP -MF $(DEPDIR)/stap-loc2stap.Tpo -c -o stap-loc2stap.o `test -f 'loc2stap.cxx' || echo '$(srcdir)/'`loc2stap.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-loc2stap.Tpo $(DEPDIR)/stap-loc2stap.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='loc2stap.cxx' object='stap-loc2stap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-loc2stap.o `test -f 'loc2stap.cxx' || echo '$(srcdir)/'`loc2stap.cxx stap-loc2stap.obj: loc2stap.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-loc2stap.obj -MD -MP -MF $(DEPDIR)/stap-loc2stap.Tpo -c -o stap-loc2stap.obj `if test -f 'loc2stap.cxx'; then $(CYGPATH_W) 'loc2stap.cxx'; else $(CYGPATH_W) '$(srcdir)/loc2stap.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-loc2stap.Tpo $(DEPDIR)/stap-loc2stap.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='loc2stap.cxx' object='stap-loc2stap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-loc2stap.obj `if test -f 'loc2stap.cxx'; then $(CYGPATH_W) 'loc2stap.cxx'; else $(CYGPATH_W) '$(srcdir)/loc2stap.cxx'; fi` stap-hash.o: hash.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-hash.o -MD -MP -MF $(DEPDIR)/stap-hash.Tpo -c -o stap-hash.o `test -f 'hash.cxx' || echo '$(srcdir)/'`hash.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-hash.Tpo $(DEPDIR)/stap-hash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hash.cxx' object='stap-hash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-hash.o `test -f 'hash.cxx' || echo '$(srcdir)/'`hash.cxx stap-hash.obj: hash.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-hash.obj -MD -MP -MF $(DEPDIR)/stap-hash.Tpo -c -o stap-hash.obj `if test -f 'hash.cxx'; then $(CYGPATH_W) 'hash.cxx'; else $(CYGPATH_W) '$(srcdir)/hash.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-hash.Tpo $(DEPDIR)/stap-hash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hash.cxx' object='stap-hash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-hash.obj `if test -f 'hash.cxx'; then $(CYGPATH_W) 'hash.cxx'; else $(CYGPATH_W) '$(srcdir)/hash.cxx'; fi` stap-cache.o: cache.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cache.o -MD -MP -MF $(DEPDIR)/stap-cache.Tpo -c -o stap-cache.o `test -f 'cache.cxx' || echo '$(srcdir)/'`cache.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cache.Tpo $(DEPDIR)/stap-cache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cache.cxx' object='stap-cache.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cache.o `test -f 'cache.cxx' || echo '$(srcdir)/'`cache.cxx stap-cache.obj: cache.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cache.obj -MD -MP -MF $(DEPDIR)/stap-cache.Tpo -c -o stap-cache.obj `if test -f 'cache.cxx'; then $(CYGPATH_W) 'cache.cxx'; else $(CYGPATH_W) '$(srcdir)/cache.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cache.Tpo $(DEPDIR)/stap-cache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cache.cxx' object='stap-cache.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cache.obj `if test -f 'cache.cxx'; then $(CYGPATH_W) 'cache.cxx'; else $(CYGPATH_W) '$(srcdir)/cache.cxx'; fi` stap-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-util.o -MD -MP -MF $(DEPDIR)/stap-util.Tpo -c -o stap-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-util.Tpo $(DEPDIR)/stap-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-util.obj -MD -MP -MF $(DEPDIR)/stap-util.Tpo -c -o stap-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-util.Tpo $(DEPDIR)/stap-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap-coveragedb.o: coveragedb.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-coveragedb.o -MD -MP -MF $(DEPDIR)/stap-coveragedb.Tpo -c -o stap-coveragedb.o `test -f 'coveragedb.cxx' || echo '$(srcdir)/'`coveragedb.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-coveragedb.Tpo $(DEPDIR)/stap-coveragedb.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='coveragedb.cxx' object='stap-coveragedb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-coveragedb.o `test -f 'coveragedb.cxx' || echo '$(srcdir)/'`coveragedb.cxx stap-coveragedb.obj: coveragedb.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-coveragedb.obj -MD -MP -MF $(DEPDIR)/stap-coveragedb.Tpo -c -o stap-coveragedb.obj `if test -f 'coveragedb.cxx'; then $(CYGPATH_W) 'coveragedb.cxx'; else $(CYGPATH_W) '$(srcdir)/coveragedb.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-coveragedb.Tpo $(DEPDIR)/stap-coveragedb.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='coveragedb.cxx' object='stap-coveragedb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-coveragedb.obj `if test -f 'coveragedb.cxx'; then $(CYGPATH_W) 'coveragedb.cxx'; else $(CYGPATH_W) '$(srcdir)/coveragedb.cxx'; fi` stap-dwarf_wrappers.o: dwarf_wrappers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwarf_wrappers.o -MD -MP -MF $(DEPDIR)/stap-dwarf_wrappers.Tpo -c -o stap-dwarf_wrappers.o `test -f 'dwarf_wrappers.cxx' || echo '$(srcdir)/'`dwarf_wrappers.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwarf_wrappers.Tpo $(DEPDIR)/stap-dwarf_wrappers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwarf_wrappers.cxx' object='stap-dwarf_wrappers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwarf_wrappers.o `test -f 'dwarf_wrappers.cxx' || echo '$(srcdir)/'`dwarf_wrappers.cxx stap-dwarf_wrappers.obj: dwarf_wrappers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwarf_wrappers.obj -MD -MP -MF $(DEPDIR)/stap-dwarf_wrappers.Tpo -c -o stap-dwarf_wrappers.obj `if test -f 'dwarf_wrappers.cxx'; then $(CYGPATH_W) 'dwarf_wrappers.cxx'; else $(CYGPATH_W) '$(srcdir)/dwarf_wrappers.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwarf_wrappers.Tpo $(DEPDIR)/stap-dwarf_wrappers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwarf_wrappers.cxx' object='stap-dwarf_wrappers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwarf_wrappers.obj `if test -f 'dwarf_wrappers.cxx'; then $(CYGPATH_W) 'dwarf_wrappers.cxx'; else $(CYGPATH_W) '$(srcdir)/dwarf_wrappers.cxx'; fi` stap-tapset-been.o: tapset-been.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-been.o -MD -MP -MF $(DEPDIR)/stap-tapset-been.Tpo -c -o stap-tapset-been.o `test -f 'tapset-been.cxx' || echo '$(srcdir)/'`tapset-been.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-been.Tpo $(DEPDIR)/stap-tapset-been.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-been.cxx' object='stap-tapset-been.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-been.o `test -f 'tapset-been.cxx' || echo '$(srcdir)/'`tapset-been.cxx stap-tapset-been.obj: tapset-been.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-been.obj -MD -MP -MF $(DEPDIR)/stap-tapset-been.Tpo -c -o stap-tapset-been.obj `if test -f 'tapset-been.cxx'; then $(CYGPATH_W) 'tapset-been.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-been.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-been.Tpo $(DEPDIR)/stap-tapset-been.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-been.cxx' object='stap-tapset-been.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-been.obj `if test -f 'tapset-been.cxx'; then $(CYGPATH_W) 'tapset-been.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-been.cxx'; fi` stap-tapset-procfs.o: tapset-procfs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-procfs.o -MD -MP -MF $(DEPDIR)/stap-tapset-procfs.Tpo -c -o stap-tapset-procfs.o `test -f 'tapset-procfs.cxx' || echo '$(srcdir)/'`tapset-procfs.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-procfs.Tpo $(DEPDIR)/stap-tapset-procfs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-procfs.cxx' object='stap-tapset-procfs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-procfs.o `test -f 'tapset-procfs.cxx' || echo '$(srcdir)/'`tapset-procfs.cxx stap-tapset-procfs.obj: tapset-procfs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-procfs.obj -MD -MP -MF $(DEPDIR)/stap-tapset-procfs.Tpo -c -o stap-tapset-procfs.obj `if test -f 'tapset-procfs.cxx'; then $(CYGPATH_W) 'tapset-procfs.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-procfs.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-procfs.Tpo $(DEPDIR)/stap-tapset-procfs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-procfs.cxx' object='stap-tapset-procfs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-procfs.obj `if test -f 'tapset-procfs.cxx'; then $(CYGPATH_W) 'tapset-procfs.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-procfs.cxx'; fi` stap-tapset-timers.o: tapset-timers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-timers.o -MD -MP -MF $(DEPDIR)/stap-tapset-timers.Tpo -c -o stap-tapset-timers.o `test -f 'tapset-timers.cxx' || echo '$(srcdir)/'`tapset-timers.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-timers.Tpo $(DEPDIR)/stap-tapset-timers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-timers.cxx' object='stap-tapset-timers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-timers.o `test -f 'tapset-timers.cxx' || echo '$(srcdir)/'`tapset-timers.cxx stap-tapset-timers.obj: tapset-timers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-timers.obj -MD -MP -MF $(DEPDIR)/stap-tapset-timers.Tpo -c -o stap-tapset-timers.obj `if test -f 'tapset-timers.cxx'; then $(CYGPATH_W) 'tapset-timers.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-timers.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-timers.Tpo $(DEPDIR)/stap-tapset-timers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-timers.cxx' object='stap-tapset-timers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-timers.obj `if test -f 'tapset-timers.cxx'; then $(CYGPATH_W) 'tapset-timers.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-timers.cxx'; fi` stap-tapset-netfilter.o: tapset-netfilter.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-netfilter.o -MD -MP -MF $(DEPDIR)/stap-tapset-netfilter.Tpo -c -o stap-tapset-netfilter.o `test -f 'tapset-netfilter.cxx' || echo '$(srcdir)/'`tapset-netfilter.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-netfilter.Tpo $(DEPDIR)/stap-tapset-netfilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-netfilter.cxx' object='stap-tapset-netfilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-netfilter.o `test -f 'tapset-netfilter.cxx' || echo '$(srcdir)/'`tapset-netfilter.cxx stap-tapset-netfilter.obj: tapset-netfilter.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-netfilter.obj -MD -MP -MF $(DEPDIR)/stap-tapset-netfilter.Tpo -c -o stap-tapset-netfilter.obj `if test -f 'tapset-netfilter.cxx'; then $(CYGPATH_W) 'tapset-netfilter.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-netfilter.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-netfilter.Tpo $(DEPDIR)/stap-tapset-netfilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-netfilter.cxx' object='stap-tapset-netfilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-netfilter.obj `if test -f 'tapset-netfilter.cxx'; then $(CYGPATH_W) 'tapset-netfilter.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-netfilter.cxx'; fi` stap-tapset-perfmon.o: tapset-perfmon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-perfmon.o -MD -MP -MF $(DEPDIR)/stap-tapset-perfmon.Tpo -c -o stap-tapset-perfmon.o `test -f 'tapset-perfmon.cxx' || echo '$(srcdir)/'`tapset-perfmon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-perfmon.Tpo $(DEPDIR)/stap-tapset-perfmon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-perfmon.cxx' object='stap-tapset-perfmon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-perfmon.o `test -f 'tapset-perfmon.cxx' || echo '$(srcdir)/'`tapset-perfmon.cxx stap-tapset-perfmon.obj: tapset-perfmon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-perfmon.obj -MD -MP -MF $(DEPDIR)/stap-tapset-perfmon.Tpo -c -o stap-tapset-perfmon.obj `if test -f 'tapset-perfmon.cxx'; then $(CYGPATH_W) 'tapset-perfmon.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-perfmon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-perfmon.Tpo $(DEPDIR)/stap-tapset-perfmon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-perfmon.cxx' object='stap-tapset-perfmon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-perfmon.obj `if test -f 'tapset-perfmon.cxx'; then $(CYGPATH_W) 'tapset-perfmon.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-perfmon.cxx'; fi` stap-tapset-mark.o: tapset-mark.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-mark.o -MD -MP -MF $(DEPDIR)/stap-tapset-mark.Tpo -c -o stap-tapset-mark.o `test -f 'tapset-mark.cxx' || echo '$(srcdir)/'`tapset-mark.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-mark.Tpo $(DEPDIR)/stap-tapset-mark.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-mark.cxx' object='stap-tapset-mark.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-mark.o `test -f 'tapset-mark.cxx' || echo '$(srcdir)/'`tapset-mark.cxx stap-tapset-mark.obj: tapset-mark.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-mark.obj -MD -MP -MF $(DEPDIR)/stap-tapset-mark.Tpo -c -o stap-tapset-mark.obj `if test -f 'tapset-mark.cxx'; then $(CYGPATH_W) 'tapset-mark.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-mark.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-mark.Tpo $(DEPDIR)/stap-tapset-mark.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-mark.cxx' object='stap-tapset-mark.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-mark.obj `if test -f 'tapset-mark.cxx'; then $(CYGPATH_W) 'tapset-mark.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-mark.cxx'; fi` stap-tapset-itrace.o: tapset-itrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-itrace.o -MD -MP -MF $(DEPDIR)/stap-tapset-itrace.Tpo -c -o stap-tapset-itrace.o `test -f 'tapset-itrace.cxx' || echo '$(srcdir)/'`tapset-itrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-itrace.Tpo $(DEPDIR)/stap-tapset-itrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-itrace.cxx' object='stap-tapset-itrace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-itrace.o `test -f 'tapset-itrace.cxx' || echo '$(srcdir)/'`tapset-itrace.cxx stap-tapset-itrace.obj: tapset-itrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-itrace.obj -MD -MP -MF $(DEPDIR)/stap-tapset-itrace.Tpo -c -o stap-tapset-itrace.obj `if test -f 'tapset-itrace.cxx'; then $(CYGPATH_W) 'tapset-itrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-itrace.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-itrace.Tpo $(DEPDIR)/stap-tapset-itrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-itrace.cxx' object='stap-tapset-itrace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-itrace.obj `if test -f 'tapset-itrace.cxx'; then $(CYGPATH_W) 'tapset-itrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-itrace.cxx'; fi` stap-tapset-utrace.o: tapset-utrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-utrace.o -MD -MP -MF $(DEPDIR)/stap-tapset-utrace.Tpo -c -o stap-tapset-utrace.o `test -f 'tapset-utrace.cxx' || echo '$(srcdir)/'`tapset-utrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-utrace.Tpo $(DEPDIR)/stap-tapset-utrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-utrace.cxx' object='stap-tapset-utrace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-utrace.o `test -f 'tapset-utrace.cxx' || echo '$(srcdir)/'`tapset-utrace.cxx stap-tapset-utrace.obj: tapset-utrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-utrace.obj -MD -MP -MF $(DEPDIR)/stap-tapset-utrace.Tpo -c -o stap-tapset-utrace.obj `if test -f 'tapset-utrace.cxx'; then $(CYGPATH_W) 'tapset-utrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-utrace.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-utrace.Tpo $(DEPDIR)/stap-tapset-utrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-utrace.cxx' object='stap-tapset-utrace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-utrace.obj `if test -f 'tapset-utrace.cxx'; then $(CYGPATH_W) 'tapset-utrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-utrace.cxx'; fi` stap-task_finder.o: task_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-task_finder.o -MD -MP -MF $(DEPDIR)/stap-task_finder.Tpo -c -o stap-task_finder.o `test -f 'task_finder.cxx' || echo '$(srcdir)/'`task_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-task_finder.Tpo $(DEPDIR)/stap-task_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='task_finder.cxx' object='stap-task_finder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-task_finder.o `test -f 'task_finder.cxx' || echo '$(srcdir)/'`task_finder.cxx stap-task_finder.obj: task_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-task_finder.obj -MD -MP -MF $(DEPDIR)/stap-task_finder.Tpo -c -o stap-task_finder.obj `if test -f 'task_finder.cxx'; then $(CYGPATH_W) 'task_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/task_finder.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-task_finder.Tpo $(DEPDIR)/stap-task_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='task_finder.cxx' object='stap-task_finder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-task_finder.obj `if test -f 'task_finder.cxx'; then $(CYGPATH_W) 'task_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/task_finder.cxx'; fi` stap-dwflpp.o: dwflpp.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwflpp.o -MD -MP -MF $(DEPDIR)/stap-dwflpp.Tpo -c -o stap-dwflpp.o `test -f 'dwflpp.cxx' || echo '$(srcdir)/'`dwflpp.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwflpp.Tpo $(DEPDIR)/stap-dwflpp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwflpp.cxx' object='stap-dwflpp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwflpp.o `test -f 'dwflpp.cxx' || echo '$(srcdir)/'`dwflpp.cxx stap-dwflpp.obj: dwflpp.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwflpp.obj -MD -MP -MF $(DEPDIR)/stap-dwflpp.Tpo -c -o stap-dwflpp.obj `if test -f 'dwflpp.cxx'; then $(CYGPATH_W) 'dwflpp.cxx'; else $(CYGPATH_W) '$(srcdir)/dwflpp.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwflpp.Tpo $(DEPDIR)/stap-dwflpp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwflpp.cxx' object='stap-dwflpp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwflpp.obj `if test -f 'dwflpp.cxx'; then $(CYGPATH_W) 'dwflpp.cxx'; else $(CYGPATH_W) '$(srcdir)/dwflpp.cxx'; fi` stap-rpm_finder.o: rpm_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-rpm_finder.o -MD -MP -MF $(DEPDIR)/stap-rpm_finder.Tpo -c -o stap-rpm_finder.o `test -f 'rpm_finder.cxx' || echo '$(srcdir)/'`rpm_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-rpm_finder.Tpo $(DEPDIR)/stap-rpm_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rpm_finder.cxx' object='stap-rpm_finder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-rpm_finder.o `test -f 'rpm_finder.cxx' || echo '$(srcdir)/'`rpm_finder.cxx stap-rpm_finder.obj: rpm_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-rpm_finder.obj -MD -MP -MF $(DEPDIR)/stap-rpm_finder.Tpo -c -o stap-rpm_finder.obj `if test -f 'rpm_finder.cxx'; then $(CYGPATH_W) 'rpm_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/rpm_finder.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-rpm_finder.Tpo $(DEPDIR)/stap-rpm_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rpm_finder.cxx' object='stap-rpm_finder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-rpm_finder.obj `if test -f 'rpm_finder.cxx'; then $(CYGPATH_W) 'rpm_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/rpm_finder.cxx'; fi` stap-setupdwfl.o: setupdwfl.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-setupdwfl.o -MD -MP -MF $(DEPDIR)/stap-setupdwfl.Tpo -c -o stap-setupdwfl.o `test -f 'setupdwfl.cxx' || echo '$(srcdir)/'`setupdwfl.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-setupdwfl.Tpo $(DEPDIR)/stap-setupdwfl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='setupdwfl.cxx' object='stap-setupdwfl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-setupdwfl.o `test -f 'setupdwfl.cxx' || echo '$(srcdir)/'`setupdwfl.cxx stap-setupdwfl.obj: setupdwfl.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-setupdwfl.obj -MD -MP -MF $(DEPDIR)/stap-setupdwfl.Tpo -c -o stap-setupdwfl.obj `if test -f 'setupdwfl.cxx'; then $(CYGPATH_W) 'setupdwfl.cxx'; else $(CYGPATH_W) '$(srcdir)/setupdwfl.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-setupdwfl.Tpo $(DEPDIR)/stap-setupdwfl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='setupdwfl.cxx' object='stap-setupdwfl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-setupdwfl.obj `if test -f 'setupdwfl.cxx'; then $(CYGPATH_W) 'setupdwfl.cxx'; else $(CYGPATH_W) '$(srcdir)/setupdwfl.cxx'; fi` stap-remote.o: remote.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-remote.o -MD -MP -MF $(DEPDIR)/stap-remote.Tpo -c -o stap-remote.o `test -f 'remote.cxx' || echo '$(srcdir)/'`remote.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-remote.Tpo $(DEPDIR)/stap-remote.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='remote.cxx' object='stap-remote.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-remote.o `test -f 'remote.cxx' || echo '$(srcdir)/'`remote.cxx stap-remote.obj: remote.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-remote.obj -MD -MP -MF $(DEPDIR)/stap-remote.Tpo -c -o stap-remote.obj `if test -f 'remote.cxx'; then $(CYGPATH_W) 'remote.cxx'; else $(CYGPATH_W) '$(srcdir)/remote.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-remote.Tpo $(DEPDIR)/stap-remote.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='remote.cxx' object='stap-remote.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-remote.obj `if test -f 'remote.cxx'; then $(CYGPATH_W) 'remote.cxx'; else $(CYGPATH_W) '$(srcdir)/remote.cxx'; fi` stap-privilege.o: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-privilege.o -MD -MP -MF $(DEPDIR)/stap-privilege.Tpo -c -o stap-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-privilege.Tpo $(DEPDIR)/stap-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap-privilege.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx stap-privilege.obj: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-privilege.obj -MD -MP -MF $(DEPDIR)/stap-privilege.Tpo -c -o stap-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-privilege.Tpo $(DEPDIR)/stap-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap-privilege.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` stap-cmdline.o: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cmdline.o -MD -MP -MF $(DEPDIR)/stap-cmdline.Tpo -c -o stap-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cmdline.Tpo $(DEPDIR)/stap-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap-cmdline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx stap-cmdline.obj: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cmdline.obj -MD -MP -MF $(DEPDIR)/stap-cmdline.Tpo -c -o stap-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cmdline.Tpo $(DEPDIR)/stap-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap-cmdline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` stap-tapset-dynprobe.o: tapset-dynprobe.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-dynprobe.o -MD -MP -MF $(DEPDIR)/stap-tapset-dynprobe.Tpo -c -o stap-tapset-dynprobe.o `test -f 'tapset-dynprobe.cxx' || echo '$(srcdir)/'`tapset-dynprobe.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-dynprobe.Tpo $(DEPDIR)/stap-tapset-dynprobe.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-dynprobe.cxx' object='stap-tapset-dynprobe.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-dynprobe.o `test -f 'tapset-dynprobe.cxx' || echo '$(srcdir)/'`tapset-dynprobe.cxx stap-tapset-dynprobe.obj: tapset-dynprobe.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-dynprobe.obj -MD -MP -MF $(DEPDIR)/stap-tapset-dynprobe.Tpo -c -o stap-tapset-dynprobe.obj `if test -f 'tapset-dynprobe.cxx'; then $(CYGPATH_W) 'tapset-dynprobe.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-dynprobe.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-dynprobe.Tpo $(DEPDIR)/stap-tapset-dynprobe.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-dynprobe.cxx' object='stap-tapset-dynprobe.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-dynprobe.obj `if test -f 'tapset-dynprobe.cxx'; then $(CYGPATH_W) 'tapset-dynprobe.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-dynprobe.cxx'; fi` stap-tapset-method.o: tapset-method.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-method.o -MD -MP -MF $(DEPDIR)/stap-tapset-method.Tpo -c -o stap-tapset-method.o `test -f 'tapset-method.cxx' || echo '$(srcdir)/'`tapset-method.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-method.Tpo $(DEPDIR)/stap-tapset-method.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-method.cxx' object='stap-tapset-method.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-method.o `test -f 'tapset-method.cxx' || echo '$(srcdir)/'`tapset-method.cxx stap-tapset-method.obj: tapset-method.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-method.obj -MD -MP -MF $(DEPDIR)/stap-tapset-method.Tpo -c -o stap-tapset-method.obj `if test -f 'tapset-method.cxx'; then $(CYGPATH_W) 'tapset-method.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-method.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-method.Tpo $(DEPDIR)/stap-tapset-method.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-method.cxx' object='stap-tapset-method.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-method.obj `if test -f 'tapset-method.cxx'; then $(CYGPATH_W) 'tapset-method.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-method.cxx'; fi` stap-translator-output.o: translator-output.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translator-output.o -MD -MP -MF $(DEPDIR)/stap-translator-output.Tpo -c -o stap-translator-output.o `test -f 'translator-output.cxx' || echo '$(srcdir)/'`translator-output.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translator-output.Tpo $(DEPDIR)/stap-translator-output.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translator-output.cxx' object='stap-translator-output.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translator-output.o `test -f 'translator-output.cxx' || echo '$(srcdir)/'`translator-output.cxx stap-translator-output.obj: translator-output.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translator-output.obj -MD -MP -MF $(DEPDIR)/stap-translator-output.Tpo -c -o stap-translator-output.obj `if test -f 'translator-output.cxx'; then $(CYGPATH_W) 'translator-output.cxx'; else $(CYGPATH_W) '$(srcdir)/translator-output.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translator-output.Tpo $(DEPDIR)/stap-translator-output.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translator-output.cxx' object='stap-translator-output.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translator-output.obj `if test -f 'translator-output.cxx'; then $(CYGPATH_W) 'translator-output.cxx'; else $(CYGPATH_W) '$(srcdir)/translator-output.cxx'; fi` stap-stapregex.o: stapregex.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex.o -MD -MP -MF $(DEPDIR)/stap-stapregex.Tpo -c -o stap-stapregex.o `test -f 'stapregex.cxx' || echo '$(srcdir)/'`stapregex.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex.Tpo $(DEPDIR)/stap-stapregex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex.cxx' object='stap-stapregex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex.o `test -f 'stapregex.cxx' || echo '$(srcdir)/'`stapregex.cxx stap-stapregex.obj: stapregex.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex.obj -MD -MP -MF $(DEPDIR)/stap-stapregex.Tpo -c -o stap-stapregex.obj `if test -f 'stapregex.cxx'; then $(CYGPATH_W) 'stapregex.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex.Tpo $(DEPDIR)/stap-stapregex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex.cxx' object='stap-stapregex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex.obj `if test -f 'stapregex.cxx'; then $(CYGPATH_W) 'stapregex.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex.cxx'; fi` stap-stapregex-tree.o: stapregex-tree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-tree.o -MD -MP -MF $(DEPDIR)/stap-stapregex-tree.Tpo -c -o stap-stapregex-tree.o `test -f 'stapregex-tree.cxx' || echo '$(srcdir)/'`stapregex-tree.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-tree.Tpo $(DEPDIR)/stap-stapregex-tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-tree.cxx' object='stap-stapregex-tree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-tree.o `test -f 'stapregex-tree.cxx' || echo '$(srcdir)/'`stapregex-tree.cxx stap-stapregex-tree.obj: stapregex-tree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-tree.obj -MD -MP -MF $(DEPDIR)/stap-stapregex-tree.Tpo -c -o stap-stapregex-tree.obj `if test -f 'stapregex-tree.cxx'; then $(CYGPATH_W) 'stapregex-tree.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-tree.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-tree.Tpo $(DEPDIR)/stap-stapregex-tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-tree.cxx' object='stap-stapregex-tree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-tree.obj `if test -f 'stapregex-tree.cxx'; then $(CYGPATH_W) 'stapregex-tree.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-tree.cxx'; fi` stap-stapregex-parse.o: stapregex-parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-parse.o -MD -MP -MF $(DEPDIR)/stap-stapregex-parse.Tpo -c -o stap-stapregex-parse.o `test -f 'stapregex-parse.cxx' || echo '$(srcdir)/'`stapregex-parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-parse.Tpo $(DEPDIR)/stap-stapregex-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-parse.cxx' object='stap-stapregex-parse.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-parse.o `test -f 'stapregex-parse.cxx' || echo '$(srcdir)/'`stapregex-parse.cxx stap-stapregex-parse.obj: stapregex-parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-parse.obj -MD -MP -MF $(DEPDIR)/stap-stapregex-parse.Tpo -c -o stap-stapregex-parse.obj `if test -f 'stapregex-parse.cxx'; then $(CYGPATH_W) 'stapregex-parse.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-parse.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-parse.Tpo $(DEPDIR)/stap-stapregex-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-parse.cxx' object='stap-stapregex-parse.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-parse.obj `if test -f 'stapregex-parse.cxx'; then $(CYGPATH_W) 'stapregex-parse.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-parse.cxx'; fi` stap-stapregex-dfa.o: stapregex-dfa.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-dfa.o -MD -MP -MF $(DEPDIR)/stap-stapregex-dfa.Tpo -c -o stap-stapregex-dfa.o `test -f 'stapregex-dfa.cxx' || echo '$(srcdir)/'`stapregex-dfa.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-dfa.Tpo $(DEPDIR)/stap-stapregex-dfa.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-dfa.cxx' object='stap-stapregex-dfa.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-dfa.o `test -f 'stapregex-dfa.cxx' || echo '$(srcdir)/'`stapregex-dfa.cxx stap-stapregex-dfa.obj: stapregex-dfa.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-dfa.obj -MD -MP -MF $(DEPDIR)/stap-stapregex-dfa.Tpo -c -o stap-stapregex-dfa.obj `if test -f 'stapregex-dfa.cxx'; then $(CYGPATH_W) 'stapregex-dfa.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-dfa.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-dfa.Tpo $(DEPDIR)/stap-stapregex-dfa.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-dfa.cxx' object='stap-stapregex-dfa.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-dfa.obj `if test -f 'stapregex-dfa.cxx'; then $(CYGPATH_W) 'stapregex-dfa.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-dfa.cxx'; fi` stap-stringtable.o: stringtable.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stringtable.o -MD -MP -MF $(DEPDIR)/stap-stringtable.Tpo -c -o stap-stringtable.o `test -f 'stringtable.cxx' || echo '$(srcdir)/'`stringtable.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stringtable.Tpo $(DEPDIR)/stap-stringtable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringtable.cxx' object='stap-stringtable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stringtable.o `test -f 'stringtable.cxx' || echo '$(srcdir)/'`stringtable.cxx stap-stringtable.obj: stringtable.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stringtable.obj -MD -MP -MF $(DEPDIR)/stap-stringtable.Tpo -c -o stap-stringtable.obj `if test -f 'stringtable.cxx'; then $(CYGPATH_W) 'stringtable.cxx'; else $(CYGPATH_W) '$(srcdir)/stringtable.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stringtable.Tpo $(DEPDIR)/stap-stringtable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringtable.cxx' object='stap-stringtable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stringtable.obj `if test -f 'stringtable.cxx'; then $(CYGPATH_W) 'stringtable.cxx'; else $(CYGPATH_W) '$(srcdir)/stringtable.cxx'; fi` stap-tapset-python.o: tapset-python.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-python.o -MD -MP -MF $(DEPDIR)/stap-tapset-python.Tpo -c -o stap-tapset-python.o `test -f 'tapset-python.cxx' || echo '$(srcdir)/'`tapset-python.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-python.Tpo $(DEPDIR)/stap-tapset-python.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-python.cxx' object='stap-tapset-python.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-python.o `test -f 'tapset-python.cxx' || echo '$(srcdir)/'`tapset-python.cxx stap-tapset-python.obj: tapset-python.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-python.obj -MD -MP -MF $(DEPDIR)/stap-tapset-python.Tpo -c -o stap-tapset-python.obj `if test -f 'tapset-python.cxx'; then $(CYGPATH_W) 'tapset-python.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-python.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-python.Tpo $(DEPDIR)/stap-tapset-python.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-python.cxx' object='stap-tapset-python.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-python.obj `if test -f 'tapset-python.cxx'; then $(CYGPATH_W) 'tapset-python.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-python.cxx'; fi` stap-interactive.o: interactive.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-interactive.o -MD -MP -MF $(DEPDIR)/stap-interactive.Tpo -c -o stap-interactive.o `test -f 'interactive.cxx' || echo '$(srcdir)/'`interactive.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-interactive.Tpo $(DEPDIR)/stap-interactive.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='interactive.cxx' object='stap-interactive.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-interactive.o `test -f 'interactive.cxx' || echo '$(srcdir)/'`interactive.cxx stap-interactive.obj: interactive.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-interactive.obj -MD -MP -MF $(DEPDIR)/stap-interactive.Tpo -c -o stap-interactive.obj `if test -f 'interactive.cxx'; then $(CYGPATH_W) 'interactive.cxx'; else $(CYGPATH_W) '$(srcdir)/interactive.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-interactive.Tpo $(DEPDIR)/stap-interactive.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='interactive.cxx' object='stap-interactive.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-interactive.obj `if test -f 'interactive.cxx'; then $(CYGPATH_W) 'interactive.cxx'; else $(CYGPATH_W) '$(srcdir)/interactive.cxx'; fi` stap-bpf-base.o: bpf-base.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-base.o -MD -MP -MF $(DEPDIR)/stap-bpf-base.Tpo -c -o stap-bpf-base.o `test -f 'bpf-base.cxx' || echo '$(srcdir)/'`bpf-base.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-base.Tpo $(DEPDIR)/stap-bpf-base.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-base.cxx' object='stap-bpf-base.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-base.o `test -f 'bpf-base.cxx' || echo '$(srcdir)/'`bpf-base.cxx stap-bpf-base.obj: bpf-base.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-base.obj -MD -MP -MF $(DEPDIR)/stap-bpf-base.Tpo -c -o stap-bpf-base.obj `if test -f 'bpf-base.cxx'; then $(CYGPATH_W) 'bpf-base.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-base.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-base.Tpo $(DEPDIR)/stap-bpf-base.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-base.cxx' object='stap-bpf-base.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-base.obj `if test -f 'bpf-base.cxx'; then $(CYGPATH_W) 'bpf-base.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-base.cxx'; fi` stap-bpf-bitset.o: bpf-bitset.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-bitset.o -MD -MP -MF $(DEPDIR)/stap-bpf-bitset.Tpo -c -o stap-bpf-bitset.o `test -f 'bpf-bitset.cxx' || echo '$(srcdir)/'`bpf-bitset.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-bitset.Tpo $(DEPDIR)/stap-bpf-bitset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-bitset.cxx' object='stap-bpf-bitset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-bitset.o `test -f 'bpf-bitset.cxx' || echo '$(srcdir)/'`bpf-bitset.cxx stap-bpf-bitset.obj: bpf-bitset.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-bitset.obj -MD -MP -MF $(DEPDIR)/stap-bpf-bitset.Tpo -c -o stap-bpf-bitset.obj `if test -f 'bpf-bitset.cxx'; then $(CYGPATH_W) 'bpf-bitset.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-bitset.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-bitset.Tpo $(DEPDIR)/stap-bpf-bitset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-bitset.cxx' object='stap-bpf-bitset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-bitset.obj `if test -f 'bpf-bitset.cxx'; then $(CYGPATH_W) 'bpf-bitset.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-bitset.cxx'; fi` stap-bpf-translate.o: bpf-translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-translate.o -MD -MP -MF $(DEPDIR)/stap-bpf-translate.Tpo -c -o stap-bpf-translate.o `test -f 'bpf-translate.cxx' || echo '$(srcdir)/'`bpf-translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-translate.Tpo $(DEPDIR)/stap-bpf-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-translate.cxx' object='stap-bpf-translate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-translate.o `test -f 'bpf-translate.cxx' || echo '$(srcdir)/'`bpf-translate.cxx stap-bpf-translate.obj: bpf-translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-translate.obj -MD -MP -MF $(DEPDIR)/stap-bpf-translate.Tpo -c -o stap-bpf-translate.obj `if test -f 'bpf-translate.cxx'; then $(CYGPATH_W) 'bpf-translate.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-translate.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-translate.Tpo $(DEPDIR)/stap-bpf-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-translate.cxx' object='stap-bpf-translate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-translate.obj `if test -f 'bpf-translate.cxx'; then $(CYGPATH_W) 'bpf-translate.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-translate.cxx'; fi` stap-bpf-opt.o: bpf-opt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-opt.o -MD -MP -MF $(DEPDIR)/stap-bpf-opt.Tpo -c -o stap-bpf-opt.o `test -f 'bpf-opt.cxx' || echo '$(srcdir)/'`bpf-opt.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-opt.Tpo $(DEPDIR)/stap-bpf-opt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-opt.cxx' object='stap-bpf-opt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-opt.o `test -f 'bpf-opt.cxx' || echo '$(srcdir)/'`bpf-opt.cxx stap-bpf-opt.obj: bpf-opt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-opt.obj -MD -MP -MF $(DEPDIR)/stap-bpf-opt.Tpo -c -o stap-bpf-opt.obj `if test -f 'bpf-opt.cxx'; then $(CYGPATH_W) 'bpf-opt.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-opt.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-opt.Tpo $(DEPDIR)/stap-bpf-opt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-opt.cxx' object='stap-bpf-opt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-opt.obj `if test -f 'bpf-opt.cxx'; then $(CYGPATH_W) 'bpf-opt.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-opt.cxx'; fi` stap-csclient.o: csclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-csclient.o -MD -MP -MF $(DEPDIR)/stap-csclient.Tpo -c -o stap-csclient.o `test -f 'csclient.cxx' || echo '$(srcdir)/'`csclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-csclient.Tpo $(DEPDIR)/stap-csclient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='csclient.cxx' object='stap-csclient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-csclient.o `test -f 'csclient.cxx' || echo '$(srcdir)/'`csclient.cxx stap-csclient.obj: csclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-csclient.obj -MD -MP -MF $(DEPDIR)/stap-csclient.Tpo -c -o stap-csclient.obj `if test -f 'csclient.cxx'; then $(CYGPATH_W) 'csclient.cxx'; else $(CYGPATH_W) '$(srcdir)/csclient.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-csclient.Tpo $(DEPDIR)/stap-csclient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='csclient.cxx' object='stap-csclient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-csclient.obj `if test -f 'csclient.cxx'; then $(CYGPATH_W) 'csclient.cxx'; else $(CYGPATH_W) '$(srcdir)/csclient.cxx'; fi` stap-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nsscommon.o -MD -MP -MF $(DEPDIR)/stap-nsscommon.Tpo -c -o stap-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nsscommon.Tpo $(DEPDIR)/stap-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap-nsscommon.Tpo -c -o stap-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nsscommon.Tpo $(DEPDIR)/stap-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap-client-nss.o: client-nss.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-nss.o -MD -MP -MF $(DEPDIR)/stap-client-nss.Tpo -c -o stap-client-nss.o `test -f 'client-nss.cxx' || echo '$(srcdir)/'`client-nss.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-nss.Tpo $(DEPDIR)/stap-client-nss.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-nss.cxx' object='stap-client-nss.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-nss.o `test -f 'client-nss.cxx' || echo '$(srcdir)/'`client-nss.cxx stap-client-nss.obj: client-nss.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-nss.obj -MD -MP -MF $(DEPDIR)/stap-client-nss.Tpo -c -o stap-client-nss.obj `if test -f 'client-nss.cxx'; then $(CYGPATH_W) 'client-nss.cxx'; else $(CYGPATH_W) '$(srcdir)/client-nss.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-nss.Tpo $(DEPDIR)/stap-client-nss.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-nss.cxx' object='stap-client-nss.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-nss.obj `if test -f 'client-nss.cxx'; then $(CYGPATH_W) 'client-nss.cxx'; else $(CYGPATH_W) '$(srcdir)/client-nss.cxx'; fi` stap-cscommon.o: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cscommon.o -MD -MP -MF $(DEPDIR)/stap-cscommon.Tpo -c -o stap-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cscommon.Tpo $(DEPDIR)/stap-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap-cscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx stap-cscommon.obj: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cscommon.obj -MD -MP -MF $(DEPDIR)/stap-cscommon.Tpo -c -o stap-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cscommon.Tpo $(DEPDIR)/stap-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap-cscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` stap-nss-server-info.o: nss-server-info.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nss-server-info.o -MD -MP -MF $(DEPDIR)/stap-nss-server-info.Tpo -c -o stap-nss-server-info.o `test -f 'nss-server-info.cxx' || echo '$(srcdir)/'`nss-server-info.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nss-server-info.Tpo $(DEPDIR)/stap-nss-server-info.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nss-server-info.cxx' object='stap-nss-server-info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nss-server-info.o `test -f 'nss-server-info.cxx' || echo '$(srcdir)/'`nss-server-info.cxx stap-nss-server-info.obj: nss-server-info.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nss-server-info.obj -MD -MP -MF $(DEPDIR)/stap-nss-server-info.Tpo -c -o stap-nss-server-info.obj `if test -f 'nss-server-info.cxx'; then $(CYGPATH_W) 'nss-server-info.cxx'; else $(CYGPATH_W) '$(srcdir)/nss-server-info.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nss-server-info.Tpo $(DEPDIR)/stap-nss-server-info.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nss-server-info.cxx' object='stap-nss-server-info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nss-server-info.obj `if test -f 'nss-server-info.cxx'; then $(CYGPATH_W) 'nss-server-info.cxx'; else $(CYGPATH_W) '$(srcdir)/nss-server-info.cxx'; fi` stap-client-http.o: client-http.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-http.o -MD -MP -MF $(DEPDIR)/stap-client-http.Tpo -c -o stap-client-http.o `test -f 'client-http.cxx' || echo '$(srcdir)/'`client-http.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-http.Tpo $(DEPDIR)/stap-client-http.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-http.cxx' object='stap-client-http.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-http.o `test -f 'client-http.cxx' || echo '$(srcdir)/'`client-http.cxx stap-client-http.obj: client-http.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-http.obj -MD -MP -MF $(DEPDIR)/stap-client-http.Tpo -c -o stap-client-http.obj `if test -f 'client-http.cxx'; then $(CYGPATH_W) 'client-http.cxx'; else $(CYGPATH_W) '$(srcdir)/client-http.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-http.Tpo $(DEPDIR)/stap-client-http.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-http.cxx' object='stap-client-http.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-http.obj `if test -f 'client-http.cxx'; then $(CYGPATH_W) 'client-http.cxx'; else $(CYGPATH_W) '$(srcdir)/client-http.cxx'; fi` stap_authorize_cert-stap-authorize-cert.o: stap-authorize-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-stap-authorize-cert.o -MD -MP -MF $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo -c -o stap_authorize_cert-stap-authorize-cert.o `test -f 'stap-authorize-cert.cxx' || echo '$(srcdir)/'`stap-authorize-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-authorize-cert.cxx' object='stap_authorize_cert-stap-authorize-cert.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-stap-authorize-cert.o `test -f 'stap-authorize-cert.cxx' || echo '$(srcdir)/'`stap-authorize-cert.cxx stap_authorize_cert-stap-authorize-cert.obj: stap-authorize-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-stap-authorize-cert.obj -MD -MP -MF $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo -c -o stap_authorize_cert-stap-authorize-cert.obj `if test -f 'stap-authorize-cert.cxx'; then $(CYGPATH_W) 'stap-authorize-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-authorize-cert.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-authorize-cert.cxx' object='stap_authorize_cert-stap-authorize-cert.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-stap-authorize-cert.obj `if test -f 'stap-authorize-cert.cxx'; then $(CYGPATH_W) 'stap-authorize-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-authorize-cert.cxx'; fi` stap_authorize_cert-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo -c -o stap_authorize_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo $(DEPDIR)/stap_authorize_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_authorize_cert-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_authorize_cert-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo -c -o stap_authorize_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo $(DEPDIR)/stap_authorize_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_authorize_cert-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_authorize_cert-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-util.o -MD -MP -MF $(DEPDIR)/stap_authorize_cert-util.Tpo -c -o stap_authorize_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-util.Tpo $(DEPDIR)/stap_authorize_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_authorize_cert-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_authorize_cert-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-util.obj -MD -MP -MF $(DEPDIR)/stap_authorize_cert-util.Tpo -c -o stap_authorize_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-util.Tpo $(DEPDIR)/stap_authorize_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_authorize_cert-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap_gen_cert-stap-gen-cert.o: stap-gen-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-stap-gen-cert.o -MD -MP -MF $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo -c -o stap_gen_cert-stap-gen-cert.o `test -f 'stap-gen-cert.cxx' || echo '$(srcdir)/'`stap-gen-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo $(DEPDIR)/stap_gen_cert-stap-gen-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-gen-cert.cxx' object='stap_gen_cert-stap-gen-cert.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-stap-gen-cert.o `test -f 'stap-gen-cert.cxx' || echo '$(srcdir)/'`stap-gen-cert.cxx stap_gen_cert-stap-gen-cert.obj: stap-gen-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-stap-gen-cert.obj -MD -MP -MF $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo -c -o stap_gen_cert-stap-gen-cert.obj `if test -f 'stap-gen-cert.cxx'; then $(CYGPATH_W) 'stap-gen-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-gen-cert.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo $(DEPDIR)/stap_gen_cert-stap-gen-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-gen-cert.cxx' object='stap_gen_cert-stap-gen-cert.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-stap-gen-cert.obj `if test -f 'stap-gen-cert.cxx'; then $(CYGPATH_W) 'stap-gen-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-gen-cert.cxx'; fi` stap_gen_cert-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-util.o -MD -MP -MF $(DEPDIR)/stap_gen_cert-util.Tpo -c -o stap_gen_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-util.Tpo $(DEPDIR)/stap_gen_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_gen_cert-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_gen_cert-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-util.obj -MD -MP -MF $(DEPDIR)/stap_gen_cert-util.Tpo -c -o stap_gen_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-util.Tpo $(DEPDIR)/stap_gen_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_gen_cert-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap_gen_cert-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_gen_cert-nsscommon.Tpo -c -o stap_gen_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-nsscommon.Tpo $(DEPDIR)/stap_gen_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_gen_cert-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_gen_cert-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_gen_cert-nsscommon.Tpo -c -o stap_gen_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-nsscommon.Tpo $(DEPDIR)/stap_gen_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_gen_cert-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_serverd-stap-serverd.o: stap-serverd.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-stap-serverd.o -MD -MP -MF $(DEPDIR)/stap_serverd-stap-serverd.Tpo -c -o stap_serverd-stap-serverd.o `test -f 'stap-serverd.cxx' || echo '$(srcdir)/'`stap-serverd.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-stap-serverd.Tpo $(DEPDIR)/stap_serverd-stap-serverd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-serverd.cxx' object='stap_serverd-stap-serverd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-stap-serverd.o `test -f 'stap-serverd.cxx' || echo '$(srcdir)/'`stap-serverd.cxx stap_serverd-stap-serverd.obj: stap-serverd.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-stap-serverd.obj -MD -MP -MF $(DEPDIR)/stap_serverd-stap-serverd.Tpo -c -o stap_serverd-stap-serverd.obj `if test -f 'stap-serverd.cxx'; then $(CYGPATH_W) 'stap-serverd.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-serverd.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-stap-serverd.Tpo $(DEPDIR)/stap_serverd-stap-serverd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-serverd.cxx' object='stap_serverd-stap-serverd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-stap-serverd.obj `if test -f 'stap-serverd.cxx'; then $(CYGPATH_W) 'stap-serverd.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-serverd.cxx'; fi` stap_serverd-cscommon.o: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cscommon.o -MD -MP -MF $(DEPDIR)/stap_serverd-cscommon.Tpo -c -o stap_serverd-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cscommon.Tpo $(DEPDIR)/stap_serverd-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap_serverd-cscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx stap_serverd-cscommon.obj: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cscommon.obj -MD -MP -MF $(DEPDIR)/stap_serverd-cscommon.Tpo -c -o stap_serverd-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cscommon.Tpo $(DEPDIR)/stap_serverd-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap_serverd-cscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` stap_serverd-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-util.o -MD -MP -MF $(DEPDIR)/stap_serverd-util.Tpo -c -o stap_serverd-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-util.Tpo $(DEPDIR)/stap_serverd-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_serverd-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_serverd-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-util.obj -MD -MP -MF $(DEPDIR)/stap_serverd-util.Tpo -c -o stap_serverd-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-util.Tpo $(DEPDIR)/stap_serverd-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_serverd-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap_serverd-privilege.o: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-privilege.o -MD -MP -MF $(DEPDIR)/stap_serverd-privilege.Tpo -c -o stap_serverd-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-privilege.Tpo $(DEPDIR)/stap_serverd-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap_serverd-privilege.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx stap_serverd-privilege.obj: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-privilege.obj -MD -MP -MF $(DEPDIR)/stap_serverd-privilege.Tpo -c -o stap_serverd-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-privilege.Tpo $(DEPDIR)/stap_serverd-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap_serverd-privilege.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` stap_serverd-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_serverd-nsscommon.Tpo -c -o stap_serverd-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-nsscommon.Tpo $(DEPDIR)/stap_serverd-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_serverd-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_serverd-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_serverd-nsscommon.Tpo -c -o stap_serverd-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-nsscommon.Tpo $(DEPDIR)/stap_serverd-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_serverd-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_serverd-cmdline.o: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cmdline.o -MD -MP -MF $(DEPDIR)/stap_serverd-cmdline.Tpo -c -o stap_serverd-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cmdline.Tpo $(DEPDIR)/stap_serverd-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap_serverd-cmdline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx stap_serverd-cmdline.obj: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cmdline.obj -MD -MP -MF $(DEPDIR)/stap_serverd-cmdline.Tpo -c -o stap_serverd-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cmdline.Tpo $(DEPDIR)/stap_serverd-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap_serverd-cmdline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` stap_sign_module-stap-sign-module.o: stap-sign-module.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-stap-sign-module.o -MD -MP -MF $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo -c -o stap_sign_module-stap-sign-module.o `test -f 'stap-sign-module.cxx' || echo '$(srcdir)/'`stap-sign-module.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo $(DEPDIR)/stap_sign_module-stap-sign-module.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-sign-module.cxx' object='stap_sign_module-stap-sign-module.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-stap-sign-module.o `test -f 'stap-sign-module.cxx' || echo '$(srcdir)/'`stap-sign-module.cxx stap_sign_module-stap-sign-module.obj: stap-sign-module.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-stap-sign-module.obj -MD -MP -MF $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo -c -o stap_sign_module-stap-sign-module.obj `if test -f 'stap-sign-module.cxx'; then $(CYGPATH_W) 'stap-sign-module.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-sign-module.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo $(DEPDIR)/stap_sign_module-stap-sign-module.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-sign-module.cxx' object='stap_sign_module-stap-sign-module.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-stap-sign-module.obj `if test -f 'stap-sign-module.cxx'; then $(CYGPATH_W) 'stap-sign-module.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-sign-module.cxx'; fi` stap_sign_module-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_sign_module-nsscommon.Tpo -c -o stap_sign_module-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-nsscommon.Tpo $(DEPDIR)/stap_sign_module-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_sign_module-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_sign_module-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_sign_module-nsscommon.Tpo -c -o stap_sign_module-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-nsscommon.Tpo $(DEPDIR)/stap_sign_module-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_sign_module-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_sign_module-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-util.o -MD -MP -MF $(DEPDIR)/stap_sign_module-util.Tpo -c -o stap_sign_module-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-util.Tpo $(DEPDIR)/stap_sign_module-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_sign_module-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_sign_module-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-util.obj -MD -MP -MF $(DEPDIR)/stap_sign_module-util.Tpo -c -o stap_sign_module-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-util.Tpo $(DEPDIR)/stap_sign_module-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_sign_module-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` install-oldincludeHEADERS: $(oldinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(oldinclude_HEADERS)'; test -n "$(oldincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(oldincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(oldincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(oldincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(oldincludedir)" || exit $$?; \ done uninstall-oldincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(oldinclude_HEADERS)'; test -n "$(oldincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(oldincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(HEADERS) config.h all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(oldincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) @BUILD_CRASHMOD_FALSE@@BUILD_ELFUTILS_FALSE@@HAVE_NSS_FALSE@install-exec-local: @BUILD_CRASHMOD_FALSE@@BUILD_TRANSLATOR_FALSE@install-exec-local: clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-local \ clean-pkglibexecPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f ./$(DEPDIR)/stap-bpf-base.Po -rm -f ./$(DEPDIR)/stap-bpf-bitset.Po -rm -f ./$(DEPDIR)/stap-bpf-opt.Po -rm -f ./$(DEPDIR)/stap-bpf-translate.Po -rm -f ./$(DEPDIR)/stap-buildrun.Po -rm -f ./$(DEPDIR)/stap-cache.Po -rm -f ./$(DEPDIR)/stap-client-http.Po -rm -f ./$(DEPDIR)/stap-client-nss.Po -rm -f ./$(DEPDIR)/stap-cmdline.Po -rm -f ./$(DEPDIR)/stap-coveragedb.Po -rm -f ./$(DEPDIR)/stap-csclient.Po -rm -f ./$(DEPDIR)/stap-cscommon.Po -rm -f ./$(DEPDIR)/stap-dwarf_wrappers.Po -rm -f ./$(DEPDIR)/stap-dwflpp.Po -rm -f ./$(DEPDIR)/stap-elaborate.Po -rm -f ./$(DEPDIR)/stap-hash.Po -rm -f ./$(DEPDIR)/stap-interactive.Po -rm -f ./$(DEPDIR)/stap-loc2stap.Po -rm -f ./$(DEPDIR)/stap-main.Po -rm -f ./$(DEPDIR)/stap-mdfour.Po -rm -f ./$(DEPDIR)/stap-nss-server-info.Po -rm -f ./$(DEPDIR)/stap-nsscommon.Po -rm -f ./$(DEPDIR)/stap-parse.Po -rm -f ./$(DEPDIR)/stap-privilege.Po -rm -f ./$(DEPDIR)/stap-remote.Po -rm -f ./$(DEPDIR)/stap-rpm_finder.Po -rm -f ./$(DEPDIR)/stap-session.Po -rm -f ./$(DEPDIR)/stap-setupdwfl.Po -rm -f ./$(DEPDIR)/stap-stapregex-dfa.Po -rm -f ./$(DEPDIR)/stap-stapregex-parse.Po -rm -f ./$(DEPDIR)/stap-stapregex-tree.Po -rm -f ./$(DEPDIR)/stap-stapregex.Po -rm -f ./$(DEPDIR)/stap-staptree.Po -rm -f ./$(DEPDIR)/stap-stringtable.Po -rm -f ./$(DEPDIR)/stap-tapset-been.Po -rm -f ./$(DEPDIR)/stap-tapset-dynprobe.Po -rm -f ./$(DEPDIR)/stap-tapset-itrace.Po -rm -f ./$(DEPDIR)/stap-tapset-mark.Po -rm -f ./$(DEPDIR)/stap-tapset-method.Po -rm -f ./$(DEPDIR)/stap-tapset-netfilter.Po -rm -f ./$(DEPDIR)/stap-tapset-perfmon.Po -rm -f ./$(DEPDIR)/stap-tapset-procfs.Po -rm -f ./$(DEPDIR)/stap-tapset-python.Po -rm -f ./$(DEPDIR)/stap-tapset-timers.Po -rm -f ./$(DEPDIR)/stap-tapset-utrace.Po -rm -f ./$(DEPDIR)/stap-tapsets.Po -rm -f ./$(DEPDIR)/stap-task_finder.Po -rm -f ./$(DEPDIR)/stap-translate.Po -rm -f ./$(DEPDIR)/stap-translator-output.Po -rm -f ./$(DEPDIR)/stap-util.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-util.Po -rm -f ./$(DEPDIR)/stap_gen_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po -rm -f ./$(DEPDIR)/stap_gen_cert-util.Po -rm -f ./$(DEPDIR)/stap_serverd-cmdline.Po -rm -f ./$(DEPDIR)/stap_serverd-cscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-nsscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-privilege.Po -rm -f ./$(DEPDIR)/stap_serverd-stap-serverd.Po -rm -f ./$(DEPDIR)/stap_serverd-util.Po -rm -f ./$(DEPDIR)/stap_sign_module-nsscommon.Po -rm -f ./$(DEPDIR)/stap_sign_module-stap-sign-module.Po -rm -f ./$(DEPDIR)/stap_sign_module-util.Po -rm -f ./$(DEPDIR)/stapvirt-stapvirt.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-oldincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS \ install-exec-local install-pkglibexecPROGRAMS \ install-pkglibexecSCRIPTS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f ./$(DEPDIR)/stap-bpf-base.Po -rm -f ./$(DEPDIR)/stap-bpf-bitset.Po -rm -f ./$(DEPDIR)/stap-bpf-opt.Po -rm -f ./$(DEPDIR)/stap-bpf-translate.Po -rm -f ./$(DEPDIR)/stap-buildrun.Po -rm -f ./$(DEPDIR)/stap-cache.Po -rm -f ./$(DEPDIR)/stap-client-http.Po -rm -f ./$(DEPDIR)/stap-client-nss.Po -rm -f ./$(DEPDIR)/stap-cmdline.Po -rm -f ./$(DEPDIR)/stap-coveragedb.Po -rm -f ./$(DEPDIR)/stap-csclient.Po -rm -f ./$(DEPDIR)/stap-cscommon.Po -rm -f ./$(DEPDIR)/stap-dwarf_wrappers.Po -rm -f ./$(DEPDIR)/stap-dwflpp.Po -rm -f ./$(DEPDIR)/stap-elaborate.Po -rm -f ./$(DEPDIR)/stap-hash.Po -rm -f ./$(DEPDIR)/stap-interactive.Po -rm -f ./$(DEPDIR)/stap-loc2stap.Po -rm -f ./$(DEPDIR)/stap-main.Po -rm -f ./$(DEPDIR)/stap-mdfour.Po -rm -f ./$(DEPDIR)/stap-nss-server-info.Po -rm -f ./$(DEPDIR)/stap-nsscommon.Po -rm -f ./$(DEPDIR)/stap-parse.Po -rm -f ./$(DEPDIR)/stap-privilege.Po -rm -f ./$(DEPDIR)/stap-remote.Po -rm -f ./$(DEPDIR)/stap-rpm_finder.Po -rm -f ./$(DEPDIR)/stap-session.Po -rm -f ./$(DEPDIR)/stap-setupdwfl.Po -rm -f ./$(DEPDIR)/stap-stapregex-dfa.Po -rm -f ./$(DEPDIR)/stap-stapregex-parse.Po -rm -f ./$(DEPDIR)/stap-stapregex-tree.Po -rm -f ./$(DEPDIR)/stap-stapregex.Po -rm -f ./$(DEPDIR)/stap-staptree.Po -rm -f ./$(DEPDIR)/stap-stringtable.Po -rm -f ./$(DEPDIR)/stap-tapset-been.Po -rm -f ./$(DEPDIR)/stap-tapset-dynprobe.Po -rm -f ./$(DEPDIR)/stap-tapset-itrace.Po -rm -f ./$(DEPDIR)/stap-tapset-mark.Po -rm -f ./$(DEPDIR)/stap-tapset-method.Po -rm -f ./$(DEPDIR)/stap-tapset-netfilter.Po -rm -f ./$(DEPDIR)/stap-tapset-perfmon.Po -rm -f ./$(DEPDIR)/stap-tapset-procfs.Po -rm -f ./$(DEPDIR)/stap-tapset-python.Po -rm -f ./$(DEPDIR)/stap-tapset-timers.Po -rm -f ./$(DEPDIR)/stap-tapset-utrace.Po -rm -f ./$(DEPDIR)/stap-tapsets.Po -rm -f ./$(DEPDIR)/stap-task_finder.Po -rm -f ./$(DEPDIR)/stap-translate.Po -rm -f ./$(DEPDIR)/stap-translator-output.Po -rm -f ./$(DEPDIR)/stap-util.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-util.Po -rm -f ./$(DEPDIR)/stap_gen_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po -rm -f ./$(DEPDIR)/stap_gen_cert-util.Po -rm -f ./$(DEPDIR)/stap_serverd-cmdline.Po -rm -f ./$(DEPDIR)/stap_serverd-cscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-nsscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-privilege.Po -rm -f ./$(DEPDIR)/stap_serverd-stap-serverd.Po -rm -f ./$(DEPDIR)/stap_serverd-util.Po -rm -f ./$(DEPDIR)/stap_sign_module-nsscommon.Po -rm -f ./$(DEPDIR)/stap_sign_module-stap-sign-module.Po -rm -f ./$(DEPDIR)/stap_sign_module-util.Po -rm -f ./$(DEPDIR)/stapvirt-stapvirt.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-local uninstall-oldincludeHEADERS \ uninstall-pkglibexecPROGRAMS uninstall-pkglibexecSCRIPTS .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ am--depfiles am--refresh check check-am check-local clean \ clean-binPROGRAMS clean-cscope clean-generic clean-local \ clean-pkglibexecPROGRAMS cscope cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-hdr \ distclean-local distclean-tags dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS \ install-binSCRIPTS install-data install-data-am \ install-data-local install-dvi install-dvi-am install-exec \ install-exec-am install-exec-local install-html \ install-html-am install-info install-info-am install-man \ install-oldincludeHEADERS install-pdf install-pdf-am \ install-pkglibexecPROGRAMS install-pkglibexecSCRIPTS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-local uninstall-oldincludeHEADERS \ uninstall-pkglibexecPROGRAMS uninstall-pkglibexecSCRIPTS .PRECIOUS: Makefile all: macros.systemtap macros.systemtap: $(srcdir)/macros.systemtap.in sed -e "s#@pkgdatadir@#$(pkgdatadir)#g" < $< > $@ install: all $(MAKE) $(AM_MAKEFLAGS) install-recursive git_version.stamp: @if test -f "$(srcdir)/git_version.h"; then \ if test -f "git_version.h"; then :; \ else \ cp "$(srcdir)/git_version.h" "git_version.h"; \ fi; \ fi $(GIT_VERSION_CMD) -k -s $(top_srcdir) -o git_version.h @if test -s "$(srcdir)/git_version.h"; then \ if cmp "$(srcdir)/git_version.h" "git_version.h"; then :; \ else \ echo "Error: $(srcdir)/git_version.h and git_version.h differ."; \ echo " You probably want to remove the former."; \ exit 1; \ fi; \ fi git_version.h: $(srcdir)/git_version.sh -k --srcdir $(srcdir) -o git_version.h cscope: cd $(srcdir) && \ (echo -q ; git ls-files '*.cxx' '*.c' '*.h' | grep -v '^testsuite' ) > cscope.files && \ cscope -b -q @DYNINST_CXXFLAGS@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@install-exec-local: install-scripts # scripts must be installed before this rule is run @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@install-scripts: install-binSCRIPTS install-pkglibexecSCRIPTS @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ for f in $(bin_SCRIPTS); do \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ sed -i -e "s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(bindir)/$$f; \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ done @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ for f in $(pkglibexec_SCRIPTS); do \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ sed -i -e "/INSTALL-HOOK/d;s,sysconfdir=.*,sysconfdir=$(sysconfdir),;s,pkglibexecdir=.*,pkglibexecdir=$(pkglibexecdir)/,;s,localstatedir=.*,localstatedir=$(localstatedir),;s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(pkglibexecdir)/$$f; \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ done @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@stamp-elfutils: config.status @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ $(MAKE) $(AM_MAKEFLAGS) -C build-elfutils all bin_PROGRAMS= @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ for dir in libelf libebl libdw libdwfl libdwelf backends; do \ @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ $(MAKE) $(AM_MAKEFLAGS) -j1 -C build-elfutils/$$dir bin_PROGRAMS= install; \ @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ done @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ $(MAKE) $(AM_MAKEFLAGS) -j1 -C build-elfutils install-pkgincludeHEADERS; @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ touch $@ @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@lib-elfutils/libdw.so: stamp-elfutils ; @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@install-elfutils: @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ mkdir -p $(DESTDIR)$(pkglibdir) @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ for file in lib-elfutils/*.so* lib-elfutils/${PACKAGE_NAME}/*.so*; do \ @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ $(INSTALL_PROGRAM) $$file $(DESTDIR)$(pkglibdir); \ @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@ done @BUILD_ELFUTILS_TRUE@@BUILD_TRANSLATOR_TRUE@install-exec-local: install-elfutils @BUILD_CRASHMOD_TRUE@$(STAPLOG): staplog.c @BUILD_CRASHMOD_TRUE@ $(CC) $(staplog_CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -shared -rdynamic \ @BUILD_CRASHMOD_TRUE@ $(AM_LDFLAGS) $(LDFLAGS) -fPIC -o $@ $< @BUILD_CRASHMOD_TRUE@all-local: $(STAPLOG) example_index @BUILD_CRASHMOD_TRUE@install-exec-local: $(STAPLOG) @BUILD_CRASHMOD_TRUE@ $(MKDIR_P) $(DESTDIR)$(pkglibdir) @BUILD_CRASHMOD_TRUE@ $(INSTALL) $(STAPLOG) $(DESTDIR)$(pkglibdir) @BUILD_CRASHMOD_FALSE@all-local: example_index example_index: $(EXAMPLE_SOURCE_DIR)/index.html $(EXAMPLE_SOURCE_DIR)/index.html: $(EXAMPLE_META_FILES) $(EXAMPLE_INDEX_GEN) @echo "The script example index is outdated, run" @echo " cd $(EXAMPLE_SOURCE_DIR) && \\ " @echo " perl examples-index-gen.pl" @echo "to regenerate it." install-data-local: (cd $(srcdir)/runtime; for f in *.[ch]; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/$$f; done) @HAVE_DYNINST_TRUE@ (cd $(srcdir)/runtime/dyninst; find . \( -name '*.[ch]' \) -print \ @HAVE_DYNINST_TRUE@ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/dyninst/$$f; done) (cd $(srcdir)/runtime/unwind; find . \( -name '*.[ch]' \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/unwind/$$f; done) (cd $(srcdir)/runtime/transport; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/transport/$$f; done) (cd $(srcdir)/runtime/linux; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/$$f; done) (cd $(srcdir)/runtime/linux/uprobes; for f in Makefile *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes/$$f; done) (cd $(srcdir)/runtime/linux/uprobes2; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes2/$$f; done) (cd $(srcdir)/tapset; find . \( -name '*.stp' -o -name '*.stpm' -o -name README \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/tapset/$$f; done) (cd $(srcdir)/testsuite/systemtap.examples; find . -type f -print \ | egrep -v 'check.exp|ChangeLog|examples-index-gen.pl|html/.*\.tmpl|metadatabase.dbq$$' \ | while read f; do if test -x $$f; then \ i_cmd="$(INSTALL_PROGRAM)"; else \ i_cmd="$(INSTALL_DATA)"; fi; \ $$i_cmd -D $$f $(DESTDIR)$(pkgdatadir)/examples/$$f; done) test -e $(DESTDIR)$(sysconfdir)/systemtap || mkdir -p $(DESTDIR)$(sysconfdir)/systemtap @BUILD_SERVER_TRUE@ test -e $(DESTDIR)$(localstatedir)/run/stap-server || mkdir -p $(DESTDIR)$(localstatedir)/run/stap-server @BUILD_SERVER_TRUE@ test -e $(DESTDIR)$(localstatedir)/log || mkdir -p $(DESTDIR)$(localstatedir)/log gcov: find . -name '*.gc*' | xargs rm -f $(MAKE) clean CXXFLAGS="-g -fprofile-arcs -ftest-coverage" CFLAGS="-g -fprofile-arcs -ftest-coverage" all install -sudo $(MAKE) installcheck $${RUNTESTFLAGS+RUNTESTFLAGS=$${RUNTESTFLAGS}} for dir in $(SUBDIRS); do \ (cd $$dir; gcov *.gcno > SUMMARY.gcov 2>&1 || true); \ done find . -name '*.gcov' clean-local: rm -rf ${PACKAGE_TARNAME}-*.tar.gz rm -rf ${PACKAGE_TARNAME}-${PACKAGE_VERSION} rm -rf $(TEST_COV_DIR) rm -rf stap.info rm -rf staplog.so distclean-local: rm -rf build-elfutils include-elfutils lib-elfutils rm -f doc/beginners/en-US doc/beginners/build/en-US/testsuite uninstall-local: rm -rf $(DESTDIR)$(pkgdatadir) rm -rf $(DESTDIR)$(libdir)/$(PACKAGE) -rm -rf $(DESTDIR)$(localstatedir)/cache/$(PACKAGE) @list='$(EXAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(EXAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(EXAMPLE_INSTALL_DIR)/$$p"; \ done @list='$(DEMO_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(DEMO_INSTALL_DIR)/$$p'"; \ rm -f "$(DEMO_INSTALL_DIR)/$$p"; \ done @list='$(SAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(SAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(SAMPLE_INSTALL_DIR)/$$p"; \ done rm -rf $(DESTDIR)$(sysconfdir)/systemtap rm -rf $(DESTDIR)$(docdir)/examples @BUILD_SERVER_TRUE@ rm -rf $(DESTDIR)$(localstatedir)/run/stap-server @BUILD_SERVER_TRUE@ rm -f $(DESTDIR)$(localstatedir)/log/stap-server/log check-local: SRCDIR=`cd $(srcdir); pwd`; \ PWD=`pwd`; \ $(MAKE) -C testsuite check SYSTEMTAP_RUNTIME=$$SRCDIR/runtime SYSTEMTAP_TAPSET=$$SRCDIR/tapset LD_LIBRARY_PATH=$$LD_LIBRARY_PATH$${LD_LIBRARY_PATH:+:}$$PWD/lib-elfutils:$$PWD/lib-elfutils/systemtap SYSTEMTAP_PATH=$$PWD SYSTEMTAP_INCLUDES=$$PWD/includes RUNTESTFLAGS="$(RUNTESTFLAGS)" PKGLIBDIR="$(pkglibexecdir)"; installcheck: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" installcheck-parallel: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck-parallel RUNTESTFLAGS="$(RUNTESTFLAGS)" list-unfinished: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite list-unfinished RUNTESTFLAGS="$(RUNTESTFLAGS)" # All the variables are overridden by run-stap, but SYSTEMTAP_RUNTIME # is used by the testsuite scripts themselves. runcheck: testsuite/stap testsuite/dtrace $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" \ SYSTEMTAP_PATH="`cd testsuite; pwd`" \ SYSTEMTAP_RUNTIME="`cd $(srcdir)/runtime; pwd`" testsuite/stap: run-stap (echo '#!/bin/sh'; echo "exec `pwd`/run-stap" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ testsuite/dtrace: dtrace (echo '#!/bin/sh'; echo "exec `pwd`/dtrace" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ update-po: (cd $(srcdir); ls -1d *.c *.cxx *.h staprun/*.c staprun/*.h) \ | grep -v loc2c-test.c \ | grep -v config.h \ | grep -v git_version.h \ | grep -v staprun/config.h \ | sort > $(srcdir)/po/POTFILES.in $(MAKE) -C po update-po @echo @echo if systemtam.pot is shown as modified ... @echo (cd $(srcdir)/po; git status *.pot) @echo @echo ... then check in with zanata ... @echo @echo % cd $(srcdir) @echo % zanata-cli -B push -s po -t po @echo % zanata-cli -B pull -s po -t po @echo @echo if the .po files are shown as modified ... @echo (cd $(srcdir)/po; git status *.po) @echo @echo ... regenerate just once ... @echo @echo % $(MAKE) -C `pwd` update-po uprobes: $(MAKE) -C $(srcdir)/runtime/uprobes clean default install-uprobes: $(MAKE) -C $(DESTDIR)$(pkgdatadir)/runtime/uprobes clean default .PHONY: $(PHONIES) dist-gzip: cd $(srcdir); git status | grep working.directory.clean || (echo "You should commit your changes before 'make rpm'.") (cd $(srcdir); git archive --prefix=systemtap-$(VERSION)/ --format=tar HEAD) | gzip > systemtap-$(VERSION).tar.gz rpm: dist-gzip if [ `id -u` = 0 ]; then echo NOTE: do not run this as root; exit 1; fi if [ ! -w `rpm --eval %_topdir` ]; then \ echo WARNING: you do not have access to `rpm --eval %_topdir`; \ echo WARNING: you may receive a permission denied error; \ echo WARNING: consider adding \'%_topdir $(HOME)/rpmbuild\' to $(HOME)/.rpmmacros; \ fi mkdir -p `rpm --eval %_specdir` mkdir -p `rpm --eval %_srcrpmdir` mkdir -p `rpm --eval %_rpmdir` mkdir -p `rpm --eval %_builddir` mkdir -p `rpm --eval %_buildroot` rpmbuild --define "_sourcedir $(PWD)/" --define "release_override .`date +%Y%m%d%H%M`" -ta systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) srpm: dist-gzip mkdir -p `rpm --eval %_srcrpmdir` rpmbuild --define "_sourcedir $(PWD)/" -ts systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.2/NEWS000066400000000000000000003621111356460210500141150ustar00rootroot00000000000000* What's new in version 4.3, PRERELEASE * What's new in version 4.2, 2019-11-18 - Initial support for multi-dimensional supports has been added to the stapbpf backend. Note that these arrays cannot be iterated upon with a foreach loop. - The stapbpf backend now supports sorting by value in foreach loops. - The stapbpf backend now supports the concatenation operator for userspace probes. - The stapbpf backend now supports the target() function and -x option. - The gettimeofday_* functions are now provided for the stapbpf backend. - The values of an array can now be iterated over in foreach loops in the stapbpf backend. They are no longer defaulted to 0. - The stapbpf backend now supports order parameterization for begin and end probes. - When the -v option is set along with -L option, the output includes duplicate probe points which are distinguished by their PC address. - The stapbpf backend now supports stap-exporter extensions. - The stapbpf backend now supports procfs probes. The implementation uses FIFO special files in /var/tmp/systemtap-$EFFUSER/MODNAME instead of the proc filesystem files. - The eBPF backend now uses bpf raw tracepoints for kernel.trace("*") probes. These have target variable arguments that match the arguments available for the traditional linux kernel modules tracepoints. Support for the older bpf tracepoint arguments can be forced with a --compatible=4.1 option on the command line. - New backtracing functions print_[u]backtrace_fileline() have been added to the tapset. These functions behave similarly to print_[u]backtrace(), the only difference being that file names and line numbers are added to the backtrace. - Now it is possible to issue a backtrace using user specified pc, sp, and fp which can be used to generate backtraces of different contexts. This was introduced to get backtraces of user code from within the go runtime but it can also be used to do things like generating backtraces of user code from within signal handlers. - The compiler optimizes out probes with empty handlers. Previously, warnings were issued but, the probe was not internally removed. For example, this script now outputs a warning and an error as the only probe handler is empty: probe begin {} Additionally, probe handlers that evaluate to empty are also removed. For example, in this script, the begin probe is elided as $foo does not exist, however, an error won't be outputted because atleast one probe with a non-empty handler exists (probe begin): probe begin { print("Protected from elision") } probe end { if (@defined($foo)) { print("Evaluates to empty handler") } } - The automatic printing implementation now differentiates between pointer and integer types, which are printed as hex or decimal respectively. - The sys/sdt.h file changes the way i386 registers operands are sometimes named, due to an ambiguity. A comment block explains. * What's new in version 4.1, 2019-05-07 - Runtime/tapsets were ported to include up to kernel version 5.1-rc2 - The translator's pass-2 (elaboration) phase has been dramatically accelerated by eschewing processing of unreferenced parts of the tapset and embedded-C code. - New macros @this1, ..., @this8 have been added to the script language. The macros can be used to save values in entry probes and later retrieve them in return probes. This can be used in instances where @entry does not work. For example: probe tp_syscall.read { @this1 = buf_uaddr } probe tp_syscall.read.return { buf_uaddr = @this1 printf("%s", user_string(buf_uaddr)) } - Operator @var() no longer assumes @entry() in return probes. The old behavior can be restored by the '--compatible 4.0' option. - Where available (kernel 4.15+), the kernel-module runtime now uses the kernel-provided ktime_get_real_fast_ns() mechanism for timekeeping rather than the SystemTap runtime's own timekeeping machinery. - New stapbpf tapset task.stp with function task_current. - New stapbpf tapset functions kernel_string, kernel_string_n, execname, ktime_get_ns. - A new stapbpf transport layer has been implemented based on perf_events infrastructure. This transport layer removes some limitations on strings and printf() that were previously imposed by BPF's trace_printk() mechanism: - It is now possible to use format-width specifiers in printf(). - It is now possible to use more than three format specifiers in printf(). - It is now possible to use multiple '%s' format specifiers in printf(). - Using stapbpf should no longer trigger a trace_printk()-associated warning on dmesg. - In the stapbpf backend, foreach() now supports iteration of arrays with string keys. - A preview version of statistical aggregate functionality for stapbpf is now included. For now, in the stapbpf backend, aggregates only support @count(), @sum() and @avg() operations. - Added support for unhandled DWARF operator DW_OP_GNU_parameter_ref in location expressions for target symbols. * What's new in version 4.0, 2018-10-13 - Runtime/tapsets were ported to include up to kernel version 4.19-rc - A new network service, stap-exporter, is included. It glues systemtap and the web. It allows a prometheus (or compatible systems such as pcp) to consume metrics exported by systemtap scripts. Some tapset macros/functions are available to make it easier to write such scripts. See the stap-exporter(8) man page and the systemd service. - When a systemtap module is loaded, the name of the original stap script is now printed to dmesg by the kernel runtime. - On some Fedora kernels, the information necessary to automatically engage in SecureBoot module signing is hidden from systemtap. Setting the $SYSTEMTAP_SIGN environment variable forces it on. A running stap-server instance will also be needed. - Embedded-C functions marked /* guru */ may now be invoked from other tapset probes / functions, while still being invalid for normal call from an unprivileged user script. - The syscall tapset is now updated to work on kernel 4.17+. Additionally, the tapset now includes an automatic fallback alias to the sys_enter / sys_exit kernel tracepoints, if no other kprobe-based mechanism is found. These changes have brought unavoidable consequences. Raw $target variables for the syscall arguments and return probes (e.g. @entry($fd), $return, returnval()) may not longer be relied upon. Instead, use the variables defined by the tapset aliases. For example: % stap -L syscall.read syscall.read name:string fd:long buf_uaddr:long count:long argstr:string % stap -L syscall.read.return syscall.read.return name:string retval:long retstr:string to see the available variables for that syscall. See [man stapprobes] for further details. returnval() in particular is being deprecated soon; use retval in syscall.*.return probes instead. - New script language operators @kderef/@uderef and @kregister/@uregister were added. @kderef/@uderef (size,address) can be used to dereference integers and @kregister/@uregister (dwarf#) can be used to access register values. - A systemd service file has been added for systemtap.service (which runs a configurable set of scripts automatically on system startup). The existing /etc/init.d/systemtap init script has been moved to a new utility command 'systemtap-service' which preserves functionality such as configuring onboot systemtap scripts via dracut. See systemtap-service(8) for details. - The eBPF backend's string support has been improved. Strings can now be stored in variables, passed as function arguments, and stored as array keys and values. - The 3rd operand of the ternary operator '?:' in the script language now binds tighter than the binary assignment operators like '=' and '+=', just like the C language. The original operator precedence can be restored by the '--compatible 3.3' option. - The script language now supports the use of bare 'return' statements (without any return values) inside functions which do not return any values. A trailing semicolon is recommended for such return statements to avoid any potential ambiguity. The parser treats a following semicolon (';') or a closing curly bracket ('}') as a terminator for such bare return statements. - Parentheses after unary '&' with a target-symbol expression is now accepted in the script language. - Tapset functions register() and u_register() now support 8-bit x86 register names "ah", "al", "bh", "bl", "ch", "cl", "dh", and "dl" on both x86_64 and i386. And 16-bit x86 registers are now truly read as 16-bit integers instead of as 32-bit ones. - The experimental ftrace ring buffer mechanism (STP_USE_RING_BUFFER) has been deprecated and may be removed in future versions. * What's new in version 3.3, 2018-06-08 - A new "stap --example FOO.stp" mode searches the example scripts distributed with systemtap for a file named FOO.stp, so its whole path does not need to be typed in. - Systemtap's runtime has learned to deal with several of the collateral damage from kernel hardening after meltdown/spectre, including more pointer hiding and relocation. The kptr_restrict procfs flag is forced on if running on a new enough kernel. - The "stap --sysroot /PATH" option has received a revamp, so it works much better against cross-compiled environments. - The eBPF backend has learned to perform loops - at least in the userspace "begin/end" probe contexts, so one can iterate across BPF arrays for reporting. (The linux kernel eBPF interpreter precludes loops and string processing.) It can also handle much larger probe handler bodies, with a smarter register spiller/allocator. - The eBPF backend now supports uprobes, perf counter, timer, and tracepoint probes. - An rpm macro %_systemtap_tapsetdir is now defined, to make it easier for third party packages to add .stp files into the standard tapset. - Several low level locking-related fixes were added to the runtime that used uprobes/tracepoint apis, in order to work more reliably on rt kernels and on high-cpu-count machines. - Runtime/tapsets were ported to include up to kernel version 4.16. (The syscall tapsets are broken on kernel 4.17-rc, and will be fixed in a next release coming soon; PR23160.) - Add new built-in tapset function abort() which is similar to exit(), but it aborts the current probe handler (and any function calls in it) immediately instead of waiting for its completion. Probe handlers already running on *other* CPU cores, however, will still continue to their completion. Unlike error(), abort() cannot be caught by try {...} catch {...}. Similar to exit(), abort() yeilds the zero process exit code. It works with both the kernel and dyninst runtimes. This function can be disabled by the '--compatible 3.3' option. * What's new in version 3.2, 2017-10-18 - SystemTap now includes an extended Berkeley Packet Filter (eBPF) backend. This experimental backend does not use kernel modules and instead produces eBPF programs that are verified by the kernel and executed by an in-kernel virtual machine. Select this backend with the new stap option '--runtime=bpf'. For example: stap --runtime=bpf -e \ 'probe kernel.function("sys_open") { printf("hi from stapbpf!\n") }' Please see the stapbpf(8) man page for more information. - The regular expression engine now supports extraction of the matched string and subexpressions using the matched() tapset function: if ("regexculpicator" =~ "reg(ex.*p).*r") log(matched(1)) -> exculp - The translator produces better diagnostics for common/annoying case of missing debuginfo that blocks use of context $variables. - "stap -k" build trees in $TMPDIR now also include a preprocessed .i form of the generated module .c code, for problem diagnostics purposes. - The syscall.execve probes now provide a decoded env_str string vector, just like the argument vector. Because of this, the unused __count_envp() and __count_compat_evenp() functions have been deprecated. - The task_exe_file() Function has been deprecated and replaced by the current_exe_file() function. - A new probe alias input.char allows scripts to access input from stdin during runtime. * What's new in version 3.1, 2017-02-17 - Systemtap now needs C++11 to build. - Syscall and nd_syscall tapsets have been merged in a way that either dwarf-based, or non-dwarf probe gets automatically used based on debuginfo availability (e.g. probe syscall.open). To force use the dwarf based probe, a dw_syscall has been introduced (e.g. probe dw_syscall.open) and the non-dwarf syscall probes were left untouched (e.g. nd_syscall.open). - The syscall tapset files have been reorganized in a way that original big tapset files carrying many syscall probes were split into smaller 'sysc_' prefixed tapset files. This should reduce the syscall tapset maintenance burden. - The powerpc variant of syscall.compat_sysctl got deprecated on favor of syscall.sysctl32. This aligns the syscall to its respective nd_syscall and to ia64/s390/x86_64 variants too. - The syscall.compat_pselect7a (this was actually a typo, but still available for compatibility purposes with --compatible 1.3) has beed deprecated. - The 'description_auddr' convenience variable of syscall.add_key has been deprecated. - Support has been added for probing python 2 and 3 functions using a custom python helper module. Python function probes can target function entry, returns, or specific line numbers. probe python2.module("myscript").function("foo") { println($$parms) } To run with the custom python helper module, you'd use python's '-m' option like the following: stap myscript.stp -c "python -m HelperSDT myscript.py" - Java method probes now convert all types of java parameters to strings using the java toString() method before passing them to systemtap probes; new argN variables copy them into string variables. Previously, only numeric types were passed, and only by casting to integers. The previous behaviour is available with --compatible=3.0 . 3.1: probe java(...).class(...).method(...) { printf("%s", arg1) } 3.0: probe java(...).class(...).method(...) { printf("%d", $arg1) } - An older defensive measure to suppress kernel kprobes optimizations since the 3.x era has been disabled for recent kernels. This improves the performance of kernel function probes. In case of related problems, please report and work around with: # echo 0 > /proc/sys/debug/kprobes-optimization - Context variables in .return probes should be accessed with @entry($var) rather than $var, to make it clear that entry-time snapshots are being used. The latter construct now generates a warning. Availability testing with either @defined(@entry($var)) or @defined($var) works. - Tapsets containing process probes may now be placed in the special $prefix/share/systemtap/tapset/PATH/ directory to have their process parameter prefixed with the location of the tapset. For example, process("foo").function("NAME") expands to process("/usr/bin/foo").function("NAME") when placed in $prefix/share/systemtap/tapset/PATH/usr/bin/ This is intended to help write more reusable tapsets for userspace binaries. - The implementation of "var <<< X" for each aggregate variable is now specially compiled to compute only the script-requested @op(var) values, not all potential ones. This speeds up the <<< operations. - Systemtap now warns if script arguments given on the command line are unused, instead of mentioned by the script with $n/@n. - Netfilter tapsets now provide variables data_hex and data_str to display packet contents in hexadecimal and ASCII respectively. - Translator now accepts new @const() operator for convenient expressing constants in tapset code, or guru-mode scripts. See stap(1) for details. - New -T option allows the script to be terminated after a specified number of seconds. This is a shortcut for adding the probe, timer {exit()}. - New installcheck-parallel testsuite feature allows running the tests in parallel in order to save time. See testsuite/README for details. - New tapset functions set_user_string(), set_user_string_n(), set_user_long() set_user_int(), set_user_short(), set_user_char() and set_user_pointer() to write a value of specified type directly to a user space address. - New tapset functions user_buffer_quoted(), user_buffer_quoted_error(), kernel_buffer_quoted(), and kernel_buffer_quoted_error() to print a buffer of an exact length. These functions can handle '\0' characters as well. - New statistics @variance() operator using the Welford's online algorithm for per-cpu computation, and the Total Variance formula authored by Niranjan Kamat and Arnab Nandi from the Ohio State University for the cross-cpu aggregation. - New command within interactive mode, sample. Allows you to search through all included example scripts to load for further editing or running. Sample and example scripts have been moved to /usr/share/systemtap/examples. A symlink in the former location under $docdir links to it. * What's new in version 3.0, 2016-03-27 - The new experimental "interactive" mode, specified by "stap -i", drops you into a command-line prompt where you can build up a script, run it, edit it, run it again, etc. Type "help" for a list of commands. - New experimental --monitor[=INTERVAL] option similar to unix "top". This allows users to see statistics about the running module(uptime, module name, invoker uid, memory sizes, global variables, and the current probe list along with their statistics). An interface is also provided to allow control over the running module(resetting global variables, sorting the list of probes, deactivating and reactivating probes). - The performance of associative arrays have been dramatically improved, especially for densely filled tables and for multiple indexes. The hash tables behind these arrays is now sized as a function of the array maximum size with an optional MAPHASHBIAS space/time tradeoff knob. - Add macros @prints to print a scalar aggregate variable, @prints[1-9] to print an array aggregate (of given index-arity), formatted similarly to the automatic printing of written-only global variables. global a, b probe oneshot { a <<< 1; b[tid()] <<< 2 } probe end { @prints(a); @prints1(b) } - Functions may now be overloaded during module runtime using the "next" statement in script functions and STAP_NEXT macro for embedded-C functions. They may also be overloaded by number of parameters during compile time. For example, Runtime overloading: function f() { if (condition) next; print("first function") } function f() %{ STAP_NEXT; print("second function") %} function f() { print("third function") } For the given functions above, a functioncall f(), will execute the body of the third function if condition evaluates to true and print "third function". Note that the second function is unconditionally nexted. Parameter overloading: function g() { print("first function") } function g(x) { print("second function") } g() -> "first function" g(1) -> "second function" Note that runtime overloading does not occur in the above example as the number of parameters of the functions differ. The use of a next statement inside a function while no more overloads remain will trigger a runtime exception. The function candidates are selected at compile time and is determined by the number of arguments provided for the functioncall. - Add Czech version of manual pages. - The stap compile server will log the stap client's options that are passed to the server. The options that get logged on the server will include the script name or the -e script, depending on which is used by the client. - Embedded-C functions and blocks may now access script level global variables using the STAP_GLOBAL_GET_* and STAP_GLOBAL_SET_* macros. To read or write the script global var, the /* pragma:read:var */ or /* pragma:write:var */ marker must be placed in the embedded-C function or block. The written type must match the type inferred at script level. Scalars: STAP_GLOBAL_SET_var(STAP_GLOBAL_GET_var()+1) -> increments script global var by 1 STAP_GLOBAL_SET_var("hello") Associative arrays: STAP_GLOBAL_GET_var(index-1, ..., index-n) STAP_GLOBAL_SET_var(index-1, ..., index-n, new value) - Probe point brace expansion is now supported to improve brevity in specifying probe points. For example, process.{function("a"), function("b").{call,return}} => process.function("a"), process.function("b").call, process.function("b").return process.{function("*").callees,plt}? => process.function("*").callees?, process.plt? {kernel,module("nfs")}.function("nfs*")! => kernel.function("nfs*")!, module("nfs").function("nfs*")! - Profiling timers at arbitrary frequencies are now provided and perf probes now support a frequency field as an alternative to sampling counts. probe timer.profile.freq.hz(N) probe perf.type(N).config(M).hz(X) The specified frequency is only accurate up to around 100hz. You may need to provide a higher value to achieve the desired rate. - Added support for private global variables and private functions. The scope of these is limited to the tapset file they are defined in (PR19136). - New tapset function string_quoted() to quote and \-escape general strings. String $context variables that are pretty-printed are now processed with such a quotation engine, falling back to a 0x%x (hex pointer) on errors. - Functions get_mmap_args() and get_32mmap_args() got deprecated. * What's new in version 2.9, 2015-10-08 - SystemTap now uses symbols from /proc/kallsyms when kernel debuginfo is not available. - New --prologue-searching[=WHEN] option has been added to stap with '-P' being its short counterpart. Using --prologue-searching=never turns prologue searching deliberately off working around issue of int_arg() returning wrong value when a 32-bit userspace binary having debug info is being probed with active prologue searching (PR18649). - The powerpc variant of nd_syscall.compat_sysctl got deprecated on favor of nd_syscall.sysctl32. This aligns the nd_syscall to its respective syscall and to ia64/s390/x86_64 variants too. - New tapset function assert(expression, msg) has been added. - Embedded-C functions may now use the new STAP_PRINTF(fmt, ...) macro for output. - New tapset functions fullname_struct_path and fullname_struct_nameidata resolve full path names from internal kernel struct pointers. - New tapset functions arch_bytes() and uarch_bytes() to obtain address size for kernel and user space respectively. - New tapset function switch_file() allows control over rotation of output files. - The [nd_]syscall tapset got autodocumented. Related paragraph got added to PDF and HTML tapset reference. Also a new tapset::syscall 3stap man page got added. - Embedded-C functions with parameter arity-0 can now be marked with the /* stable */ /* pure */ pragmas, if (roughly speaking) the function is side-effect-free and idempotent. The translator may execute these speculatively and have their results memoized. This lets probes with multiple calls to such functions run faster. Context variable ($foo) getter functions (in non-guru mode), and numerous tapset functions are now marked as /* stable */ /* pure */. Several example scripts have been modified to eschew explicit memoization. - Callee probe points now support '.return' and '.call' suffix. For example, process("proc").function("foo").callee("bar").return will fire upon returning from bar when called by foo. process("proc").function("foo").callee("bar").call will only fire for non-inlined callees. - The following tapset variables and functions are deprecated in version 2.9: - The '__int32_compat' library macro got deprecated in favor of new '__compat_long' library macro. - The 'uargs' convenience variable of the 'seccomp' syscall probe got deprecated in favor of new 'uargs_uaddr' variable. - SystemTap has reduced its memory consumption by using interned_strings (a wrapper for boost::string_ref) in place of std::string instances. The change is to reduce the number of duplicate strings created by replacing them with interned_strings which act like pointers to existing strings. For the implementation of interned_string, see stringtable.h * What's new in version 2.8, 2015-06-17 - SystemTap has improved support for probing golang programs. Work has been done to be able to handle DWARF information, reporting file names, line numbers, and column numbers, and tolerance of odd characters in symbol names. - The function::*, probe::* and new macro::* man pages cross-references the enclosing tapset::* man page. For example: function::pn(3stap) mentions tapset::pn(3stap) in the SEE ALSO section - New stapref(1) man page provides a reference for the scripting language. The stapref page contains an overview of the features available in the language, such as keywords, data types, operators and more. - The @task macro performs the very common @cast to a task_struct. The embedded-C bodies of task_current() and pid2task() are now wrapped by @task, which gives them a debuginfo type on the return value. With autocast type propagation, this removes the need for any explicit @cast in many places. Other places which take untyped task pointers as parameters, for instance, now use @task as well to simplify their code. - New namespace-aware tapset functions [task_]ns_*() and ia new option --target-namespaces=PID to denote a target set of namespaces corresponding to the PID's namespaces. The namespace-aware tapsets will return values relative to the target namespaces if specified, or the stap process' namespaces. - Netfilter probes now attempt to decode Spanning Tree Protocol packets into local variables: probe netfilter.bridge.*, br_* variables, stp_dump.stp sample script. - Colorization of error string tokens is made more robust, especially in presence of $N/@N substitution. - The following tapset variables and functions are deprecated in version 2.8: - The 'hostname_uaddr' variable in the syscall.setdomainname and nd_syscall.setdomainname probe aliases have been deprecated in favor of the new 'domainname_uaddr' variable. - The 'fd' and 'fd_str' variables in the syscall.execveat and nd_syscall.execveat probe aliases have been deprecated in favor of the new 'dirfd' and 'dirfd_str' variables. * What's new in version 2.7, 2015-02-18 - Some systemtap sample scripts are now identified with the "_best" keyword, because they are generally useful or educational. They are now promoted within the generated index files. - Passing strings to and from functions has become faster due to optimization (passing some strings by reference instead of by value/copy). It may be disabled by using the unoptimize flag (-u). To make embedded-C functions eligible for the same optimization, use the pragma /* unmodified-fnargs */ to indicate that the function body will not modify the function arguments. Remember to use MAXSTRINGLEN for string length, rather than sizeof(string_arg) (which might now be a pointer). - SystemTap now allows .function probes to be specified by their full function name, file, and declaration line number. Use the .statement probe to probe a specific line number. - Tracepoint probes can now also be specified by the target subsystem. For example, the following are all supported: probe kernel.trace("sched:sched_switch") --> probe sched_switch found in the sched subsystem probe kernel.trace("sched:*") --> probe all tracepoints in sched subsystem As a result, tapset functions such as pn() will now return a different string than before. To retain the previous behaviour, use '--compatible=2.6'. - The following functions are deprecated in release 2.7: - _adjtx_mode_str(), _statfs_f_type_str(), _waitid_opt_str(), _internal_wait_opt_str(), and _epoll_events_str(). - New tapset functions [u]symfileline(), [u]symfile() and [u]symline() will return a string containing the specified portion of the filename:linenumber match from a given address. Using these functions may result in large generated modules from stored address->file:line information. * What's new in version 2.6, 2014-09-05 - SystemTap now supports on-the-fly arming/disarming of certain probe types: kprobes, uprobes, and timer.*s(NUM) probes. For example, this probe probe kernel.function("vfs_read") if (i > 4) { ... } will automatically register/unregister the associated kprobe on vfs_read whenever the value of the condition changes (as some probe handler modifies 'i'). This allows us to avoid probe overhead when we're not interested. If the arming capability is not relevant/useful, nest the condition in the normal probe handler: probe kernel.function("vfs_read") { if (i > 4) { ... } } - statement("*@file:NNN").nearest probes now available to let systemtap translate probe to nearest probe-able line to one given if necessary - process("PATH").library("PATH").plt("NAME").return probes are now supported. - SystemTap now supports SDT probes with operands that refer to symbols. - While in listing mode (-l/-L), probes printed are now more consistent and precise. - Statement probes now support enumerated linenos to probe discontiguous linenos using the form: process.statement("foo@file.c:3,5-7,9") - Statement counting is now suppressed in the generated c code for probes that are non-recursive and loop-free. Statement counting can be turned back on in unoptimize mode (-u). - SystemTap now asserts that the PID provided for a process probe corresponds to a running process. - DWARF process probes can be bound to a specific process using the form: process(PID).function("*") - SystemTap now accepts additional scripts through the new -E SCRIPT option. There still needs to be a main script specified through -e or file in order to provide an additional script. This makes it feasible to have scripts in the $HOME/.systemtap/rc file. For example: -E 'probe begin, end, error { log("systemtap script " . pn()) }' -E 'probe timer.s(30) { error ("timeout") } The -E SCRIPT option can also be used in listing mode (-l/-L), such that probe points for the additional scripts will not listed, but other parts of the script are still available, such as macros or aliases. - SystemTap now supports array slicing within foreach loop conditions, delete statements and membership tests. Wildcards are represented by "*". Examples of the expressions are: foreach ([a,b,c] in val[*,2,*]) delete val[*, 2, *] [*, 2, *] in val - Integer expressions which are derived from DWARF values, like context $vars, @cast, and @var, will now carry that type information into subsequent reads. Such expressions can now use "->" and "[]" operators, as can local variables which were assigned such values. foo = $param->foo; printf("x:%d y:%d\n", foo->x, foo->y) printf("my value is %d\n", ($type == 42 ? $foo : $bar)->value) printf("my parent pid is %d\n", task_parent(task_current())->tgid) * What's new in version 2.5, 2014-04-30 - Systemtap now supports backtracing through its own, invoking module. - Java probes now support backtracing using the print_java_backtrace() and sprint_java_backtrace() functions. - Statement probes (e.g. process.statement) are now faster to resolve, more precise, and work better with inlined functions. - New switches have been added to help inspect the contents of installed library files: stap --dump-functions --> list all library functions and their args stap --dump-probe-aliases --> list all library probe aliases - The heuristic algorithms used to search for function-prologue endings were improved, to cover more optimization (or lack-of-optimization, or incorrect-debuginfo) cases. These heuristics are necessary to find $context parameters for some function-call/entry probes. We recommend programs be built with CFLAGS+=-grecord-gcc-switches to feed information to the heuristics. - The stap --use-server option now more correctly supports address:port type parametrization, for manual use in the absence of avahi. - A new probe alias "oneshot" allows a single quick script fragment to run, then exit. - The argv tapset now merges translate-time and run-time positional arguments, so all of these work: stap -e 'probe oneshot {println(argv[1]," ",argv[2])}' hello world stap -e 'probe oneshot {println(argv[1]," ",argv[2])}' \ -G argv_1=hello -G argv_2=world staprun hello.ko argv_1=hello argv_2=world - SystemTap now falls back on the symbol table for probing functions in processes if the debuginfo is not available. - SystemTap now supports a %( guru_mode == 0 /* or 1 */ %) conditional for making dual-use scripts. - SystemTap now supports UEFI/SecureBoot systems, via machine-owner-keys maintained by a trusted stap-server on the network. (Key enrollment requires a one-time reboot and BIOS conversation.) https://sourceware.org/systemtap/wiki/SecureBoot - SystemTap now reports more accurate and succinct errors on type mismatches. - Embedded-C functions may use STAP_RETURN(value) instead of the more wordy STAP_RETVALUE assignment followed by a "goto out". The macro supports numeric or string values as appropriate. STAP_ERROR(...) is available to return with a (catchable) error. - Some struct-sockaddr fields are now individually decoded for socket-related syscalls: probe syscall.connect { println (uaddr_af, ":", uaddr_ip) } - The documentation for the SystemTap initscript service and the SystemTap compile-server service have been completely converted from README files to man pages (see systemtap(8) and stap-server(8)). - SystemTap is now capable of inserting modules early during the boot process on dracut-based systems. See the 'onboot' command in systemtap(8) for more information. - DWARF probes can now use the '.callee[s]' variants, which allow more precise function probing. For example, the probe point process("myproc").function("foo").callee("bar") will fire upon entering bar() from foo(). A '.callees' probe will instead place probes on all callees of foo(). Note that this also means that probe point wildcards should be used with more care. For example, use signal.*.return rather than signal.*.*, which would also match '.callees'. See stapprobes(3stap) for more info. This feature requires at least GCC 4.7. - A few new functions in the task_time tapsets, as well as a new tapset function task_ancestry(), which prints out the parentage of a process. - The kprocess.exec probe has been updated to use syscall.execve, which allows access to the new process' arguments (through the new 'argstr' or 'args' variables) as well as giving better support across kernel versions. Note also that the 'filename' variable now holds the filename (quoted), or the address (unquoted) if it couldn't be retrieved. - The [s]println() function can now be called without any arguments to simply print a newline. - Suggestions are now provided when markers could not be resolved. For example, process("stap").mark("benchmart") will suggest 'benchmark'. - SystemTap colors can now be turned off by simply setting SYSTEMTAP_COLORS to be empty, rather than having to make it invalid. - There is a new context tapset function, pnlabel(), which returns the name of the label which fired. - The following tapset variables and functions are deprecated in release 2.5: - The 'clone_flags', 'stack_start', 'stack_size', 'parent_tid_uaddr', and 'child_tid_uaddr' variables in the 'syscall.fork' and 'nd_syscall.fork' probe aliases. - The '_sendflags_str()' and '_recvflags_str()' functions have been deprecated in favor of the new '_msg_flags_str()' function. - The 'flags' and 'flags_str' variables in the 'syscall.accept' and 'nd_syscall.accept' probe alias. - The 'first', 'second', and 'uptr_uaddr' variables in the 'syscall.compat_sys_shmctl', and 'nd_syscall.compat_sys_shmctl' probe aliases have been deprecated in favor of the new 'shmid', 'cmd', and 'buf_uaddr' variables. * What's new in version 2.4, 2013-11-06 - Better suggestions are given in many of the semantic errors in which alternatives are provided. Additionally, suggestions are now provided when plt and trace probes could not be resolved. For example, kernel.trace("sched_siwtch") will suggest 'sched_switch'. - SystemTap is now smarter about error reporting. Errors from the same source are considered duplicates and suppressed. A message is displayed on exit if any errors/warnings were suppressed. - Statistics aggregate typed objects are now implemented locklessly, if the translator finds that they are only ever read (using the foreach / @count / etc. constructs) in a probe-begin/end/error. - SystemTap now supports probing inside virtual machines using the libvirt and unix schemes, e.g. stap -ve 'probe timer.s(1) { printf("hello!\n") }' \ --remote=libvirt://MyVirtualMachine Virtual machines managed by libvirt can be prepared using stapvirt. See stapvirt(1) and the --remote option in stap(1) for more details. - Systemtap now checks for and uses (when available) the .gnu_debugdata section which contains a subset of debuginfo, useful for backtraces and function probing - SystemTap map variables are now allocated with vmalloc() instead of with kmalloc(), which should cause memory to be less fragmented. - Although SystemTap itself requires elfutils 0.148+, staprun only requires elfutils 0.142+, which could be useful with the '--disable-translator' configure switch. - Under FIPS mode (/proc/sys/crypto/fips_enabled=1), staprun will refuse to load systemtap modules (since these are not normally signed with the kernel's build-time keys). This protection may be suppressed with the $STAP_FIPS_OVERRIDE environment variable. - The stap-server client & server code now enable all SSL/TLS ciphers rather than just the "export" subset. - For systems with in-kernel utrace, 'process.end' and 'thread.end' probes will hit before the target's parent process is notified of the target's death. This matches the behavior of newer kernels without in-kernel utrace. * What's new in version 2.3, 2013-07-25 - More context-accessing functions throw systemtap exceptions upon a failure, whereas in previous versions they might return non-error sentinel values like "" or "". Use try { } / catch { } around these, or new wrapper functions such as user_string_{n_}quoted() that internally absorb exceptions. - java("org.my.MyApp") probes are now restricted to pre-existing jvm pid's with a listing in jps -l output to avoid recursive calls - The tapset [nd_]syscall.semop parameter tsops_uaddr is renamed sops_uaddr for consistency with [nd_]syscall.semtimedop. - The udp.stp tapset adds some ip-address/port variables. - A new guru-mode-only tapset function raise() is available to send signals to the current task. - Support for the standard Posix ERE named character classes has been added to the regexp engine, e.g. [:digit:], [:alpha:], ... - A substantial internal overhaul of the regexp engine has resulted in correct behaviour on further obscure edge cases. The regexp engine now implements the ERE standard and correctly passes the testsuite for the glibc regexp engine (minus portions corresponding to unimplemented features -- i.e. subexpression capture and reuse). - Alternative functions are now suggested when function probes could not be resolved. For example, kernel.function("vfs_reads") will suggest vfs_read. Other probes for which suggestions are made are module.function, process.function, and process.library.function. - Has life been a bit bland lately? Want to spice things up? Why not write a few faulty probes and feast your eyes upon the myriad of colours adorning your terminal as SystemTap softly whispers in your ear... 'parse error'. Search for '--color' in 'man stap' for more info. - The following tapset functions are deprecated in release 2.3: 'stap_NFS_CLIENT', '__getfh_inode', '_success_check', '_sock_prot_num', '_sock_fam_num', '_sock_state_num', '_sock_type_num', and '_sock_flags_num'. * What's new in version 2.2.1, 2013-05-16 * What's new in version 2.2, 2013-05-14 - Experimental support has been added for probing Java methods using Byteman 2.0 as a backend. Java method probes can target method entries, returns, or specific statements in the method as specified by line number. probe java("org.my.MyApp").class("^java.lang.Object").method("foo(int)") { println($$parms) } See java/README for information on how to set up Java/Byteman functionality. Set env STAPBM_VERBOSE=yes for more tracing. - The stap -l output and pn() tapset function's return value may be slightly different for complicated web of wildcarded/aliased probes. - The dyninst backend has improved in several aspects: - Setting custom values for global variables is now supported, both with -G when compiling a script, and from the stapdyn command line when loading a precompiled module. - A high-performance shared-memory-based transport is used for trace data. - A systemd service file and tmpfile have been added to allow systemtap-server to be managed natively by systemd. - Due to the removal of register_timer_hook in recent kernels, the behaviour of timer.profile has been changed slightly. This probe is now an alias which uses the old mechanism where possible, but falls back to perf.sw.cpu_clock or another mechanism when the kernel timer hook is not available. To require the kernel timer hook mechanism in your script, use timer.profile.tick instead of timer.profile. - The following tapset variables are deprecated in release 2.2: - The 'origin' variables in the 'generic.fop.llseek', 'generic.fop.llseek.return', and 'nfs.fop.llseek' probes. The 'origin' variable has been replaced by the 'whence' variable. - The 'page_index' variable in the 'vfs.block_sync_page' and 'vfs.buffer_migrate_page' probe aliases. - The 'write_from' and 'write_upto' variables in the '_vfs.block_prepare_write' and '_vfs.block_prepare_write.return' probe aliases. - The 'regs' variable in the 'syscall.sigaltstack', 'nd_syscall.sigaltstack', 'syscall.fork', and 'nd_syscall.fork' probe aliases. - The 'first', 'second', 'third', and 'uptr_uaddr' variables in the 'syscall.compat_sys_shmat' and 'nd_syscall.compat_sys_shmat' probe aliases. - The following tapset functions are deprecated in release 2.2: 'ppos_pos', '_dev_minor', and '_dev_major' - The folowing tapset functions used to return error strings instead of raising an error. The original behavior is deprecated in release 2.2. 'ctime', 'probemod', 'modname' * What's new in version 2.1, 2013-02-13 - EMACS and VIM editor modes for systemtap source files are included / updated. - The translator now eliminates duplicate tapset files between its preferred directory (as configured during the build with --prefix=/ or specified with the -I /path option), and files it may find under $XDG_DATA_DIRS. This should eliminate a class of conflicts between parallel system- and hand-built systemtap installations. - The translator accepts a --suppress-time-limits option, which defeats time-related constraints, to allows probe handlers to run for indefinite periods. It requires the guru mode (-g) flag to work. Add the earlier --suppress-handler-errors flag for a gung-ho "just-keep-going" attitude. - Perf event probes may now be read on demand. The counter probe is defined using the counter-name part: probe perf.type(0).config(0).counter("NAME"). The counter is read in a user space probe using @perf("NAME"), e.g. process("PROCESS").statement("func@file") {stat <<< @perf("NAME")} - Perf event probes may now be bound to a specific task using the process-name part: probe perf.type(0).config(0).process("NAME") { } If the probed process name is not specified, then it is inferred from the -c CMD argument. - Some error messages and warnings now refer to additional information that is found in man pages. These are generally named error::FOO or warning::BAR (in the 7stap man page section) and may be read via % man error::FOO % man warning::BAR - The dyninst backend has improved in several aspects: - The runtime now allows much more concurrency when probing multithreaded processes, and will also follow probes across forks. - Several new probe types are now supported, including timers, function return, and process.begin/end and process.thread.begin/end. - Semaphores for SDT probes are now set properly. - Attaching to existing processes with -x PID now works. - The foreach looping construct can now sort aggregate arrays by the user's choice of aggregating function. Previously, @count was implied. e.g.: foreach ([x,y] in array @sum +) { println(@sum(array[x,y])) } - Proof of concept support for regular expression matching has been added: if ("aqqqqqb" =~ "q*b") { ... } if ("abc" !~ "q*b") { ... } The eventual aim is to support roughly the same functionality as the POSIX Extended Regular Expressions implemented by glibc. Currently missing features include extraction of the matched string and subexpressions, and named character classes ([:alpha:], [:digit:], &c). Special thanks go to the re2c project, whose public domain code this functionality has been based on. For more info on re2c, see: http://sourceforge.net/projects/re2c/ - The folowing tapset variables are deprecated in release 2.1 and will be removed in release 2.2: - The 'send2queue' variable in the 'signal.send' probe. - The 'oldset_addr' and 'regs' variables in the 'signal.handle' probe. - The following tapset probes are deprecated in release 2.1 and will be removed in release 2.2: - signal.send.return - signal.handle.return * What's new in version 2.0, 2012-10-09 - Systemtap includes a new prototype backend, which uses Dyninst to instrument a user's own processes at runtime. This backend does not use kernel modules, and does not require root privileges, but is restricted with respect to the kinds of probes and other constructs that a script may use. Users from source should configure --with-dyninst and install a fresh dyninst snapshot such as that in Fedora rawhide. It may be necessary to disable conflicting selinux checks; systemtap will advise. Select this new backend with the new stap option --runtime=dyninst and a -c target process, along with normal options. (-x target processes are not supported in this prototype version.) For example: stap --runtime=dyninst -c 'stap -l begin' \ -e 'probe process.function("main") { println("hi from dyninst!") }' - To aid diagnosis, when a kernel panic occurs systemtap now uses the panic_notifier_list facility to dump a summary of its trace buffers to the serial console. - The systemtap preprocessor now has a simple macro facility as follows: @define add(a,b) %( ((@a)+(@b)) %) @define probegin(x) %( probe begin { @x } %) @probegin( foo = @add(40, 2); print(foo) ) Macros defined in the user script and regular tapset .stp files are local to the file. To get around this, the tapset library can define globally visible 'library macros' inside .stpm files. (A .stpm file must contain a series of @define directives and nothing else.) The status of the feature is experimental; semantics of macroexpansion may change (unlikely) or expand in the future. - Systemtap probe aliases may be used with additional suffixes attached. The suffixes are passed on to the underlying probe point(s) as shown below: probe foo = bar, baz { } probe foo.subfoo.option("gronk") { } // expands to: bar.subfoo.option("gronk"), baz.subfoo.option("gronk") In practical terms, this allows us to specify additional options to certain tapset probe aliases, by writing e.g. probe syscall.open.return.maxactive(5) { ... } - To support the possibility of separate kernel and dyninst backends, the tapsets have been reorganized into separate folders according to backend. Thus kernel-specific tapsets are located under linux/, the dyninst-specific ones under dyninst/ - The backtrace/unwind tapsets have been expanded to allow random access to individual elements of the backtrace. (A caching mechanism ensures that the backtrace computation run at most once for each time a probe fires, regardless of how many times or what order the query functions are called in.) New tapset functions are: stack/ustack - return n'th element of backtrace callers/ucallers - return first n elements of backtrace print_syms/print_usyms - print full information on a list of symbols sprint_syms/sprint_usyms - as above, but return info as a string The following existing functions have been superseded by print_syms() et al.; new scripts are recommended to avoid using them: print_stack() print_ustack() sprint_stack() sprint_ustack() - The probefunc() tapset function is now myproc-unprivileged, and can now be used in unprivileged scripts for such things as profiling in userspace programs. For instance, try running systemtap.examples/general/para-callgraph.stp in unprivileged mode with a stapusr-permitted probe. The previous implementation of probefunc() is available with "stap --compatible=1.8". - Preprocessor conditional to vary code based on script privilege level: unprivileged -- %( systemtap_privilege == "stapusr" %? ... %) privileged -- %( systemtap_privilege != "stapusr" %? ... %) or, alternately %( systemtap_privilege == "stapsys" || systemtap_privilege == "stapdev" %? ... %) - To ease migration to the embedded-C locals syntax introduced in 1.8 (namely, STAP_ARG_* and STAP_RETVALUE), the old syntax can now be re-enabled on a per-function basis using the /* unmangled */ pragma: function add_foo:long(a:long, b:long) %{ /* unmangled */ THIS->__retvalue = THIS->a + STAP_ARG_b; %} Note that both the old and the new syntax may be used in an /* unmangled */ function. Functions not marked /* unmangled */ can only use the new syntax. - Adjacent string literals are now glued together irrespective of intervening whitespace or comments: "foo " "bar" --> "foo bar" "foo " /* comment */ "bar" --> "foo bar" Previously, the first pair of literals would be glued correctly, while the second would cause a syntax error. * What's new in version 1.8, 2012-06-17 - staprun accepts a -T timeout option to allow less frequent wake-ups to poll for low-throughput output from scripts. - When invoked by systemtap, the kbuild $PATH environment is sanitized (prefixed with /usr/bin:/bin:) in an attempt to exclude compilers other than the one the kernel was presumed built with. - Printf formats can now use "%#c" to escape non-printing characters. - Pretty-printed bitfields use integers and chars use escaped formatting for printing. - The systemtap compile-server and client now support IPv6 networks. - IPv6 addresses may now be specified on the --use-server option and will be displayed by --list-servers, if the avahi-daemon service is running and has IPv6 enabled. - Automatic server selection will automatically choose IPv4 or IPv6 servers according to the normal server selection criteria when avahi-daemon is running. One is not preferred over the other. - The compile-server will automatically listen on IPv6 addresses, if available. - To enable IPv6 in avahi-daemon, ensure that /etc/avahi/avahi-daemon.conf contains an active "use-ipv6=yes" line. After adding this line run "service avahi-daemon restart" to activate IPv6 support. - See man stap(1) for details on how to use IPv6 addresses with the --use-server option. - Support for DWARF4 .debug_types sections (for executables and shared libraries compiled with recent GCC's -gdwarf-4 / -fdebug-types-section). PR12997. SystemTap now requires elfutils 0.148+, full .debug_types support depends on elfutils 0.154+. - Systemtap modules are somewhat smaller & faster to compile. Their debuginfo is now suppressed by default; use -B CONFIG_DEBUG_INFO=y to re-enable. - @var now an alternative language syntax for accessing DWARF variables in uprobe and kprobe handlers (process, kernel, module). @var("somevar") can be used where $somevar can be used. The @var syntax also makes it possible to access non-local, global compile unit (CU) variables by specifying the CU source file as follows @var("somevar@some/src/file.c"). This will provide the target variable value of global "somevar" as defined in the source file "some/src/file.c". The @var syntax combines with all normal features of DWARF target variables like @defined(), @entry(), [N] array indexing, field access through ->, taking the address with the & prefix and shallow or deep pretty printing with a $ or $$ suffix. - Stap now has resource limit options: --rlimit-as=NUM --rlimit-cpu=NUM --rlimit-nproc=NUM --rlimit-stack=NUM --rlimit-fsize=NUM All resource limiting has been moved from the compile server to stap itself. When running the server as "stap-server", default resource limit values are specified in ~stap-server/.systemtap/rc. - Bug CVE-2012-0875 (kernel panic when processing malformed DWARF unwind data) is fixed. - The systemtap compile-server now supports multiple concurrent connections. Specify the desired maximum number of concurrent connections with the new stap-server/stap-serverd --max-threads option. Specify a value of '0' to tell the server not to spawn any new threads (handle all connections serially in the main thread). The default value is the number of processor cores on the host. - The following tapset functions are deprecated in release 1.8 and will be removed in release 1.9: daddr_to_string() - SystemTap now mangles local variables to avoid collisions with C headers included by tapsets. This required a change in how embedded-C functions access local parameters and the return value slot. Instead of THIS->foo in an embedded-C function, please use the newly defined macro STAP_ARG_foo (substitute the actual name of the argument for 'foo'); instead of THIS->__retvalue, use the newly defined STAP_RETVALUE. All of the tapsets and test cases have been adapted to use this new notation. If you need to run code which uses the old THIS-> notation, run stap with the --compatible=1.7 option. - There is updated support for user-space probing against kernels >= 3.5, which have no utrace but do have the newer inode-uprobes work by Srikar Dronamraju and colleagues. For kernels < 3.5, the following 3 sets of kernel patches would need to be backported to your kernel to use this preliminary user-space probing support: - inode-uprobes patches: - 2b144498350860b6ee9dc57ff27a93ad488de5dc - 7b2d81d48a2d8e37efb6ce7b4d5ef58822b30d89 - a5f4374a9610fd7286c2164d4e680436727eff71 - 04a3d984d32e47983770d314cdb4e4d8f38fccb7 - 96379f60075c75b261328aa7830ef8aa158247ac - 3ff54efdfaace9e9b2b7c1959a865be6b91de96c - 35aa621b5ab9d08767f7bc8d209b696df281d715 - 900771a483ef28915a48066d7895d8252315607a - e3343e6a2819ff5d0dfc4bb5c9fb7f9a4d04da73 - exec tracepoint kernel patch: - 4ff16c25e2cc48cbe6956e356c38a25ac063a64d - task_work_add kernel patches: - e73f8959af0439d114847eab5a8a5ce48f1217c4 - 4d1d61a6b203d957777d73fcebf19d90b038b5b2 - 413cd3d9abeaef590e5ce00564f7a443165db238 - dea649b8ac1861107c5d91e1a71121434fc64193 - f23ca335462e3c84f13270b9e65f83936068ec2c * What's new in version 1.7, 2012-02-01 - Map inserting and deleting is now significantly faster due to improved hashing and larger hash tables. The hashes are also now randomized to provide better protection against deliberate collision attacks. - Formatted printing is faster by compiling the formatting directives to C code rather than interpreting at run time. - Systemtap loads extra command line options from $SYSTEMTAP_DIR/rc ($HOME/.systemtap/rc by default) before the normal argc/argv. This may be useful to activate site options such as --use-server or --download-debuginfo or --modinfo. - The stap-server has seen many improvements, and is no longer considered experimental. - The stap-server service (initscript) now supports four new options: -D MACRO[=VALUE] --log LOGFILE --port PORT-NUMBER --SSL CERT-DATABASE These allow the specification of macro definitions to be passed to stap by the server, the location of the log file, network port number and NSS certificate database location respectively. These options are also supported within individual server configuration files. See stap-server and initscript/README.stap-server for details. The stap-server is no longer activated by default. - process("PATH").[library("PATH")].function("NAME").exported probes are now supported to filter function() to only exported instances. - The translator supports a new --suppress-handler-errors option, which causes most runtime errors to be turned into quiet skipped probes. This also disables the MAXERRORS and MAXSKIPPED limits. - Translator warnings have been standardized and controlled by the -w / -W flags. - The translator supports a new --modinfo NAME=VALUE option to emit additional MODULE_INFO(n,v) macros into the generated code. - There is no more fixed maximum number of VMA pages that will be tracked at runtime. This reduces memory use for those scripts that don't need any, or only limited target process VMA tracking and allows easier system wide probes inspecting shared library variables and/or user backtraces. stap will now silently ignore -DTASK_FINDER_VMA_ENTRY_ITEMS. - The tapset functions remote_id() and remote_uri() identify the member of a swarm of "stap --remote FOO --remote BAR baz.stp" concurrent executions. - Systemtap now supports a new privilege level and group, "stapsys", which is equivalent to the privilege afforded by membership in the group "stapdev", except that guru mode (-g) functionality may not be used. To support this, a new option, --privilege=[stapusr|stapsys|stapdev] has been added. --privilege=stapusr is equivalent to specifying the existing --unprivileged option. --privilege=stapdev is the default. See man stap(1) for details. - Scripts that use kernel.trace("...") probes compile much faster. - The systemtap module cache is cleaned less frequently, governed by the number of seconds in the $SYSTEMTAP_DIR/cache/cache_clean_interval_s file. - SDT can now define up to 12 arguments in a probe point. - Parse errors no longer generate a cascade of false errors. Instead, a parse error skips the rest of the current probe or function, and resumes at the next one. This should generate fewer and better messages. - Global array wrapping is now supported for both associative and statistics typed arrays using the '%' character to signify a wrapped array. For example, 'global foo%[100]' would allow the array 'foo' to be wrapped if more than 100 elements are inserted. - process("PATH").library("PATH").plt("NAME") probes are now supported. Wildcards are supported in the plt-name part, to refer to any function in the program linkage table which matches the glob pattern and the rest of the probe point. - A new option, --dump-probe-types, will dump a list of supported probe types. If --unprivileged is also specified, the list will be limited to probe types which are available to unprivileged users. - Systemtap can now automatically download the required debuginfo using abrt. The --download-debuginfo[=OPTION] can be used to control this feature. Possible values are: 'yes', 'no', 'ask', and a positive number representing the timeout desired. The default behavior is to not automatically download the debuginfo. - The translator has better support for probing C++ applications by better undertanding of compilation units, nested types, templates, as used in probe point and @cast constructs. - On 2.6.29+ kernels, systemtap can now probe kernel modules that arrive and/or depart during the run-time of a session. This allows probing of device driver initialization functions, which had formerly been blacklisted. - New tapset functions for cpu_clock and local_clock access were added. - There is some limited preliminary support for user-space probing against kernels such as linux-next, which have no utrace but do have the newer inode-uprobes work by Srikar Dronamraju and colleagues. - The following probe types are deprecated in release 1.7 and will be removed in release 1.8: kernel.function(number).inline module(string).function(number).inline process.function(number).inline process.library(string).function(number).inline process(string).function(number).inline process(string).library(string).function(number).inline - The systemtap-grapher is deprecated in release 1.7 and will be removed in release 1.8. - The task_backtrace() tapset function was deprecated in 1.6 and has been removed in 1.7. - MAXBACKTRACE did work in earlier releases, but has now been documented in the stap 1 manual page. - New tapset function probe_type(). Returns a short string describing the low level probe handler type for the current probe point. - Both unwind and symbol data is now only collected and emitted for scripts actually using backtracing or function/data symbols. Tapset functions are marked with /* pragma:symbols */ or /* pragma:unwind */ to indicate they need the specific data. - Kernel backtraces can now be generated for non-pt_regs probe context if the kernel support dump_trace(). This enables backtraces from certain timer probes and tracepoints. - ubacktrace() should now also work for some kernel probes on x86 which can use the dwarf unwinder to recover the user registers to provide more accurate user backtraces. - For s390x the systemtap runtime now properly splits kernel and user addresses (which are in separate address spaces on that architecture) which enable user space introspection. - ppc and s390x now supports user backtraces through the DWARF unwinder. - ppc now handles function descriptors as symbol names correctly. - arm support kernel backtraces through the DWARF unwinder. - arm now have a uprobes port which enables user probes. This still requires some kernel patches (user_regsets and tracehook support for arm). - Starting in release 1.7, these old variables will be deprecated: - The 'pid' variable in the 'kprocess.release' probe has been deprecated in favor of the new 'released_pid' variable. - The 'args' variable in the '_sunrpc.clnt.create_client.rpc_new_client_inline' probe has been deprecated in favor of the new internal-only '__args' variable. - Experimental support for recent kernels without utrace has been added for the following probe types: process(PID).begin process("PATH").begin process.begin process(PID).thread.begin process("PATH").thread.begin process.thread.begin process(PID).end process("PATH").end process.end process(PID).thread.end process("PATH").thread.end process.thread.end process(PID).syscall process("PATH").syscall process.syscall process(PID).syscall.return process("PATH").syscall.return process.syscall.return - staprun disables kprobe-optimizations in recent kernels, as problems were found. (PR13193) * What's new in version 1.6, 2011-07-25 - Security fixes for CVE-2011-2503: read instead of mmap to load modules, CVE-2011-2502: Don't allow path-based auth for uprobes - The systemtap compile-server no longer uses the -k option when calling the translator (stap). As a result, the server will now take advantage of the module cache when compiling the same script more than once. You may observe an improvement in the performance of the server in this situation. - The systemtap compile-server and client now each check the version of the other, allowing both to adapt when communicating with a down-level counterpart. As a result, all version of the client can communicate with all versions of the server and vice-versa. Client will prefer newer servers when selecting a server automatically. - SystemTap has improved support for the ARM architecture. The kread() and kwrite() operations for ARM were corrected allowing many of the tapsets probes and function to work properly on the ARM architecture. - Staprun can now rename the module to a unique name with the '-R' option before inserting it. Systemtap itself will also call staprun with '-R' by default. This allows the same module to be inserted more than once, without conflicting duplicate names. - Systemtap error messages now provide feedback when staprun or any other process fails to launch. This also specifically covers when the user doesn't have the proper permissions to launch staprun. - Systemtap will now map - to _ in module names. Previously, stap -L 'module("i2c-core").function("*")' would be empty. It now returns a list had stap -L 'module("i2c_core").function("*") been specified. - Systemtap now fills in missing process names to probe points, to avoid having to name them twice twice: % stap -e 'probe process("a.out").function("*") {}' -c 'a.out ...' Now the probed process name is inferred from the -c CMD argument. % stap -e 'probe process.function("*") {}' -c 'a.out ...' - stap -L 'process("PATH").syscall' will now list context variables - Depends on elfutils 0.142+. - Deprecated task_backtrace:string (task:long). This function will go away after 1.6. Please run your scripts with stap --check-version. * What's new in version 1.5, 2011-05-23 - Security fixes for CVE-2011-1781, CVE-2011-1769: correct DW_OP_{mod,div} division-by-zero bug - The compile server and its related tools (stap-gen-ert, stap-authorize-cert, stap-sign-module) have been re-implemented in C++. Previously, these components were a mix of bash scripts and C code. These changes should be transparent to the end user with the exception of NSS certificate database password prompting (see below). The old implementation would prompt more than once for the same password in some situations. - eventcount.stp now allows for event counting in the format of 'stap eventcount.stp process.end syscall.* ...', and also reports corresponding event tid's. - Systemtap checks that the build-id of the module being probed matches the build-id saved in the systemtap module. Invoking systemtap with -DSTP_NO_BUILDID_CHECK will bypass this build-id runtime verification. See man ld(1) for info on --build-id. - stapio will now report if a child process has an abnormal exit along with the associated status or signal. - Compiler optimization may sometimes result in systemtap not being able to access a user-space probe argument. Compiling the application with -DSTAP_SDT_ARG_CONSTRAINT=nr will force the argument to be an immediate or register value which should enable systemtap to access the argument. - GNU Gettext has now been intergrated with systemtap. Our translation page can be found at http://www.transifex.net/projects/p/systemtap/ . "make update-po" will generate the necessary files to use translated messages. Please refer to the po/README file for more info and please consider contributing to this I18N effort! - The new addr() function returns the probe's instruction pointer. - process("...").library("...") probes are now supported. Wildcards are supported in the library-name part, to refer to any shared library that is required by process-name, which matches the glob pattern and the rest of the probe point. - The "--remote USER@HOST" functionality can now be specified multiple times to fan out on multiple targets. If the targets have distinct kernel and architecture configurations, stap will automatically build the script appropriately for each one. This option is also no longer considered experimental. - The NSS certificate database generated for use by the compile server is now generated with no password. Previously, a random password was generated and used to access the database. This change should be transparent to most users. However, if you are prompted for a password when using systemtap, then running $libexecdir/stap-gen-cert should correct the problem. - The timestamp tapset includes jiffies() and HZ() for lightweight approximate timekeeping. - A powerful new command line option --version has been added. - process.mark now supports $$parms for reading probe parameters. - A new command line option, --use-server-on-error[=yes|no] is available for stap. It instructs stap to retry compilation of a script using a compile server if it fails on the local host. The default setting is 'no'. - The following deprecated tools have been removed: stap-client stap-authorize-server-cert stap-authorize-signing-cert stap-find-or-start-server stap-find-servers Use the --use-server, --trust-server and --list-servers options of stap instead. * What's new in version 1.4, 2011-01-17 - Security fixes for CVE-2010-4170, CVE-2010-4171: staprun module loading/unloading - A new /* myproc-unprivileged */ marker is now available for embedded C code and and expressions. Like the /* unprivileged */ marker, it makes the code or expression available for use in unprivileged mode (see --unprivileged). However, it also automatically adds a call to assert_is_myproc() to the code or expression, thus, making it available to the unprivileged user only if the target of the current probe is within the user's own process. - The experimental "--remote USER@HOST" option will run pass 5 on a given ssh host, after building locally (or with --use-server) for that target. - Warning messages from the script may now be suppressed with the stap and/or staprun -w option. By default, duplicate warning messages are suppressed (up to a certain limit). With stap --vp 00002 and above, the duplicate elimination is defeated. - The print_ubacktrace and usym* functions attempt to print the full path of the user-space binaries' paths, instead of just the basename. The maximum saved path length is set by -DTASK_FINDER_VMA_ENTRY_PATHLEN, default 64. Warning messages are produced if unwinding fails due to a missing 'stap -d MODULE' option, providing preloaded unwind data. - The new tz_ctime() tapset function prints times in the local time zone. - More kernel tracepoints are accessible to the kernel.trace("...") mechanism, if kernel source trees or debuginfo are available. These formerly "hidden" tracepoints are those that are declared somewhere other than the usual include/linux/trace/ headers, such as xfs and kvm. - debuginfo-based process("...").function/.statement/.mark probes support wildcards in the process-name part, to refer to any executable files that match the glob pattern and the rest of the probe point. - The -t option now displays information per probe-point rather than a summary for each probe. It also now shows the derivation chain for each probe-point. - A rewrite of the sys/sdt.h header file provides zero-cost startup (few or no ELF relocations) for the debuginfo-less near-zero-cost runtime probes. Binaries compiled with earlier sdt.h versions remain supported. The stap -L (listing) option now lists parameters for sys/sdt.h markers. - The implementation of the integrated compile-server client has been extended. o --use-server now accepts an argument representing a particular server and may be specified more than once. o --list-servers now accepts an expanded range of arguments. o a new --trust-servers option has been added to stap to replace several old certificate-management scripts. o The following tools are now deprecated and will be removed in release 1.5: stap-client stap-authorize-server-cert stap-authorize-signing-cert stap-find-or-start-server stap-find-servers See man stap(1) for complete details. - The compile-server now returns the uprobes.ko to the client when it is required by the script being compiled. The integrated compile-server client now makes it available to be loaded by staprun. The old (deprecated) stap-client does not do this. - process probes with scripts as the target are recognized by stap and the interpreter would be selected for probing. - Starting in release 1.5, these old variables/functions will be deprecated and will only be available when the '--compatible=1.4' flag is used: - In the 'syscall.add_key' probe, the 'description_auddr' variable has been deprecated in favor of the new 'description_uaddr' variable. - In the 'syscall.fgetxattr', 'syscall.fsetxattr', 'syscall.getxattr', 'syscall.lgetxattr', and 'syscall.lremovexattr' probes, the 'name2' variable has been deprecated in favor of the new 'name_str' variable. - In the 'nd_syscall.accept' probe the 'flag_str' variable has been deprecated in favor of the new 'flags_str' variable. - In the 'nd_syscall.dup' probe the 'old_fd' variable has been deprecated in favor of the new 'oldfd' variable. - In the 'nd_syscall.fgetxattr', 'nd_syscall.fremovexattr', 'nd_syscall.fsetxattr', 'nd_syscall.getxattr', and 'nd_syscall.lremovexattr' probes, the 'name2' variable has been deprecated in favor of the new 'name_str' variable. - The tapset alias 'nd_syscall.compat_pselect7a' was misnamed. It should have been 'nd_syscall.compat_pselect7' (without the trailing 'a'). - The tapset function 'cpuid' is deprecated in favor of the better known 'cpu'. - In the i386 'syscall.sigaltstack' probe, the 'ussp' variable has been deprecated in favor of the new 'uss_uaddr' variable. - In the ia64 'syscall.sigaltstack' probe, the 'ss_uaddr' and 'oss_uaddr' variables have been deprecated in favor of the new 'uss_uaddr' and 'uoss_uaddr' variables. - The powerpc tapset alias 'syscall.compat_sysctl' was deprecated and renamed 'syscall.sysctl32'. - In the x86_64 'syscall.sigaltstack' probe, the 'regs_uaddr' variable has been deprecated in favor of the new 'regs' variable. * What's new in version 1.3, 2010-07-21 - The uprobes kernel module now has about half the overhead when probing NOPs, which is particularly relevant for sdt.h markers. - New stap option -G VAR=VALUE allows overriding global variables by passing the settings to staprun as module options. - The tapset alias 'syscall.compat_pselect7a' was misnamed. It should have been 'syscall.compat_pselect7' (without the trailing 'a'). Starting in release 1.4, the old name will be deprecated and will only be available when the '--compatible=1.3' flag is used. - A new procfs parameter .umask(UMASK) which provides modification of file permissions using the proper umask value. Default file permissions for a read probe are 0400, 0200 for a write probe, and 0600 for a file with a read and write probe. - It is now possible in some situations to use print_ubacktrace() to get a user space stack trace from a kernel probe point. e.g. for user backtraces when there is a pagefault: $ stap -d /bin/sort --ldd -e 'probe vm.pagefault { if (pid() == target()) { printf("pagefault @0x%x\n", address); print_ubacktrace(); } }' -c /bin/sort [...] pagefault @0x7fea0595fa70 0x000000384f07f958 : __GI_strcmp+0x12b8/0x1440 [libc-2.12.so] 0x000000384f02824e : __gconv_lookup_cache+0xee/0x5a0 [libc-2.12.so] 0x000000384f021092 : __gconv_find_transform+0x92/0x2cf [libc-2.12.so] 0x000000384f094896 : __wcsmbs_load_conv+0x106/0x2b0 [libc-2.12.so] 0x000000384f08bd90 : mbrtowc+0x1b0/0x1c0 [libc-2.12.so] 0x0000000000404199 : ismbblank+0x39/0x90 [sort] 0x0000000000404a4f : inittables_mb+0xef/0x290 [sort] 0x0000000000406934 : main+0x174/0x2510 [sort] 0x000000384f01ec5d : __libc_start_main+0xfd/0x1d0 [libc-2.12.so] 0x0000000000402509 : _start+0x29/0x2c [sort] [...] - New tapset functions to get a string representation of a stack trace: sprint_[u]backtrace() and sprint_[u]stack(). - New tapset function to get the module (shared library) name for a user space address umodname:string(long). The module name will now also be in the output of usymdata() and in backtrace addresses even when they were not given with -d at the command line. - Kernel backtraces are now much faster (replaced a linear search with a binary search). - A new integrated compile-server client is now available as part of stap. o 'stap --use-server ...' is equivalent to 'stap-client ...' o 'stap --list-servers' is equivalent to 'stap-find-servers' o 'stap --list-servers=online' is equivalent to 'stap-find-servers --all' o stap-client and its related tools will soon be deprecated. o the nss-devel and avahi-devel packages are required for building stap with the integrated client (checked during configuration). o nss and avahi are required to run the integrated client. - A new operator @entry is available for automatically saving an expression at entry time for use in a .return probe. probe foo.return { println(get_cycles() - @entry(get_cycles())) } - Probe $target variables and @cast() can now use a suffix to print complex data types as strings. Use a single '$' for a shallow view, or '$$' for a deeper view that includes nested types. For example, with fs_struct: $fs$ : "{.users=%i, .lock={...}, .umask=%i, .in_exec=%i, .root={...}, .pwd={...}}" $fs$$ : "{.users=%i, .lock={.raw_lock={.lock=%u}}, .umask=%i, .in_exec=%i, .root={.mnt=%p, .dentry=%p}, .pwd={.mnt=%p, .dentry=%p}}" - The user-space markers no longer default to an implicit MARKER_NAME_ENABLED() semaphore check for each marker. To check for enabled markers use a .d declaration file, then: if (MARKER_NAME_ENABLED()) MARKER_NAME() - Hyphenated marker names such as process(...).mark("foo-bar") are now accepted in scripts. They are mapped to the double-underscore form ("foo__bar"). - More robust user-space markers support is included. For some platforms (x86*, ppc*), this can let systemtap probe the markers without debuginfo. This implementation also supports preserving the "provider" name associated with a marker: probe process("foo").provider("bar").mark("baz") to match STAP_PROBE(bar, baz <...>) (Compile with -DSTAP_SDT_V1 to revert to the previous implementation. Systemtap supports pre-existing or new binaries using them.) - Embedded-C may be used within expressions as values, when in guru mode: num = %{ LINUX_VERSION_CODE %} // int64_t name = %{ /* string */ THIS_MODULE->name %} // const char* printf ("%s %x\n", name, num) The usual /* pure */, /* unprivileged */, and /* guru */ markers may be used as with embedded-C functions. - By default the systemtap-runtime RPM builds now include a shared library, staplog.so, that allows crash to extract systemtap data from a vmcore image. - Iterating with "foreach" can now explicitly save the value for the loop. foreach(v = [i,j] in array) printf("array[%d,%s] = %d\n", i, j, v /* array[i,j] */) - The new "--ldd" option automatically adds any additional shared libraries needed by probed or -d-listed userspace binaries to the -d list, to enable symbolic backtracing through them. Similarly, the new "--all-modules" option automatically adds any currently loaded kernel modules (listed in /proc/modules) to the -d list. - A new family of set_kernel_* functions make it easier for gurus to write new values at arbitrary memory addresses. - Probe wildcards can now use '**' to cross the '.' separator. $ stap -l 'sys**open' syscall.mq_open syscall.open - Backward compatibility flags (--compatible=VERSION, and matching script preprocessing predicate %( systemtap_v CMP "version" %) and a deprecation policy are being introduced, in case future tapset/language changes break valid scripts. * What's new in version 1.2, 2010-03-22 - Prototype support for "perf events", where the kernel supports the 2.6.33 in-kernel API. Probe points may refer to low-level perf_event_attr type/config numbers, or to a number of aliases defined in the new perf.stp tapset: probe perf.sw.cpu_clock, perf.type(0).config(4) { } - Type-casting can now use multiple headers to resolve codependencies. @cast(task, "task_struct", "kernel")->fs->umask - Tapset-related man pages have been renamed. 'man -k 3stap' should show the installed list, which due to prefixing should no longer collide over ordinary system functions. - User space marker arguments no longer use volatile if the version of gcc, which must be at least 4.5.0, supports richer DWARF debuginfo. Use cflags -DSTAP_SDT_VOLATILE=volatile or -DSTAP_SDT_VOLATILE= when building the sys/sdt.h application to override this one way or another. - A new construct for error handling is available. It is similar to c++ exception catching, using try and catch as new keywords. Within a handler or function, the following is valid and may be nested: try { /* arbitrary statements */ } catch (er) { /* e.g. println("caught error ", er) */ } - A new command line flag '-W' forces systemtap to abort translation of a script if any warnings are produced. It is similar to gcc's -Werror. (If '-w' is also supplied to suppress warnings, it wins.) - A new predicate @defined is available for testing whether a particular $variable/expression is resolvable at translate time: probe foo { if (@defined($bar)) log ("$bar is available here") } - Adjacent string literals are glued together, making this construct valid: probe process("/usr" @1 "/bin").function("*") { ... } - In order to limit potential impact from future security problems, the stap-server process does not permit its being launched as root. - On recent kernels, for some architectures/configurations, hardware breakpoint probes are supported. The probe point syntax is: probe kernel.data(ADDRESS).write probe kernel.data(ADDRESS).length(LEN).write probe kernel.data("SYMBOL_NAME").write * What's new in version 1.1, 2010-01-15 - New tracepoint based tapset for memory subsystem. - The loading of signed modules by staprun is no longer allowed for ordinary, unprivileged users. This means that only root, members of the group 'stapdev' and members of the group 'stapusr' can load systemtap modules using staprun, stap or stap-client. The minimum privilege required to run arbitrary --unprivileged scripts is now 'stapusr' membership. - The stap-server initscript is available. This initscript allows you to start systemtap compile servers as a system service and to manage these servers as a group or individually. The stap-server initscript is installed by the systemtap-server rpm. The build directory for the uprobes module (/usr/share/systemtap/runtime/uprobes) is made writable by the 'stap-server' group. All of the files generated when building the uprobes module, including the digital signature, are also writable by members of stap-server. See initscript/README.stap-server for details. - Some of the compile server client, server and certificate management tools have been moved from $bindir to $libexecdir/systemtap. You should use the new stap-server script or the stap-server initscript for server management where possible. The stap-server script provides the same functionality as the stap-server initscript except that the servers are run by the invoking user by default as opposed to servers started by the stap-server initscript which are run by the user stap-server by default. See stap-server(8) for more information. You may continue to use these tools by adding $libexecdir/systemtap to your path. You would need to do this, for example, if you are not root, you want to start a compile server and you are not running systemtap from a private installation. In this case you still need to use stap-start-server. - Any diagnostic output line that starts with "ERROR", as in error("foo"), will promote a "Pass 5: run failed", and the return code is 1. - Systemtap now warns about global variables being referenced from other script files. This aims to protect against unintended local-vs-global namespace collisions such as: % cat some_tapset.stp probe baz.one = bar { foo = $foo; bar = $bar } % cat end_user_script.stp global foo # intended to be private variable probe timer.s(1) { foo ++ } probe baz.* { println(foo, pp()) } % stap end_user_script.stp WARNING: cross-file global variable reference to foo from some_tapset.stp - Preprocessor conditional for kernel configuration testing: %( CONFIG_foo == "y" %? ... %) - ftrace(msg:string) tapset function to send strings to the system-wide ftrace ring-buffer (if any). - Better support for richer DWARF debuginfo output from GCC 4.5 (variable tracking assignments). Kernel modules are now always resolved against all their dependencies to find any info referring to missing symbols. DW_AT_const_value is now supported when no DW_AT_location is available. * What's new in verson 1.0, 2009-09-22 - process().mark() probes now use an enabling semaphore to reduce the computation overhead of dormant probes. - The function spec for dwarf probes now supports C++ scopes, so you can limit the probes to specific namespaces or classes. Multiple scopes can be specified, and they will be matched progressively outward. probe process("foo").function("std::vector<*>::*") { } probe process("foo").function("::global_function") { } - It is now possible to cross-compile systemtap scripts for foreign architectures, using the new '-a ARCH' and '-B OPT=VALUE' flags. For example, put arm-linux-gcc etc. into your $PATH, and point systemtap at the target kernel build tree with: stap -a arm -B CROSS_COMPILE=arm-linux- -r /build/tree [...] The -B option is passed to kbuild make. -r identifies the already configured/built kernel tree and -a its architecture (kbuild ARCH=...). Systemtap will infer -p4. - Cross compilation using the systemtap client and server - stap-start-server now accepts the -r, -R, -I, -B and -a options in order to start a cross compiling server. The server will correctly advertise itself with respect to the kernel release and architecture that it compiles for. - When specified on stap-client, the -r and -a options will be considered when searching for a suitable server. - When using the systemtap client and server udp port 5353 must be open in your firewall in order for the client to find servers using avahi-browse. Also the systemtap server will choose a random port in the range 1024-63999 for accepting ssl connections. - Support for unprivileged users: *********************************************************************** * WARNING!!!!!!!!!! * * This feature is EXPERIMENTAL at this time and should be used with * * care. This feature allows systemtap kernel modules to be loaded by * * unprivileged users. The user interface and restrictions will change * * as this feature evolves. * *********************************************************************** - Systemtap modules generated from scripts which use a restricted subset of the features available may be loaded by staprun for unprivileged users. Previously, staprun would load modules only for root or for members of the groups stapdev and stapusr. - Using the --unprivileged option on stap enables translation-time checking for use by unprivileged users (see restrictions below). - All modules deemed suitable for use by unprivileged users will be signed by the systemtap server when --unprivileged is specified on stap-client. See module signing in release 0.9.8 and stap-server in release 0.9 below. - Modules signed by trusted signers (servers) and verified by staprun will be loaded by staprun regardless of the user's privilege level. - The system administrator asserts the trustworthiness of a signer (server) by running stap-authorize-signing-cert as root, where the can be found in ~/.systemtap/ssl/server/stap.cert for servers started by ordinary users and in $sysconfdir/systemtap/ssl/server/stap.cert for servers started by root. - Restrictions are intentionally strict at this time and may be relaxed in the future: - probe points are restricted to: begin, begin(n), end, end(n), error, error(n), never, timer.{jiffies,s,sec,ms,msec,us,usec,ns,nsec}(n)*, timer.hz(n), process.* (for processes owned by the user). - use of embedded C code is not allowed. - use of tapset functions is restricted. - some tapset functions may not be used at all. A message will be generated at module compilation time. - some actions by allowed tapset functions may only be performed in the context of the user's own process. A runtime fault will occur in these situations, for example, direct memory access. - The is_myproc() tapset function has been provided so that tapset writers for unprivileged users can check that the context is of the users own process before attempting these actions. - accessing the kernel memory space is not allowed. - The following command line options may not be used by stap-client -g, -I, -D, -R, -B - The following environment variables are ignored by stap-client: SYSTEMTAP_RUNTIME, SYSTEMTAP_TAPSET, SYSTEMTAP_DEBUGINFO_PATH - nss and nss-tools are required to use this feature. - Support output file switching by SIGUSR2. Users can command running stapio to switch output file by sending SIGUSR2. - Memory consumption for scripts involving many uprobes has been dramatically reduced. - The preprocessor now supports || and && in the conditions. e.g. %( arch == "x86_64" || arch == "ia64" %: ... %) - The systemtap notion of "architecture" now matches the kernel's, rather than that of "uname -m". This means that 32-bit i386 family are all known as "i386" rather than "i386" or "i686"; "ppc64" as "powerpc"; "s390x" as "s390", and so on. This is consistent between the new "-a ARCH" flag and the script-level %( arch ... %) conditional. - It is now possible to define multiple probe aliases with the same name. A probe will expand to all matching aliases. probe foo = bar { } probe foo = baz { } probe foo { } # expands twice, once to bar and once to baz - A new experimental transport mechanism, using ftrace's ring_buffer, has been added. This may become the default transport mechanism in future versions of systemtap. To test this new transport mechanism, define 'STP_USE_RING_BUFFER'. - Support for recognizing DW_OP_{stack,implicit}_value DWARF expressions as emitted by GCC 4.5. * What's new in version 0.9.9, 2009-08-04 - Systemwide kernel .function.return (kretprobe) maxactive defaults may be overridden with the -DKRETACTIVE=nnn parameter. - Translation pass 2 is significantly faster by avoiding unnecessary searching through a kernel build/module directory tree. - When compiled against elfutils 0.142 systemtap now handles the new DW_OP_call_frame_CFA generated by by GCC. - uprobes and ustack() are more robust when used on applications that depend on prelinked/separate debuginfo shared libraries. - User space PROBE marks are not always found with or without separate debuginfo. The .probes section itself is now always put in the main elf file and marked as allocated. When building pic code the section is marked writable. The selinux memory check problems seen with programs using STAP_PROBES is fixed. - statement() probes can now override "address not at start of statement" errors in guru mode. They also provide alternative addresses to use in non-guru mode. - The stapgraph application can generate graphs of data and events emitted by systemtap scripts in real time. Run "stapgraph testsuite/systemtap.examples/general/grapher.stp" for an example of graphing the system load average and keyboard events. - Dwarf probes now show parameters and local variables in the verbose listing mode (-L). - Symbol aliases are now resolved to their canonical dwarf names. For example, probing "malloc" in libc resolves to "__libc_malloc". - The syntax for dereferencing $target variables and @cast() gained new capabilities: - Array indexes can now be arbitrary numeric expressions. - Array subscripts are now supported on pointer types. - An '&' operator before a @cast or $target returns the address of the final component, especially useful for nested structures. - For reading all probe variables, kernel.mark now supports $$vars and $$parms, and process.syscall now supports $$vars. - The SNMP tapset provides probes and functions for many network statistics. See stapprobes.snmp(3stap) for more details. - The dentry tapset provides functions to map kernel VFS directory entries to file or full path names: d_path(), d_name() and reverse_path_walk(). - SystemTap now has userspace markers in its own binaries, and the stap tapset provides the available probepoints and local variables. - Miscellaneous new tapset functions: - pgrp() returns the process group ID of the current process - str_replace() performs string replacement * What's new in version 0.9.8, 2009-06-11 - Miscellaneous new tapset functions: - sid() returns the session ID of the current process - stringat() indexes a single character from a string. - Using %M in print formats for hex dumps can now print entire buffers, instead of just small numbers. - Dwarfless syscalls: The nd_syscalls tapset is now available to probe system calls without requiring kernel debugging information. All of the same probepoints in the normal syscalls tapset are available with an "nd_" prefix, e.g. syscall.open becomes nd_syscall.open. Most syscall arguments are also available by name in nd_syscalls. - Module signing: If the appropriate nss libraries are available on your system, stap-server will sign each compiled module using a self-generated certificate. This is the first step toward extending authority to load certain modules to unprivileged users. For now, if the system administrator adds a certificate to a database of trusted signers (stap-authorize-signing-cert), modules signed using that certificate will be verified by staprun against tampering. Otherwise, you should notice no difference in the operation of stap or staprun. * What's new in version 0.9.7, 2009-04-23 - @cast can now determine its type information using an explicit header specification. For example: @cast(tv, "timeval", "")->tv_sec @cast(task, "task_struct", "kernel")->tgid - The overlapping process.* tapsets are now separated. Those probe points documented in stapprobes(3stap) remain the same. Those that were formerly in stapprobes.process(3stap) have been renamed to kprocess, to reflect their kernel perspective on processes. - The --skip-badvars option now also suppresses run-time error messages that would otherwise result from erroneous memory accesses. Such accesses can originate from $context expressions fueled by erroneous debug data, or by kernel_{long,string,...}() tapset calls. - New probes kprobe.function(FUNCTION) and kprobe.function(FUNCTION).return for dwarfless probing. These postpone function address resolution to run-time and use the kprobe symbol-resolution mechanism. Probing of absolute statements can be done using the kprobe.statement(ADDRESS).absolute construct. - EXPERIMENTAL support for user process unwinding. A new collection of tapset functions have been added to handle user space backtraces from probe points that support them (currently process and timer probes - for timer probes test whether or not in user space first with the already existing user_mode() function). The new tapset functions are: uaddr - User space address of current running task. usymname - Return the symbol of an address in the current task. usymdata - Return the symbol and module offset of an address. print_ustack - Print out stack for the current task from string. print_ubacktrace - Print stack back trace for current task. ubacktrace - Hex backtrace of current task stack. Please read http://sourceware.org/ml/systemtap/2009-q2/msg00364.html on the current restrictions and possible changes in the future and give feedback if you want to influence future developments. * What's new in version 0.9.5, 2009-03-27 - New probes process().insn and process().insn.block that allows inspection of the process after each instruction or block of instructions executed. So to count the total number of instructions a process executes during a run do something like: $ stap -e 'global steps; probe process("/bin/ls").insn {steps++} probe end {printf("Total instructions: %d\n", steps);}' \ -c /bin/ls This feature can slow down execution of a process somewhat. - Systemtap probes and function man pages extracted from the tapsets are now available under 3stap. To show the page for probe vm.pagefault or the stap function pexecname do: $ man 3stap vm.pagefault $ man 3stap pexecname - Kernel tracepoints are now supported for probing predefined kernel events without any debuginfo. Tracepoints incur less overhead than kprobes, and context parameters are available with full type information. Any kernel 2.6.28 and later should have defined tracepoints. Try the following to see what's available: $ stap -L 'kernel.trace("*")' - Typecasting with @cast now supports modules search paths, which is useful in case there are multiple places where the type definition may be found. For example: @cast(sdev, "scsi_device", "kernel:scsi_mod")->sdev_state - On-file flight recorder is supported. It allows stap to record huge trace log on the disk and to run in background. Passing -F option with -o option runs stap in background mode. In this mode, staprun is detached from console, and stap itself shows staprun's pid and exits. Specifying the max size and the max number of log files are also available by passing -S option. This option has one or two arguments seperated by a comma. The first argument is the max size of a log file in MB. If the size of a log file exceeds it, stap switches to the next log file automatically. The second is how many files are kept on the disk. If the number of log files exceeds it, the oldest log file is removed automatically. The second argument can be omitted. For example, this will record output on log files each of them is smaller than 1024MB and keep last 3 logs, in background. % stap -F -o /tmp/staplog -S 1024,3 script.stp - In guru mode (-g), the kernel probing blacklist is disabled, leaving only a subset - the kernel's own internal kprobe blacklist - to attempt to filter out areas unsafe to probe. The differences may be enough to probe more interrupt handlers. - Variables unavailable in current context may be skipped by setting a session level flag with command line option --skip-badvars now available. This replaces any dwarf $variable expressions that could not be resolved with literal numeric zeros, along with a warning message. - Both kernel markers and kernel tracepoint support argument listing through stap -L 'kernel.mark("*")' or stap -L 'kernel.trace("*")' - Users can use -DINTERRUPTIBLE=0 to prevent interrupt reentrancy in their script, at the cost of a bit more overhead to toggle the interrupt mask. - Added reentrancy debugging. If stap is run with the arguments "-t -DDEBUG_REENTRANCY", additional warnings will be printed for every reentrancy event, including the probe points of the resident and interloper probes. - Default to --disable-pie for configure. Use --enable-pie to turn it back on. - Improved sdt.h compatibility and test suite for static dtrace compatible user space markers. - Some architectures now use syscall wrappers (HAVE_SYSCALL_WRAPPERS). The syscall tapset has been enhanced to take care of the syscall wrappers in this release. - Security fix for CVE-2009-0784: stapusr module-path checking race. * What's new in version 0.9, 2009-02-19 - Typecasting is now supported using the @cast operator. A script can define a pointer type for a "long" value, and then access type members using the same syntax as with $target variables. For example, this will retrieve the parent pid from a kernel task_struct: @cast(pointer, "task_struct", "kernel")->parent->pid - process().mark() probes are now possible to trace static user space markers put in programs with the STAP_PROBE macro using the new sys/sdt.h include file. This also provides dtrace compatible markers through DTRACE_PROBE and an associated python 'dtrace' script that can be used in builds based on dtrace that need dtrace -h or -G functionality. - For those that really want to run stap from the build tree there is now the 'run-stap' script in the top-level build directory that sets up the SYSTEMTAP_TAPSET, SYSTEMTAP_RUNTIME, SYSTEMTAP_STAPRUN, and SYSTEMTAP_STAPIO environment variables (installing systemtap, in a local prefix, is still recommended for common use). - Systemtap now comes with a new Beginners Guide that walks the user through their first steps setting up stap, understanding how it all works, introduces some useful scripts and describes some common pitfalls. It isn't created by default since it needs a Publican setup, but full build instructions can be found in the wiki: http://sourceware.org/systemtap/wiki/PublicanQuikHowto An online version can be found at: http://sourceware.org/systemtap/SystemTap_Beginners_Guide.pdf - Standard tapsets included with Systemtap were modified to include extractable documentation information based on the kernel-doc infrastructure. When configured --enabled-docs a HTML and PDF version of the Tapset Reference Manual is produced explaining probes defined in each tapset. - The systemtap client and compile server are now available. These allow you to compile a systemtap module on a host other than the one which it will be run, providing the client and server are compatible. Other than using a server for passes 1 through 4, the client behaves like the 'stap' front end itself. This means, among other things, that the client will automatically load the resulting module on the local host unless -p[1234] was specified. See stap-server(8) for more details. The client/server now use SSL for network connection security and for signing. The systemtap client and server are prototypes only. Interfaces, options and usage may change at any time. - function("func").label("label") probes are now supported to allow matching the label of a function. - Systemtap initscript is available. This initscript allows you to run systemtap scripts as system services (in flight recorder mode) and control those scripts individually. See README.systemtap for details. - The stap "-r DIR" option may be used to identify a hand-made kernel build directory. The tool determines the appropriate release string automatically from the directory. - Serious problems associated with user-space probing in shared libraries were corrected, making it now possible to experiment with probe shared libraries. Assuming dwarf debugging information is installed, use this twist on the normal syntax: probe process("/lib64/libc-2.8.so").function("....") { ... } This would probe all threads that call into that library. Running "stap -c CMD" or "stap -x PID" naturally restricts this to the target command+descendants only. $$vars etc. may be used. - For scripts that sometimes terminate with excessive "skipped" probes, rerunning the script with "-t" (timing) will print more details about the skippage reasons. - Symbol tables and unwind (backtracing) data support were formerly compiled in for all probed modules as identified by the script (kernel; module("name"); process("file")) plus those listed by the stap "-d BINARY" option. Now, this data is included only if the systemtap script uses tapset functions like probefunc() or backtrace() that require such information. This shrinks the probe modules considerably for the rest. - Per-pass verbosity control is available with the new "--vp {N}+" option. "stap --vp 040" adds 4 units of -v verbosity only to pass 2. This is useful for diagnosing errors from one pass without excessive verbosity from others. - Most probe handlers now run with interrupts enabled, for improved system responsiveness and less probing overhead. This may result in more skipped probes, for example if a reentrant probe handler is attempted from within an interrupt handler. It may also make the systemtap overload detection facility more likely to be triggered, as interrupt handlers' run time would be included in the self-assessed overhead of running probe handlers. * What's new in version 0.8, 2008-11-13 - Cache limiting is now available. If the compiled module cache size is over a limit specified in the $SYSTEMTAP_DIR/cache/cache_mb_limit file, some old cache entries will be unlinked. See man stap(1) for more. - Error and warning messages are now followed by source context displaying the erroneous line/s and a handy '^' in the following line pointing to the appropriate column. - A bug reporting tool "stap-report" is now available which will quickly retrieve much of the information requested here: http://sourceware.org/systemtap/wiki/HowToReportBugs - The translator can resolve members of anonymous structs / unions: given struct { int foo; struct { int bar; }; } *p; this now works: $p->bar - The stap "-F" flag activates "flight recorder" mode, which consists of translating the given script as usual, but implicitly launching it into the background with staprun's existing "-L" (launch) option. A user can later reattach to the module with "staprun -A MODULENAME". - Additional context variables are available on user-space syscall probes. - $argN ($arg1, $arg2, ... $arg6) in process(PATH_OR_PID).syscall gives you the argument of the system call. - $return in process(PATH_OR_PID).syscall.return gives you the return value of the system call. - Target process mode (stap -c CMD or -x PID) now implicitly restricts all "process.*" probes to the given child process. (It does not affect kernel.* or other probe types.) The CMD string is normally run directly, rather than via a /bin/sh -c subshell, since then utrace/uprobe probes receive a fairly "clean" event stream. If metacharacters like redirection operators were present in CMD, then "sh -c CMD" is still used, and utrace/uprobe probes will receive events from the shell. % stap -e 'probe process.syscall, process.end { printf("%s %d %s\n", execname(), pid(), pp())}'\ -c ls ls 2323 process.syscall ls 2323 process.syscall ls 2323 process.end - Probe listing mode is improved: "-L" lists available script-level variables % stap -L 'syscall.*open*' syscall.mq_open name:string name_uaddr:long filename:string mode:long u_attr_uaddr:long oflag:long argstr:string syscall.open name:string filename:string flags:long mode:long argstr:string syscall.openat name:string filename:string flags:long mode:long argstr:string - All user-space-related probes support $PATH-resolved executable names, so probe process("ls").syscall {} probe process("./a.out").syscall {} work now, instead of just probe process("/bin/ls").syscall {} probe process("/my/directory/a.out").syscall {} - Prototype symbolic user-space probing support: # stap -e 'probe process("ls").function("*").call { log (probefunc()." ".$$parms) }' \ -c 'ls -l' This requires: - debugging information for the named program - a version of utrace in the kernel that is compatible with the "uprobes" kernel module prototype. This includes RHEL5 and older Fedora, but not yet current lkml-track utrace; a "pass 4a"-time build failure means your system cannot use this yet. - Global variables which are written to but never read are now automatically displayed when the session does a shutdown. For example: global running_tasks probe timer.profile {running_tasks[pid(),tid()] = execname()} probe timer.ms(8000) {exit()} - A formatted string representation of the variables, parameters, or local variables at a probe point is now supported via the special $$vars, $$parms, and $$locals context variables, which expand to a string containing a list "var1=0xdead var2=0xbeef var3=?". (Here, var3 exists but is for some reason unavailable.) In return probes only, $$return expands to an empty string for a void function, or "return=0xf00". * What's new in version 0.7, 2008-07-15 - .statement("func@file:*") and .statement("func@file:M-N") probes are now supported to allow matching a range of lines in a function. This allows tracing the execution of a function. - Scripts relying on probe point wildcards like "syscall.*" that expand to distinct kprobes are processed significantly faster than before. - The vector of script command line arguments is available in a tapset-provided global array argv[]. It is indexed 1 ... argc, another global. This can substitute for of preprocessor directives @NNN that fail at parse time if there are not enough arguments. printf("argv: %s %s %s", argv[1], argv[2], argv[3]) - .statement("func@file+line") probes are now supported to allow a match relative to the entry of the function incremented by line number. This allows using the same systemtap script if the rest of the file.c source only changes slightly. - A probe listing mode is available. % stap -l vm.* vm.brk vm.mmap vm.munmap vm.oom_kill vm.pagefault vm.write_shared - More user-space probe types are added: probe process(PID).begin { } probe process("PATH").begin { } probe process(PID).thread.begin { } probe process("PATH").thread.begin { } probe process(PID).end { } probe process("PATH").end { } probe process(PID).thread.end { } probe process("PATH").thread.end { } probe process(PID).syscall { } probe process("PATH").syscall { } probe process(PID).syscall.return { } probe process("PATH").syscall.return { } - Globals now accept ; terminators global odds, evens; global little[10], big[5]; * What's new in version 0.6, 2007-12-15 - A copy of the systemtap tutorial and language reference guide are now included. - There is a new format specifier, %m, for the printf family of functions. It functions like %s, except that it does not stop when a nul ('\0') byte is encountered. The number of bytes output is determined by the precision specifier. The default precision is 1. For example: printf ("%m", "My String") // prints one character: M printf ("%.5", myString) // prints 5 bytes beginning at the start // of myString - The %b format specifier for the printf family of functions has been enhanced as follows: 1) When the width and precision are both unspecified, the default is %8.8b. 2) When only one of the width or precision is specified, the other defaults to the same value. For example, %4b == %.4b == %4.4b 3) Nul ('\0') bytes are used for field width padding. For example, printf ("%b", 0x1111deadbeef2222) // prints all eight bytes printf ("%4.2b", 0xdeadbeef) // prints \0\0\xbe\xef - Dynamic width and precision are now supported for all printf family format specifiers. For example: four = 4 two = 2 printf ("%*.*b", four, two, 0xdeadbbeef) // prints \0\0\xbe\xef printf ("%*d", four, two) // prints 2 - Preprocessor conditional expressions can now include wildcard style matches on kernel versions. %( kernel_vr != "*xen" %? foo %: bar %) - Prototype support for user-space probing is showing some progress. No symbolic notations are supported yet (so no probing by function names, file names, process names, and no access to $context variables), but at least it's something: probe process(PID).statement(ADDRESS).absolute { } This will set a uprobe on the given process-id and given virtual address. The proble handler runs in kernel-space as usual, and can generally use existing tapset functions. - Crash utility can retrieve systemtap's relay buffer from a kernel dump image by using staplog which is a crash extension module. To use this feature, type commands as below from crash(8)'s command line: crash> extend staplog.so crash> help systemtaplog Then, you can see more precise help message. - You can share a relay buffer amoung several scripts and merge outputs from several scripts by using "-DRELAY_HOST" and "-DRELAY_GUEST" options. For example: # run a host script % stap -ve 'probe begin{}' -o merged.out -DRELAY_HOST & # wait until starting the host. % stap -ve 'probe begin{print("hello ");exit()}' -DRELAY_GUEST % stap -ve 'probe begin{print("world\n");exit()}' -DRELAY_GUEST Then, you'll see "hello world" in merged.out. - You can add a conditional statement for each probe point or aliase, which is evaluated when the probe point is hit. If the condition is false, the whole probe body(including aliases) is skipped. For example: global switch = 0; probe syscall.* if (switch) { ... } probe procfs.write {switch = strtol($value,10)} /* enable/disable ctrl */ - Systemtap will warn you if your script contains unused variables or functions. This is helpful in case of misspelled variables. If it doth protest too much, turn it off with "stap -w ...". - You can add error-handling probes to a script, which are run if a script was stopped due to errors. In such a case, "end" probes are not run, but "error" ones are. probe error { println ("oops, errors encountered; here's a report anyway") foreach (coin in mint) { println (coin) } } - In a related twist, one may list probe points in order of preference, and mark any of them as "sufficient" beyond just "optional". Probe point sequence expansion stops if a sufficient-marked probe point has a hit. This is useful for probes on functions that may be in a module (CONFIG_FOO=m) or may have been compiled into the kernel (CONFIG_FOO=y), but we don't know which. Instead of probe module("sd").function("sd_init_command") ? , kernel.function("sd_init_command") ? { ... } which might match neither, now one can write this: probe module("sd").function("sd_init_command") ! , /* <-- note excl. mark */ kernel.function("sd_init_command") { ... } - New security model. To install a systemtap kernel module, a user must be one of the following: the root user; a member of the 'stapdev' group; or a member of the 'stapusr' group. Members of the stapusr group can only use modules located in the /lib/modules/VERSION/systemtap directory (where VERSION is the output of "uname -r"). - .statement("...@file:line") probes now apply heuristics to allow an approximate match for the line number. This works similarly to gdb, where a breakpoint placed on an empty source line is automatically moved to the next statement. A silly bug that made many $target variables inaccessible to .statement() probes was also fixed. - LKET has been retired. Please let us know on if you have been a user of the tapset/tools, so we can help you find another way. - New families of printing functions println() and printd() have been added. println() is like print() but adds a newline at the end; printd() is like a sequence of print()s, with a specified field delimiter. * What's new since version 0.5.14?, 2007-07-03 - The way in which command line arguments for scripts are substituted has changed. Previously, $1 etc. would interpret the corresponding command line argument as an numeric literal, and @1 as a string literal. Now, the command line arguments are pasted uninterpreted wherever $1 etc. appears at the beginning of a token. @1 is similar, but is quoted as a string. This change does not modify old scripts, but has the effect of permitting substitution of arbitrary token sequences. # This worked before, and still does: % stap -e 'probe timer.s($1) {}' 5 # Now this also works: % stap -e 'probe syscall.$1 {log(@1)}' open # This won't crash, just signal a recursion error: % stap -e '$1' '$1' # As before, $1... is recognized only at the beginning of a token % stap -e 'probe begin {foo$1=5}' * What's new since version 0.5.13?, 2007-03-26 - The way in which systemtap resolves function/inline probes has changed: .function(...) - now refers to all functions, inlined or not .inline(...) - is deprecated, use instead: .function(...).inline - filters function() to only inlined instances .function(...).call - filters function() to only non-inlined instances .function(...).return - as before, but now pairs best with .function().call .statement() is unchanged. * What's new since version 0.5.12?, 2007-01-01 - When running in -p4 (compile-only) mode, the compiled .ko file name is printed on standard output. - An array element with a null value such as zero or an empty string is now preserved, and will show up in a "foreach" loop or "in" test. To delete such an element, the scripts needs to use an explicit "delete array[idx]" statement rather than something like "array[idx]=0". - The new "-P" option controls whether prologue searching heuristics will be activated for function probes. This was needed to get correct debugging information (dwarf location list) data for $target variables. Modern compilers (gcc 4.1+) tend not to need this heuristic, so it is no longer default. A new configure flag (--enable-prologues) restores it as a default setting, and is appropriate for older compilers (gcc 3.*). - Each systemtap module prints a one-line message to the kernel informational log when it starts. This line identifies the translator version, base address of the probe module, a broken-down memory consumption estimate, and the total number of probes. This is meant as a debugging / auditing aid. - Begin/end probes are run with interrupts enabled (but with preemption disabled). This will allow begin/end probes to be longer, to support generating longer reports. - The numeric forms of kernel.statement() and kernel.function() probe points are now interpreted as relocatable values - treated as relative to the _stext symbol in that kernel binary. Since some modern kernel images are relocated to a different virtual address at startup, such addresses may shift up or down when actually inserted into a running kernel. kernel.statement(0xdeadbeef): validated, interpreted relative to _stext, may map to 0xceadbeef at run time. In order to specify unrelocated addresses, use the new ".absolute" probe point suffix for such numeric addresses. These are only allowed in guru mode, and provide access to no $target variables. They don't use debugging information at all, actually. kernel.statement(0xfeedface).absolute: raw, unvalidated, guru mode only * What's new since version 0.5.10?, 2006-10-19 - Offline processing of debugging information, enabling general cross-compilation of probe scripts to remote hosts, without requiring identical module/memory layout. This slows down compilation/translation somewhat. - Kernel symbol table data is loaded by staprun at startup time rather than compiled into the module. - Support the "limit" keyword for foreach iterations: foreach ([x,y] in ary limit 5) { ... } This implicitly exits after the fifth iteration. It also enables more efficient key/value sorting. - Support the "maxactive" keyword for return probes: probe kernel.function("sdfsdf").maxactive(848) { ... } This allows up to 848 concurrently outstanding entries to the sdfsdf function before one returns. The default maxactive number is smaller, and can result in missed return probes. - Support accessing of saved function arguments from within return probes. These values are saved by a synthesized function-entry probe. - Add substantial version/architecture checking in compiled probes to assert correct installation of debugging information and correct execution on a compatible kernel. - Add probe-time checking for sufficient free stack space when probe handlers are invoked, as a safety improvement. - Add an optional numeric parameter for begin/end probe specifications, to order their execution. probe begin(10) { } /* comes after */ probe begin(-10) {} - Add an optional array size declaration, which is handy for very small or very large ones. global little[5], big[20000] - Include some example scripts along with the documentation. - Change the start-time allocation of probe memory to avoid causing OOM situations, and to abort cleanly if free kernel memory is short. - Automatically use the kernel DWARF unwinder, if present, for stack tracebacks. - Many minor bug fixes, performance, tapset, and error message improvements. systemtap-4.2/README000066400000000000000000000131521356460210500142740ustar00rootroot00000000000000systemtap: a linux trace/probe tool Visit the project web site at , for documentation and mailing lists for developers and users. This is free software. See the COPYING file for redistribution/modification terms. See the INSTALL file for generic build instructions. See the HACKING file for contribution advice. Prerequisites: - linux kernel - kernel module build environment (kernel-devel rpm) and/or dyninst - optionally, debugging information for kernel/user-space being instrumented - C compiler (same as what kernel was compiled with), to build kernel modules - C++11 compiler such as gcc 4.8+, to build systemtap itself - elfutils 0.151+ with libdwfl for debugging information parsing - root privileges Installation steps: - Install any debuginfo packages you need, for kernel and/or userspace. On modern Fedora, # debuginfo-install kernel [...] (Beware of confusion between kernel vs. kernel-debug vs kernel-PAE etc. variants. Each likely has a corresponding development and debuginfo package.) - Install the systemtap package. On modern Fedora, # yum install systemtap systemtap-runtime Build steps: - Consider installing the kernel-debuginfo, kernel-devel, gcc and dependent packages (or see below if you are building your own kernels from source). If using only the pure-userspace dyninst backend, install gcc and dyninst-devel. - If available, install your distribution's copy of elfutils and its development headers/libraries. Or if desired, download an elfutils source release to build in "bundled mode" (below), and untar it into some new directory. Or if desired, build elfutils separately one time, and install it to /usr/local. See http://elfutils.org/ Version 0.151 is recommended for i386 hosts probing prelinked programs. (PR12141) - On modern Fedora, install general optional build-requisites: # yum-builddep systemtap On modern Debian/Ubuntu, similarly: # apt-get build-dep systemtap - Download systemtap sources: http://sourceware.org/systemtap/ftp/releases/ http://sourceware.org/systemtap/ftp/snapshots/ (or) git clone git://sourceware.org/git/systemtap.git (or) http://sourceware.org/git/systemtap.git - Build systemtap normally: % .../configure [other autoconf options] Or, with build it with a bundled internal copy of elfutils: % .../configure --with-elfutils=ELFUTILS-SOURCE-DIR [other autoconf options] (Ensure decompression library headers/libraries are installed for elfutils' use.) Consider configuring with "--enable-dejazilla" to automatically contribute to our public test result database. Consider configuring with "--prefix=DIRECTORY" to specify an installation directory other than /usr/local. It can be an ordinary personal directory. % make all # make install To uninstall systemtap: # make uninstall Alternately, on a Fedora-like system: % make rpm # rpm -i /path/to/rpmbuild/.../systemtap*rpm - Run systemtap: To run systemtap after installation, add $prefix/bin to your $PATH, or refer to $prefix/bin/stap directly. If you keep your build tree around, you can also use the "stap" binary there. Some samples should be available under $prefix/share/doc/systemtap/examples. For the normal linux-kernel-module based backend, run "stap" as root. If desired, create "stapdev" and "stapusr" entries in /etc/groups. Any users in "stapdev"+"stapusr" will be able to run systemtap as if with root privileges. Users in "stapusr" only may launch (with "staprun") pre-compiled probe modules (created by "stap -p4 ...") that a system administrator copied under /lib/modules/`uname -r`/systemtap. "stapusr" may also be permitted to create arbitrary unprivileged systemtap scripts of their own. See README.unprivileged for additional setup instructions. To run a simple test. # stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' To run the full test suite from the build tree, install dejagnu, then run with root privileges: # make installcheck For the prototype dyninst pure-userspace backend, run "stap" as any user. % stap --runtime=dyninst -e 'probe process.function("*") { println(pn(), ":", $$parms) }' -c 'ls' For the prototype bpf backend, run "stap" as "root" # stap --runtime=bpf -e 'probe kernel.function("do_exit") { printf("bye %d\n", pid()) }' Tips: - By default, systemtap looks for the debug info in these locations: /boot/vmlinux-`uname -r` /usr/lib/debug/lib/modules/`uname -r`/vmlinux /lib/modules/`uname -r`/vmlinux /lib/modules/`uname -r`/build/vmlinux Building a kernel.org kernel: - Consider applying the utrace kernel patches, if you wish to probe user-space applications. http://sourceware.org/systemtap/wiki/utrace Or if your kernel is near 3.5, apply the uprobes and related patches (see NEWS). Or if your kernel is >= 3.5, enjoy the built-in uprobes. - Build the kernel using your normal procedures. Enable CONFIG_DEBUG_INFO, CONFIG_KPROBES, CONFIG_RELAY, CONFIG_DEBUG_FS, CONFIG_MODULES, CONFIG_MODULE_UNLOAD, CONFIG_UTRACE if able - % make modules_install install headers_install - Boot into the kernel. - If you wish to leave the kernel build tree in place, simply run % stap -r /path/to/kernel/build/tree [...] You're done. - Or else, if you wish to install the kernel build/debuginfo data into a place where systemtap will find it without the "-r" option: % ln -s /path/to/kernel/build/tree /lib/modules/RELEASE/build - Instead of using the "-r" option, you can also use the environment variable SYSTEMTAP_RELEASE to direct systemtap to the kernel data. systemtap-4.2/README.security000066400000000000000000000074731356460210500161530ustar00rootroot00000000000000Systemtap builds kernel modules. To insert a kernel module on a system, root access is needed. SECURITY MODEL ============== Originally sudo(8) was used to grant root access. After compiling a new kernel module, stap ran "sudo staprun module_path". This worked, but required all systemtap users to have root access. Many sysadmins on enterprise systems do not have root access. So, a new security model was developed. To run the staprun program (which installs systemtap kernel modules), a user must be one of the following: * the root user; * a member of both 'stapdev' and 'stapusr' groups; or * a member of the 'stapusr' group. Members of the stapusr group can only use modules located in the /lib/modules/VERSION/systemtap directory (where VERSION is the output of "uname -r"). This directory must be owned by root and not be world writable. So, there are two classes of users: systemtap developers (the root user and members of the stapdev/stapusr groups) and systemtap users (members of only the stapusr group). Systemtap developers can compile and run any systemtap script. Systemtap users can only run "approved" pre-compiled modules located in /lib/modules/VERSION/systemtap. USAGE ===== Here's the usage case. A systemtap developer hears of a problem on a production machine (which doesn't have a compiler or kernel debuginfo installed). So, he write a systemtap script to probe certain areas of the kernel that will give him a better idea of what is going on. He develops the script on a development machine (that has the compiler and kernel debuginfo installed). Once he is satisfied with the systemtap script, he creates the systemtap kernel module and copies it to /lib/modules/VERSION/systemtap on the target production machine. He then asks a systemtap user on that machine to run the module and report the results. The above usage case would look something like this: On the development machine: # vi pmod.stp (The systemtap developer writes the systemtap script.) # stap -m pmod pmod.stp (The systemtap developer compiles and runs the script. If necessary, the script may need to be edited to fix any errors.) # scp pmod.ko prod_machine:/lib/modules/`uname -r`/systemtap (The systemtap developer copies the compiled kernel module to the proper directory on the production machine. Of course other methods - ftp, nfs, etc. could be used to transfer the module.) On the production machine: $ staprun pmod (The systemtap user runs the newly developed systemtap kernel module.) There are (at least) 2 different usage scenarios for the /lib/modules/VERSION/systemtap directory. 1) Most restrictive usage. If only root should be able to add "approved" systemtap modules to /lib/modules/VERSION/systemtap, the permissions should be 755, like this: drwxr-xr-x 2 root root 4096 2007-08-07 13:54 systemtap/ 2) More permissive usage. If all systemtap developers should be able to add "approved" systemtap modules to /lib/modules/VERSION/systemtap, its permissions should be 775 (and be owned by root, group stapdev), like this: drwxrwxr-x 2 root stapdev 4096 2007-08-07 13:54 systemtap/ INTERNALS ========= To accomplish the new security model, staprun has been split into two programs: staprun and stapio. Here is a description of a typical systemtap session. The staprun program is a setuid program that does some system setup, loads the kernel module, then runs stapio (and waits for it to finish). The stapio program runs as the invoking user and is responsible for all communication with the kernel module. After the script runs to completion, stapio fork/execs staprun -d to unload the kernel module. staprun is a setuid program. It holds on to the root privileges only for the least amount of time (as required to verify/load compiled kernel module files). It invokes only stapio, and only as the original (unprivileged) user. systemtap-4.2/README.stapregex000066400000000000000000000011361356460210500162740ustar00rootroot00000000000000The following files in this directory incorporate code from the re2c project: - stapregex.h - stapregex.cxx - stapregex-tree.h - stapregex-tree.cxx - stapregex-parse.h - stapregex-parse.cxx - stapregex-dfa.h - stapregex-dfa.cxx The codebase these files are based on was originally released into the public domain. Many thanks to the developers of re2c for their work. As a courtesy to the original developers of re2c, please include appropriate acknowledgment in future code derived from this file. Information on the original re2c distribution can be found at: http://sourceforge.net/projects/re2c/ systemtap-4.2/README.unprivileged000066400000000000000000000303111356460210500167640ustar00rootroot00000000000000Unprivileged Mode for Systemtap Users ===================================== Introduction ------------ In order to use the full capabilities of systemtap, one must run it as root or as a member of the groups stapusr and stapdev. For other (unprivileged) users, systemtap does provide support for use of a subset of systemtap's capabilities to perform limited probing. For example, tracing your own applications or polling using timers. The intent is to give unprivileged users capabilities similar to those provided by a debugger. Below are instructions for running systemtap scripts in unprivileged mode. Systemtap Compile Server ------------------------ In order to load the kernel module produced by compiling a systemtap script for an unprivileged user, we must know that the script was compiled correctly and that the script does not do anything dangerous. A systemap compile server provides the trusted compilation environment needed to certify both conditions. NOTE: In order to use a compile server, the nss and nspr packages must be installed on the client host and systemtap must have been built with NSS enabled. Run 'stap -V | grep NSS' to find out if NSS is enabled. NOTE: In order to detect servers on the local network, the avahi package must be installed on the client host and systemtap must have been built with avahi enabled. Run 'stap -V | grep AVAHI' to find out if avahi is enabled. To find out if a suitable server is available on the local network, this command should produce output similar to the following: # stap --list-servers --privileged=stapusr Systemtap Compile Server Status for 'online,trusted,compatible,signer' host=somehost ip=10.15.16.156 port=10913 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" NOTE: In order for servers to be detected, the port for mDNS (5353/udp) must be open on the server and client hosts. If no servers are listed, then you must ask your system administrator to make the appropriate compile server available on the local host or on the local network. The server must be trusted as an ssl peer and as a systemtap module signer on the local host. See "Setup and Administration of Unprivileged Users for System Administrators" below for more details. Trust of Unprivileged Users --------------------------- Even with the appropriate compile server available, each unprivileged user must be explicitly trusted. This is done by adding each unprivileged user to the group stapusr and possibly the group stapsys on each host on which they will run systemtap scripts. To see if you are a member of the group stapusr on the local host, this command should produce output similar to the following: # getent group stapusr stapusr:x:483:someuser,anotheruser If your userid is listed, then you are already a member of the group stapusr. If it is not, then you must ask your system administrator to add you to this group. Once added, Try the command newgrp stapusr to activate your membership. If all else fails, logging out and back in again should work. See the manual page for newgrp(1) for details. Using Systemtap in Unprivileged Mode ------------------------------------ Unprivileged users can compile any systemtap script either directly or using a compile server, but systemtap will not load the resulting kernel module for an unprivileged user unless it has been compiled and certified by a trusted compile server. To do this, as an unprivileged user, this command should produce output similar to the following: # stap -e 'probe begin { printf ("Hello\n"); exit (); }' Hello For unprivileged users, stap will automatically add the options --privilege and --use-server (you could also specify them yourself). --use-server tells systemtap to compile the script using a server. --privilege tells the server to check the script to maker sure it doesn't do anything 'dangerous', i.e. nothing that a user with the specified privilege credentials shouldn't be able to do. If the server approves of your script and is able to compile it, systemtap will then load the resulting module for you even though you are an unprivileged user. If you save the resulting module by using the -p4 option of stap, then trusted, unprivileged users can load the module at a later time using staprun: # stap -e 'probe begin { printf ("Hello\n"); exit (); }' -p4 stap_5330.ko # staprun stap_5330.ko Hello Note that the module has already been certified (signed), so no special options are needed. Additional Information ---------------------- o When specifying path names in your script and compiling using a server, you must use a server which has access to those paths (e.g. via nfs, or a server on the local host) and you must specify the paths in full from the servers's point of view. For example, specify probe process("foo").begin() as probe process("/the/full/path/as/seen/by/the/server/to/foo").begin() o You can use '--privilege=[stapusr|stapsys] -pN' (for 1 <= N <= 4) without --use-server to compile and check scripts directly. stap will still check your script for 'dangerous' behavior, but will not load it for an unprivileged user. o When using --privilege, all compile time and run time restrictions are enforced for all users, including root and members of the group stapdev. Setup and Administration of Unprivileged Users for System Administrators ======================================================================== Introduction ------------ In order to use the full capabilities of systemtap, one must run it as root or as a member of the group stapdev. For other (unprivileged) users, systemtap does provide support for use of a subset of systemtap's capabilities to perform limited probing. For example, tracing your own applications or polling using timers. The intent is to give unprivileged users capabilities similar to those provided by a debugger. In order for this to happen, the system administrator must first perform some setup: o Systemtap compile server(s) must be made available on the local network. One server is needed for each kernel version and architecture pair for which users will compile scripts. o The compile server(s) must be trusted as an SSL peer and as a signer of systemtap modules on hosts on which unprivileged users will compile and run their scripts respectively. o Unprivileged users must be added to the group stapusr, and possibly the group stapsys on the host(s) on which they will run their scripts. Below are the necessary steps for the system administrator to setup the above infrastructure. Systemtap Compile Server ------------------------ In order to load the kernel module produced by compiling a systemtap script for an unprivileged user, we must know that the script was compiled correctly and that the script does not do anything dangerous. A systemap compile server provides a trusted environment needed to certify both conditions. In order to make a compile server available on the local network the systemtap-server package and its prerequisites must be installed on the server host. The system administrator then uses the following command: sudo service stap-server start [-r KERNEL-RELEASE] [-a ARCH] For example: # sudo service stap-server start -r 2.6.34.7-61.fc13.x86_64 -a x86_64 Starting stap-server -a "x86_64" -r "2.6.34.7-61.fc13.x86_64" -u "stap-server" [ OK ] This starts a compile server for the specified kernel release and hardware architecture. The kernel and kernel-devel package for the specified release and architecture must be installed on the server host. The kernel-debuginfo package for each kernel release and architecture should also be installed, but is not relevant for unprivileged users. If either one (or both) the kernel release and/or architecture is not specified, the kernel release and/or architecture of the server host will be used: # sudo service stap-server start Starting stap-server -a "x86_64" -r "2.6.34.7-66.fc13.x86_64" -u "stap-server" [ OK ] As a short cut, to start a server for each kernel release and architecture installed on the server host, use the command: # sudo service stap-server start -i Starting stap-server -a "x86_64" -r "2.6.34.7-61.fc13.x86_64" -u "stap-server" [ OK ] Starting stap-server -a "x86_64" -r "2.6.34.7-63.fc13.x86_64" -u "stap-server" [ OK ] Starting stap-server -a "x86_64" -r "2.6.34.7-66.fc13.x86_64" -u "stap-server" [ OK ] NOTE: Only root can start a systemtap server using the service command. Trust of Compile Servers ------------------------ Once systemtap compile servers have been made available on the local network, the system administrator must certify which ones are trusted as SSL peers, as systemtap kernel module signers or both. Certifying a compile server as an SSL peer means what the system administrator trusts that it compiles systemtap scripts correctly. Certifying a compile server as a module signer means that the system administrator trusts it to correctly check a systemtap script for behavior which should not be made available to unprivileged users. When a script is compiled using the --privilege option, the server checks the script for such behavior and cryptographically signs the resulting module if it is safe for use by unprivileged users. Verification of the signature certifies that the module was certified as 'safe' by the server and that it has not been altered since it was certified. Systemtap compile servers started by using the 'service' command are automatically trusted both as SSL peers and as module signers on the server's host. No further setup of the servers is necessary for users (clients) on that same host. Before clients on another host can make use of a server, the system administrator of each client host must certify trust in that server. This is performed in two steps: 1) Identify the server(s) to be trusted. # stap --list-servers=online,compatible Systemtap Compile Server Status for 'online,compatible' host=somehost ip=10.15.16.156 port=26543 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" Identify the server(s) to be trusted by examining the host name, ip address and sysinfo (kernel release and architecture). Take note of the 'certinfo' field of each server to be trusted. NOTE: In order for servers to be detected, the port for mDNS (5353/udp) must be open on the server and client hosts. 2) For each server to be trusted for use by unprivileged clients, use the command: sudo stap --trust-servers=ssl,signer,all-users --use-server=CERTINFO1 [--use-server=CERTINFO2 ...] where each CERTINFOn is the value of the 'certinfo' field of a server to be trusted (obtained using the previous command). For example: # sudo stap --trust-servers=ssl,signer,all-users --use-server=00:93:49:be:2a Add trust in the following servers as an SSL peer for all users and as a module signer for all users? host=somehost ip=10.15.16.156 port=26543 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" [y/N] y Using the 'certinfo' to specify each server ensures that the exact servers which were intended are the ones which become trusted. Note that only root can certify trust in a server as signer in this way. Now verify the result: # stap --list-servers --privilege=stapusr Systemtap Compile Server Status for 'online,trusted,compatible,signer' host=somehost ip=10.15.16.156 port=26543 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" Each of the servers you specified in stap 2 above should be listed. Trust of Unprivileged Users --------------------------- Finally, once compile servers have been set up and are trusted, each unprivileged user must be explicitly trusted. This is done by adding each unprivileged user to the group stapusr, and possibly the group stapsys on each host on which they will run systemtap scripts: sudo usermod -a -G stapusr[,stapsys] USERID If the user is already logged in, they can try using newgrp stapusr to activate their membership. If all else fails, logging out and back in again should work. See newgrp(1) for details. systemtap-4.2/aclocal.m4000066400000000000000000005511511356460210500152620ustar00rootroot00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS # =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html # =========================================================================== # # SYNOPSIS # # AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) # # DESCRIPTION # # Check for baseline language coverage in the compiler for the specified # version of the C++ standard. If necessary, add switches to CXX and # CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) # or '14' (for the C++14 standard). # # The second argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. # -std=c++11). If neither is specified, you get whatever works, with # preference for an extended mode. # # The third argument, if specified 'mandatory' or if left unspecified, # indicates that baseline support for the specified C++ standard is # required and that the macro should error out if no mode with that # support is found. If specified 'optional', then configuration proceeds # regardless, after defining HAVE_CXX${VERSION} if and only if a # supporting mode is found. # # LICENSE # # Copyright (c) 2008 Benjamin Kosnik # Copyright (c) 2012 Zack Weinberg # Copyright (c) 2013 Roy Stogner # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # Copyright (c) 2015 Paul Norman # Copyright (c) 2015 Moritz Klammler # Copyright (c) 2016 Krzesimir Nowak # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 7 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). AX_REQUIRE_DEFINED([AC_MSG_WARN]) AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], [$1], [14], [ax_cxx_compile_alternatives="14 1y"], [$1], [17], [ax_cxx_compile_alternatives="17 1z"], [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl m4_if([$2], [], [], [$2], [ext], [], [$2], [noext], [], [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], [$3], [optional], [ax_cxx_compile_cxx$1_required=false], [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) AC_LANG_PUSH([C++])dnl ac_success=no AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, ax_cv_cxx_compile_cxx$1, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], [ax_cv_cxx_compile_cxx$1=yes], [ax_cv_cxx_compile_cxx$1=no])]) if test x$ax_cv_cxx_compile_cxx$1 = xyes; then ac_success=yes fi m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do switch="-std=gnu++${alternative}" cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, [ac_save_CXX="$CXX" CXX="$CXX $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], [eval $cachevar=yes], [eval $cachevar=no]) CXX="$ac_save_CXX"]) if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then CXXCPP="$CXXCPP $switch" fi ac_success=yes break fi done fi]) m4_if([$2], [ext], [], [dnl if test x$ac_success = xno; then dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf dnl Cray's crayCC needs "-h std=c++11" for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, [ac_save_CXX="$CXX" CXX="$CXX $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], [eval $cachevar=yes], [eval $cachevar=no]) CXX="$ac_save_CXX"]) if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then CXXCPP="$CXXCPP $switch" fi ac_success=yes break fi done if test x$ac_success = xyes; then break fi done fi]) AC_LANG_POP([C++]) if test x$ax_cxx_compile_cxx$1_required = xtrue; then if test x$ac_success = xno; then AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) fi fi if test x$ac_success = xno; then HAVE_CXX$1=0 AC_MSG_NOTICE([No compiler with C++$1 support was found]) else HAVE_CXX$1=1 AC_DEFINE(HAVE_CXX$1,1, [define if the compiler supports basic C++$1 syntax]) fi AC_SUBST(HAVE_CXX$1) m4_if([$1], [17], [AC_MSG_WARN([C++17 is not yet standardized, so the checks may change in incompatible ways anytime])]) ]) dnl Test body for checking C++11 support m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 ) dnl Test body for checking C++14 support m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 ) m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 ) dnl Tests for new features in C++11 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L ]]) dnl Tests for new features in C++14 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ // If the compiler admits that it is not ready for C++14, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201402L #error "This is not a C++14 compiler" #else namespace cxx14 { namespace test_polymorphic_lambdas { int test() { const auto lambda = [](auto&&... args){ const auto istiny = [](auto x){ return (sizeof(x) == 1UL) ? 1 : 0; }; const int aretiny[] = { istiny(args)... }; return aretiny[0]; }; return lambda(1, 1L, 1.0f, '1'); } } namespace test_binary_literals { constexpr auto ivii = 0b0000000000101010; static_assert(ivii == 42, "wrong value"); } namespace test_generalized_constexpr { template < typename CharT > constexpr unsigned long strlen_c(const CharT *const s) noexcept { auto length = 0UL; for (auto p = s; *p; ++p) ++length; return length; } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("x") == 1UL, ""); static_assert(strlen_c("test") == 4UL, ""); static_assert(strlen_c("another\0test") == 7UL, ""); } namespace test_lambda_init_capture { int test() { auto x = 0; const auto lambda1 = [a = x](int b){ return a + b; }; const auto lambda2 = [a = lambda1(x)](){ return a; }; return lambda2(); } } namespace test_digit_separators { constexpr auto ten_million = 100'000'000; static_assert(ten_million == 100000000, ""); } namespace test_return_type_deduction { auto f(int& x) { return x; } decltype(auto) g(int& x) { return x; } template < typename T1, typename T2 > struct is_same { static constexpr auto value = false; }; template < typename T > struct is_same { static constexpr auto value = true; }; int test() { auto x = 0; static_assert(is_same::value, ""); static_assert(is_same::value, ""); return x; } } } // namespace cxx14 #endif // __cplusplus >= 201402L ]]) dnl Tests for new features in C++17 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ // If the compiler admits that it is not ready for C++17, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus <= 201402L #error "This is not a C++17 compiler" #else #if defined(__clang__) #define REALLY_CLANG #else #if defined(__GNUC__) #define REALLY_GCC #endif #endif #include #include #include namespace cxx17 { #if !defined(REALLY_CLANG) namespace test_constexpr_lambdas { // TODO: test it with clang++ from git constexpr int foo = [](){return 42;}(); } #endif // !defined(REALLY_CLANG) namespace test::nested_namespace::definitions { } namespace test_fold_expression { template int multiply(Args... args) { return (args * ... * 1); } template bool all(Args... args) { return (args && ...); } } namespace test_extended_static_assert { static_assert (true); } namespace test_auto_brace_init_list { auto foo = {5}; auto bar {5}; static_assert(std::is_same, decltype(foo)>::value); static_assert(std::is_same::value); } namespace test_typename_in_template_template_parameter { template typename X> struct D; } namespace test_fallthrough_nodiscard_maybe_unused_attributes { int f1() { return 42; } [[nodiscard]] int f2() { [[maybe_unused]] auto unused = f1(); switch (f1()) { case 17: f1(); [[fallthrough]]; case 42: f1(); } return f1(); } } namespace test_extended_aggregate_initialization { struct base1 { int b1, b2 = 42; }; struct base2 { base2() { b3 = 42; } int b3; }; struct derived : base1, base2 { int d; }; derived d1 {{1, 2}, {}, 4}; // full initialization derived d2 {{}, {}, 4}; // value-initialized bases } namespace test_general_range_based_for_loop { struct iter { int i; int& operator* () { return i; } const int& operator* () const { return i; } iter& operator++() { ++i; return *this; } }; struct sentinel { int i; }; bool operator== (const iter& i, const sentinel& s) { return i.i == s.i; } bool operator!= (const iter& i, const sentinel& s) { return !(i == s); } struct range { iter begin() const { return {0}; } sentinel end() const { return {5}; } }; void f() { range r {}; for (auto i : r) { [[maybe_unused]] auto v = i; } } } namespace test_lambda_capture_asterisk_this_by_value { struct t { int i; int foo() { return [*this]() { return i; }(); } }; } namespace test_enum_class_construction { enum class byte : unsigned char {}; byte foo {42}; } namespace test_constexpr_if { template int f () { if constexpr(cond) { return 13; } else { return 42; } } } namespace test_selection_statement_with_initializer { int f() { return 13; } int f2() { if (auto i = f(); i > 0) { return 3; } switch (auto i = f(); i + 4) { case 17: return 2; default: return 1; } } } #if !defined(REALLY_CLANG) namespace test_template_argument_deduction_for_class_templates { // TODO: test it with clang++ from git template struct pair { pair (T1 p1, T2 p2) : m1 {p1}, m2 {p2} {} T1 m1; T2 m2; }; void f() { [[maybe_unused]] auto p = pair{13, 42u}; } } #endif // !defined(REALLY_CLANG) namespace test_non_type_auto_template_parameters { template struct B {}; B<5> b1; B<'a'> b2; } #if !defined(REALLY_CLANG) namespace test_structured_bindings { // TODO: test it with clang++ from git int arr[2] = { 1, 2 }; std::pair pr = { 1, 2 }; auto f1() -> int(&)[2] { return arr; } auto f2() -> std::pair& { return pr; } struct S { int x1 : 2; volatile double y1; }; S f3() { return {}; } auto [ x1, y1 ] = f1(); auto& [ xr1, yr1 ] = f1(); auto [ x2, y2 ] = f2(); auto& [ xr2, yr2 ] = f2(); const auto [ x3, y3 ] = f3(); } #endif // !defined(REALLY_CLANG) #if !defined(REALLY_CLANG) namespace test_exception_spec_type_system { // TODO: test it with clang++ from git struct Good {}; struct Bad {}; void g1() noexcept; void g2(); template Bad f(T*, T*); template Good f(T1*, T2*); static_assert (std::is_same_v); } #endif // !defined(REALLY_CLANG) namespace test_inline_variables { template void f(T) {} template inline T g(T) { return T{}; } template<> inline void f<>(int) {} template<> int g<>(int) { return 5; } } } // namespace cxx17 #endif // __cplusplus <= 201402L ]]) # gettext.m4 serial 68 (gettext-0.19.8) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) # iconv.m4 serial 19 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) # intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) # lib-ld.m4 serial 6 dnl Copyright (C) 1996-2003, 2009-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 /dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 = 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) # lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 11 (pkg-config-0.29.1) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # po.m4 serial 24 (gettext-0.19) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) # Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 dnl python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 dnl python3.2 python3.1 python3.0 dnl python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 dnl python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version is >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Python interpreter is too old])]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': can_use_sysconfig = 0 except ImportError: pass" dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR systemtap-4.2/bpf-base.cxx000066400000000000000000000507021356460210500156210ustar00rootroot00000000000000// bpf translation pass // Copyright (C) 2016-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "bpf-internal.h" #include "elaborate.h" #include "session.h" #include "util.h" using namespace std; namespace bpf { std::ostream & value::print(std::ostream &o) const { switch (type) { case UNINIT: return o << "#"; case IMM: return o << "$" << imm_val; case STR: return o << "$\"" << escaped_literal_string (str_val) << "\""; case HARDREG: return o << "r" << reg_val; case TMPREG: return o << "t" << reg_val; default: return o << ""; } } insn::insn() : code(-1), id(0), off(0), dest(NULL), src0(NULL), src1(NULL), prev(NULL), next(NULL) { } bool is_jmp(opcode code) { if (BPF_CLASS (code) != BPF_JMP) return false; switch (BPF_OP (code)) { case BPF_JA: case BPF_JEQ: case BPF_JGT: case BPF_JGE: case BPF_JSET: case BPF_JNE: case BPF_JSGT: case BPF_JSGE: return true; default: return false; } } bool is_move(opcode c) { switch (c) { case BPF_ALU64 | BPF_MOV | BPF_X: case BPF_ALU64 | BPF_MOV | BPF_K: case BPF_ALU | BPF_MOV | BPF_K: case BPF_LD | BPF_IMM | BPF_DW: case BPF_LD_MAP: return true; default: return false; } } bool is_ldst(opcode c) { switch (BPF_CLASS (c)) { case BPF_LDX: case BPF_ST: case BPF_STX: return true; default: return false; } } bool is_binary(opcode code) { if (BPF_CLASS (code) != BPF_ALU64) return false; switch (BPF_OP (code)) { case BPF_ADD: case BPF_SUB: case BPF_AND: case BPF_OR: case BPF_LSH: case BPF_RSH: case BPF_XOR: case BPF_MUL: case BPF_ARSH: case BPF_DIV: case BPF_MOD: return true; default: return false; } } bool is_commutative(opcode code) { if (BPF_CLASS (code) != BPF_ALU64) return false; switch (BPF_OP (code)) { case BPF_ADD: case BPF_AND: case BPF_OR: case BPF_XOR: case BPF_MUL: return true; default: return false; } } /* Various functions for eBPF helper lookup: */ std::map bpf_func_name_map; std::map bpf_func_id_map; /* PR23829: On older kernels, bpf.h does not define __BPF_FUNC_MAPPER. As a fallback, use the *earliest* __BPF_FUNC_MAPPER, so stapbpf will not try helpers that only exist on subsequent kernels. TODO: This isn't perfect since even older kernels don't have some of these helpers. XXX: Note the build limitation in that SystemTap must be compiled against a recent kernel to be able to use the helpers from that kernel. That's also the case when building against recent bpf.h with __BPF_FUNC_MAPPER, so this workaround is not the source of the problem. */ #ifndef __BPF_FUNC_MAPPER #define __BPF_FUNC_MAPPER(FN) \ FN(unspec), \ FN(map_lookup_elem), \ FN(map_update_elem), \ FN(map_delete_elem), \ FN(probe_read), \ FN(ktime_get_ns), \ FN(trace_printk), \ FN(get_prandom_u32), \ FN(get_smp_processor_id), \ FN(skb_store_bytes), \ FN(l3_csum_replace), \ FN(l4_csum_replace), \ FN(tail_call), \ FN(clone_redirect), \ FN(get_current_pid_tgid), \ FN(get_current_uid_gid), \ FN(get_current_comm), \ FN(get_cgroup_classid), \ FN(skb_vlan_push), \ FN(skb_vlan_pop), \ FN(skb_get_tunnel_key), \ FN(skb_set_tunnel_key), \ FN(perf_event_read), \ FN(redirect), \ FN(get_route_realm), \ FN(perf_event_output), \ FN(skb_load_bytes), \ FN(get_stackid), \ FN(csum_diff), \ FN(skb_get_tunnel_opt), \ FN(skb_set_tunnel_opt), \ FN(skb_change_proto), \ FN(skb_change_type), \ FN(skb_under_cgroup), \ FN(get_hash_recalc), \ FN(get_current_task), \ FN(probe_write_user), \ FN(current_task_under_cgroup), \ FN(skb_change_tail), \ FN(skb_pull_data), \ FN(csum_update), \ FN(set_hash_invalid), \ #endif void init_bpf_helper_tables () { #define __BPF_SET_FUNC_NAME(x) bpf_func_name_map[BPF_FUNC_ ## x] = #x #define __BPF_SET_FUNC_ID(x) bpf_func_id_map[#x] = BPF_FUNC_ ## x __BPF_FUNC_MAPPER(__BPF_SET_FUNC_NAME) __STAPBPF_FUNC_MAPPER(__BPF_SET_FUNC_NAME) __BPF_FUNC_MAPPER(__BPF_SET_FUNC_ID) __STAPBPF_FUNC_MAPPER(__BPF_SET_FUNC_ID) (void)0; } const char * bpf_function_name (unsigned id) { if (bpf_func_name_map.count(id) != 0) return bpf_func_name_map[id]; return NULL; } bpf_func_id bpf_function_id (const std::string& name) { if (bpf_func_id_map.count(name) != 0) return bpf_func_id_map[name]; return __BPF_FUNC_MAX_ID; } unsigned bpf_function_nargs (unsigned id) { // ??? generalize to all bpf functions switch (id) { case BPF_FUNC_map_lookup_elem: return 2; case BPF_FUNC_map_update_elem: return 4; case BPF_FUNC_map_delete_elem: return 2; case BPF_FUNC_probe_read: return 3; case BPF_FUNC_ktime_get_ns: return 0; case BPF_FUNC_trace_printk: return 5; case BPF_FUNC_get_prandom_u32: return 0; case BPF_FUNC_get_smp_processor_id: return 0; case BPF_FUNC_get_current_pid_tgid: return 0; case BPF_FUNC_get_current_uid_gid: return 0; case BPF_FUNC_get_current_comm: return 2; case BPF_FUNC_perf_event_read: return 2; case BPF_FUNC_perf_event_output: return 5; default: return 5; } } void insn::mark_sets(bitset::set1_ref &s, bool v) const { if (is_call()) { // Return value and call-clobbered registers. for (unsigned i = BPF_REG_0; i <= BPF_REG_5; ++i) s.set(i, v); } else if (dest) s.set(dest->reg(), v); } void insn::mark_uses(bitset::set1_ref &s, bool v) const { if (is_call()) { unsigned n = off; for (unsigned i = 0; i < n; ++i) s.set(BPF_REG_1 + i, v); } else if (code == (BPF_JMP | BPF_EXIT)) s.set(BPF_REG_0, v); else { if (src0 && src0->is_reg()) s.set(src0->reg(), v); if (src1 && src1->is_reg()) s.set(src1->reg(), v); } } static const char * opcode_name(opcode op) { const char *opn; switch (op) { case BPF_LDX | BPF_MEM | BPF_B: opn = "ldxb"; break; case BPF_LDX | BPF_MEM | BPF_H: opn = "ldxh"; break; case BPF_LDX | BPF_MEM | BPF_W: opn = "ldxw"; break; case BPF_LDX | BPF_MEM | BPF_DW: opn = "ldx"; break; case BPF_STX | BPF_MEM | BPF_B: opn = "stxb"; break; case BPF_STX | BPF_MEM | BPF_H: opn = "stxh"; break; case BPF_STX | BPF_MEM | BPF_W: opn = "stxw"; break; case BPF_STX | BPF_MEM | BPF_DW: opn = "stx"; break; case BPF_ST | BPF_MEM | BPF_B: opn = "stkb"; break; case BPF_ST | BPF_MEM | BPF_H: opn = "stkh"; break; case BPF_ST | BPF_MEM | BPF_W: opn = "stkw"; break; case BPF_ST | BPF_MEM | BPF_DW: opn = "stk"; break; case BPF_ALU64 | BPF_ADD | BPF_X: opn = "addx"; break; case BPF_ALU64 | BPF_ADD | BPF_K: opn = "addk"; break; case BPF_ALU64 | BPF_SUB | BPF_X: opn = "subx"; break; case BPF_ALU64 | BPF_SUB | BPF_K: opn = "subk"; break; case BPF_ALU64 | BPF_AND | BPF_X: opn = "andx"; break; case BPF_ALU64 | BPF_AND | BPF_K: opn = "andk"; break; case BPF_ALU64 | BPF_OR | BPF_X: opn = "orx"; break; case BPF_ALU64 | BPF_OR | BPF_K: opn = "ork"; break; case BPF_ALU64 | BPF_LSH | BPF_X: opn = "lshx"; break; case BPF_ALU64 | BPF_LSH | BPF_K: opn = "lshk"; break; case BPF_ALU64 | BPF_RSH | BPF_X: opn = "rshx"; break; case BPF_ALU64 | BPF_RSH | BPF_K: opn = "rshk"; break; case BPF_ALU64 | BPF_XOR | BPF_X: opn = "xorx"; break; case BPF_ALU64 | BPF_XOR | BPF_K: opn = "xork"; break; case BPF_ALU64 | BPF_MUL | BPF_X: opn = "mulx"; break; case BPF_ALU64 | BPF_MUL | BPF_K: opn = "mulk"; break; case BPF_ALU64 | BPF_MOV | BPF_X: opn = "movx"; break; case BPF_ALU64 | BPF_MOV | BPF_K: opn = "movk"; break; case BPF_ALU64 | BPF_ARSH | BPF_X: opn = "arshx"; break; case BPF_ALU64 | BPF_ARSH | BPF_K: opn = "arshk"; break; case BPF_ALU64 | BPF_DIV | BPF_X: opn = "divx"; break; case BPF_ALU64 | BPF_DIV | BPF_K: opn = "divk"; break; case BPF_ALU64 | BPF_MOD | BPF_X: opn = "modx"; break; case BPF_ALU64 | BPF_MOD | BPF_K: opn = "modk"; break; case BPF_ALU64 | BPF_NEG: opn = "negx"; break; case BPF_ALU | BPF_MOV | BPF_X: opn = "movwx"; break; case BPF_ALU | BPF_MOV | BPF_K: opn = "movwk"; break; case BPF_LD | BPF_IMM | BPF_DW: opn = "movdk"; break; case BPF_LD_MAP: opn = "movmap"; break; case BPF_JMP | BPF_CALL: opn = "call"; break; case BPF_JMP | BPF_CALL | BPF_X: opn = "tcall"; break; case BPF_JMP | BPF_EXIT: opn = "exit"; break; case BPF_JMP | BPF_JA: opn = "jmp"; break; case BPF_JMP | BPF_JEQ | BPF_X: opn = "jeqx"; break; case BPF_JMP | BPF_JEQ | BPF_K: opn = "jeqk"; break; case BPF_JMP | BPF_JNE | BPF_X: opn = "jnex"; break; case BPF_JMP | BPF_JNE | BPF_K: opn = "jnek"; break; case BPF_JMP | BPF_JGT | BPF_X: opn = "jugtx"; break; case BPF_JMP | BPF_JGT | BPF_K: opn = "jugtk"; break; case BPF_JMP | BPF_JGE | BPF_X: opn = "jugex"; break; case BPF_JMP | BPF_JGE | BPF_K: opn = "jugek"; break; case BPF_JMP | BPF_JSGT | BPF_X: opn = "jsgtx"; break; case BPF_JMP | BPF_JSGT | BPF_K: opn = "jsgtk"; break; case BPF_JMP | BPF_JSGE | BPF_X: opn = "jsgex"; break; case BPF_JMP | BPF_JSGE | BPF_K: opn = "jsgek"; break; case BPF_JMP | BPF_JSET | BPF_X: opn = "jsetx"; break; case BPF_JMP | BPF_JSET | BPF_K: opn = "jsetk"; break; default: opn = ""; } return opn; } std::ostream & insn::print(std::ostream &o) const { #ifdef DEBUG_CODEGEN if (note != "") o << "{" << note << "} "; #endif const char *opn = opcode_name (code); switch (code) { case BPF_LDX | BPF_MEM | BPF_B: case BPF_LDX | BPF_MEM | BPF_H: case BPF_LDX | BPF_MEM | BPF_W: case BPF_LDX | BPF_MEM | BPF_DW: return o << opn << "\t" << *dest << ",[" << *src1 << showpos << off << noshowpos << "]"; case BPF_STX | BPF_MEM | BPF_B: case BPF_STX | BPF_MEM | BPF_H: case BPF_STX | BPF_MEM | BPF_W: case BPF_STX | BPF_MEM | BPF_DW: case BPF_ST | BPF_MEM | BPF_B: case BPF_ST | BPF_MEM | BPF_H: case BPF_ST | BPF_MEM | BPF_W: case BPF_ST | BPF_MEM | BPF_DW: return o << opn << "\t[" << *src0 << showpos << off << noshowpos << "]," << *src1; case BPF_ALU | BPF_MOV | BPF_X: case BPF_ALU | BPF_MOV | BPF_K: case BPF_ALU64 | BPF_MOV | BPF_X: case BPF_ALU64 | BPF_MOV | BPF_K: case BPF_LD | BPF_IMM | BPF_DW: case BPF_LD_MAP: return o << opn << "\t" << *dest << "," << *src1; case BPF_ALU64 | BPF_NEG: return o << opn << "\t" << *dest << "," << *src0; case BPF_ALU64 | BPF_ADD | BPF_X: case BPF_ALU64 | BPF_ADD | BPF_K: case BPF_ALU64 | BPF_SUB | BPF_X: case BPF_ALU64 | BPF_SUB | BPF_K: case BPF_ALU64 | BPF_AND | BPF_X: case BPF_ALU64 | BPF_AND | BPF_K: case BPF_ALU64 | BPF_OR | BPF_X: case BPF_ALU64 | BPF_OR | BPF_K: case BPF_ALU64 | BPF_LSH | BPF_X: case BPF_ALU64 | BPF_LSH | BPF_K: case BPF_ALU64 | BPF_RSH | BPF_X: case BPF_ALU64 | BPF_RSH | BPF_K: case BPF_ALU64 | BPF_XOR | BPF_X: case BPF_ALU64 | BPF_XOR | BPF_K: case BPF_ALU64 | BPF_MUL | BPF_X: case BPF_ALU64 | BPF_MUL | BPF_K: case BPF_ALU64 | BPF_ARSH | BPF_X: case BPF_ALU64 | BPF_ARSH | BPF_K: case BPF_ALU64 | BPF_DIV | BPF_X: case BPF_ALU64 | BPF_DIV | BPF_K: case BPF_ALU64 | BPF_MOD | BPF_K: case BPF_ALU64 | BPF_MOD | BPF_X: return o << opn << "\t" << *dest << "," << *src0 << "," << *src1; case BPF_JMP | BPF_CALL: case BPF_JMP | BPF_CALL | BPF_X: o << opn << "\t"; if (const char *name = bpf_function_name(src1->imm())) o << name; else o << *src1; return o << "," << off; case BPF_JMP | BPF_EXIT: case BPF_JMP | BPF_JA: return o << opn; case BPF_JMP | BPF_JEQ | BPF_X: case BPF_JMP | BPF_JEQ | BPF_K: case BPF_JMP | BPF_JNE | BPF_X: case BPF_JMP | BPF_JNE | BPF_K: case BPF_JMP | BPF_JGT | BPF_X: case BPF_JMP | BPF_JGT | BPF_K: case BPF_JMP | BPF_JGE | BPF_X: case BPF_JMP | BPF_JGE | BPF_K: case BPF_JMP | BPF_JSGT | BPF_X: case BPF_JMP | BPF_JSGT | BPF_K: case BPF_JMP | BPF_JSGE | BPF_X: case BPF_JMP | BPF_JSGE | BPF_K: case BPF_JMP | BPF_JSET | BPF_X: case BPF_JMP | BPF_JSET | BPF_K: return o << opn << "\t" << *src0 << "," << *src1; default: return o << ""; } } edge::edge(block *p, block *n) : prev(p), next(n) { n->prevs.insert (this); } edge::~edge() { next->prevs.erase (this); if (prev->taken == this) prev->taken = NULL; if (prev->fallthru == this) prev->fallthru = NULL; } void edge::redirect_next(block *n) { next->prevs.erase (this); next = n; n->prevs.insert (this); } block::block(int i) : first(NULL), last(NULL), taken(NULL), fallthru(NULL), id(i) { } block::~block() { for (insn *n, *i = first; i ; i = n) { n = i->next; delete i; } delete taken; delete fallthru; } block * block::is_forwarder() const { if (first == NULL) { if (fallthru) return fallthru->next; } else if (first == last && first->code == (BPF_JMP | BPF_JA)) return taken->next; return NULL; } void block::print(ostream &o) const { if (prevs.empty ()) o << "\t[prevs: entry]\n"; else { o << "\t[prevs:"; for (edge_set::const_iterator i = prevs.begin(); i != prevs.end(); ++i) o << ' ' << (*i)->prev->id; o << "]\n"; } o << id << ':' << endl; for (insn *i = first; i != NULL; i = i->next) o << '\t' << *i << endl; if (taken) o << "\t[taken: " << taken->next->id << "]" << endl; if (fallthru) o << "\t[fallthru: " << fallthru->next->id << "]" << endl; else if (!taken) o << "\t[end]" << endl; } insn * insn_inserter::new_insn() { insn *n = new insn; #ifdef DEBUG_CODEGEN if (!notes.empty()) n->note = notes.top(); else n->note = ""; #endif insert(n); return n; } void insn_before_inserter::insert(insn *n) { assert(i != NULL); insn *p = i->prev; i->prev = n; n->prev = p; n->next = i; if (p == NULL) b->first = n; else p->next = n; } void insn_after_inserter::insert(insn *p) { if (i == NULL) { assert(b->first == NULL && b->last == NULL); b->first = b->last = p; } else { insn *n = i->next; i->next = p; p->prev = i; p->next = n; if (n == NULL) b->last = p; else n->prev = p; } i = p; } program::program(enum bpf_target target) : target(target), hardreg_vals(MAX_BPF_REG), max_tmp_space(0) { for (unsigned i = 0; i < MAX_BPF_REG; ++i) hardreg_vals[i] = value::mk_hardreg(i); } program::~program() { // XXX We need to suffer a memory leak here, as blocks / edges are // tightly interlinked structures, and their dtors like to invoke // functions on each other. This will need a rethink, as this is // the type of problem domain where a garbage collected runtime // shines, and most other languages don't. #if 0 for (auto i = blocks.begin (); i != blocks.end (); ++i) delete *i; for (auto i = reg_vals.begin (); i != reg_vals.end (); ++i) delete *i; for (auto i = imm_map.begin (); i != imm_map.end (); ++i) delete i->second; for (auto i = str_map.begin (); i != str_map.end (); ++i) delete i->second; #endif } block * program::new_block () { block *r = new block(blocks.size ()); blocks.push_back (r); return r; } value * program::lookup_reg(regno r) { if (r < MAX_BPF_REG) return &hardreg_vals[r]; else return reg_vals[r - MAX_BPF_REG]; } value * program::new_reg() { regno r = max_reg(); value *v = new value(value::mk_reg(r)); reg_vals.push_back(v); return v; } value * program::new_imm(int64_t i) { auto old = imm_map.find(i); if (old != imm_map.end()) return old->second; value *v = new value(value::mk_imm(i)); auto ok = imm_map.insert(std::pair(i, v)); assert(ok.second); return v; } value * program::new_str(std::string str, bool format_str) { std::unordered_map& m = str_map; if (format_str) m = format_map; auto old = m.find(str); if (old != m.end()) return old->second; value *v = new value(value::mk_str(str, format_str)); auto ok = m.insert(std::pair(str, v)); assert(ok.second); return v; } void program::mk_ld(insn_inserter &ins, int sz, value *dest, value *base, int off) { insn *i = ins.new_insn(); i->code = BPF_LDX | BPF_MEM | sz; i->off = off; i->dest = dest; i->src1 = base; } void program::mk_st(insn_inserter &ins, int sz, value *base, int off, value *src) { insn *i = ins.new_insn(); i->code = (src->is_imm() ? BPF_ST : BPF_STX) | BPF_MEM | sz; i->off = off; i->src0 = base; i->src1 = src; } void program::mk_binary(insn_inserter &ins, opcode op, value *dest, value *s0, value *s1) { if (op == BPF_SUB) { if (s0->is_imm() && s0->imm() == 0) { mk_unary(ins, BPF_NEG, dest, s1); return; } } else if (is_commutative(op) && ((s1->is_reg() && !s0->is_reg()) || dest == s1)) std::swap (s1, s0); insn *i = ins.new_insn(); i->code = BPF_ALU64 | op | (s1->is_imm() ? BPF_K : BPF_X); i->dest = dest; i->src0 = s0; i->src1 = s1; } void program::mk_unary(insn_inserter &ins, opcode op, value *dest, value *src) { assert (op == BPF_NEG); // XXX: BPF_NEG is the only unary operator so far. if (dest != src) // src is not used for BPF_NEG. BPF negates in-place. mk_mov(ins, dest, src); insn *i = ins.new_insn(); i->code = BPF_ALU64 | op; // BPF_X is not used for BPF_NEG. i->dest = dest; i->src0 = dest; // XXX: dest as an ersatz 'source'. } void program::mk_mov(insn_inserter &ins, value *dest, value *src) { if (dest == src) return; opcode code = BPF_ALU64 | BPF_MOV | BPF_X; if (src->is_imm()) { int64_t i = src->imm(); if (i == (int32_t)i) code = BPF_ALU64 | BPF_MOV | BPF_K; else if (i == (uint32_t)i) code = BPF_ALU | BPF_MOV | BPF_K; else code = BPF_LD | BPF_IMM | BPF_DW; } insn *i = ins.new_insn(); i->code = code; i->dest = dest; i->src1 = src; } void program::mk_jmp(insn_inserter &ins, block *dest) { insn *i = ins.new_insn(); i->code = BPF_JMP | BPF_JA; block *b = ins.get_block(); b->taken = new edge(b, dest); } void program::mk_call(insn_inserter &ins, enum bpf_func_id id, unsigned nargs) { insn *i = ins.new_insn(); i->code = BPF_JMP | BPF_CALL; i->src1 = new_imm((int)id); i->off = nargs; } void program::mk_exit(insn_inserter &ins) { insn *i = ins.new_insn(); i->code = BPF_JMP | BPF_EXIT; } void program::mk_jcond(insn_inserter &ins, condition c, value *s0, value *s1, block *t, block *f) { bool inv = false; opcode code; if (s1->is_reg() && !s0->is_reg()) { std::swap (s1, s0); switch (c) { case EQ: break; case NE: break; case TEST: break; case LT: c = GT; break; case LE: c = GE; break; case GT: c = LT; break; case GE: c = LE; break; case LTU: c = GTU; break; case LEU: c = GEU; break; case GTU: c = LTU; break; case GEU: c = LEU; break; default: abort(); } } switch (c) { case EQ: code = BPF_JEQ; break; case NE: code = BPF_JNE; break; case LE: inv = true; /* Fallthrough */ case GT: code = BPF_JSGT; break; case LT: inv = true; /* Fallthrough */ case GE: code = BPF_JSGE; break; case LEU: inv = true; /* Fallthrough */ case GTU: code = BPF_JGT; break; case LTU: inv = true; /* Fallthrough */ case GEU: code = BPF_JGE; break; case TEST: code = BPF_JSET; break; default: abort (); } if (inv) std::swap (t, f); block *b = ins.get_block(); b->taken = new edge(b, t); b->fallthru = new edge(b, f); insn *i = ins.new_insn(); i->code = BPF_JMP | code | (s1->is_imm() ? BPF_K : BPF_X); i->src0 = s0; i->src1 = s1; } void program::load_map(insn_inserter &ins, value *dest, int src) { assert (src >= 0); // PR23476: Ensure a stray stats reference doesn't slip through. insn *i = ins.new_insn(); i->code = BPF_LD_MAP; i->dest = dest; i->src1 = new_imm(src); } void program::print(ostream &o) const { for (unsigned n = blocks.size(), i = 0; i < n; ++i) { block *b = blocks[i]; if (b) o << *b << endl; } } } // namespace bpf systemtap-4.2/bpf-bitset.cxx000066400000000000000000000054361356460210500162050ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2016 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "bpf-bitset.h" namespace bpf { void throw_out_of_range(const char *where) { throw std::out_of_range(where); } namespace bitset { bool set1_const_ref::empty () const { for (size_t i = 0; i < words; ++i) if (data[i]) return false; return true; } bool set1_const_ref::operator== (const set1_const_ref &o) const { if (words != o.words) return false; for (size_t i = 0; i < words; ++i) if (data[i] != o.data[i]) return false; return true; } bool set1_const_ref::is_subset_of(const set1_const_ref &o) const { size_t n = std::min(words, o.words); for (size_t i = 0; i < n; ++i) if (data[i] & ~o.data[i]) return false; for (; n < words; ++n) if (data[n]) return false; return true; } size_t set1_const_ref::find_first() const { for (size_t i = 0; i < words; ++i) if (data[i]) return i * bits_per_word + __builtin_ctzl (data[i]); return npos; } size_t set1_const_ref::find_next(size_t last) const { size_t i = (last + 1) / bits_per_word; size_t o = (last + 1) % bits_per_word; if (__builtin_expect (i >= words, 0)) return npos; word_t w = data[i] & ((word_t)-1 << o); for (; w == 0; w = data[i]) if (++i >= words) return npos; return i * bits_per_word + __builtin_ctzl (w); } size_t set1_const_ref::find_next_zero(size_t last) const { size_t i = (last + 1) / bits_per_word; size_t o = (last + 1) % bits_per_word; if (__builtin_expect (i >= words, 0)) return npos; word_t w = ~data[i] & ((word_t)-1 << o); for (; w == 0; w = ~data[i]) if (++i >= words) return npos; return i * bits_per_word + __builtin_ctzl (w); } set1::set1(size_t bits) : set1_ref(new word_t[round_words(bits)], round_words(bits)) { memset(data, 0, words * sizeof(word_t)); } set1::set1(const set1_const_ref &o) : set1_ref(new word_t[o.words], o.words) { memcpy(data, o.data, words * sizeof(word_t)); } set1::~set1() { delete[] data; } set2::set2(size_t m1, size_t m2) : n1(m1), w2(round_words(m2)), data(new word_t[m1 * w2]) { memset(data, 0, n1 * w2 * sizeof(word_t)); } set2::set2(const set2 &o) : n1(o.n1), w2(o.w2), data(new word_t[o.n1 * o.w2]) { memcpy(data, o.data, n1 * w2 * sizeof(word_t)); } set2::~set2() { delete[] data; } std::ostream& operator<< (std::ostream &o, const set1_const_ref &s) { char sep = '{'; for (size_t n = s.size(), i = 0; i < n; ++i) if (s.test(i)) { o << sep << i; sep = ','; } if (sep == '{') o << sep; return o << '}'; } } // namespace bitset } // namespace bpf systemtap-4.2/bpf-bitset.h000066400000000000000000000126521356460210500156300ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2016 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. // This differs from std::bitset in being runtime sized, and from // boost::dynamic_bitset in being space efficient in multiple dimensions. // // ??? Could be templatized to n-dimensions. #ifndef BPF_BITSET_H #define BPF_BITSET_H #include #include #include #include #include namespace bpf { void throw_out_of_range(const char *) __attribute__((noreturn)); namespace bitset { typedef size_t word_t; static size_t const bits_per_word = sizeof(word_t) * CHAR_BIT; inline size_t round_words(size_t bits) { return (bits + bits_per_word - 1) / bits_per_word; } class bit_ref { private: word_t * const word; size_t const index; bit_ref(); // not present public: bit_ref(word_t *w, size_t i) : word(w), index(i) { } void reset() { *word &= ~((word_t)1 << index); } void set() { *word |= (word_t)1 << index; } void flip() { *word ^= (word_t)1 << index; } void set(bool v) { if (v) set(); else reset(); } bool test() const { return (*word >> index) & 1; } operator bool() const { return test(); } bool operator!() const { return !test(); } bool operator|= (bool o) { if (test()) return true; else if (o) { set(); return true; } return false; } bool operator&= (bool o) { if (test()) { if (o) return true; reset(); } return false; } bool operator-= (bool o) { if (test()) { if (!o) return true; reset(); } return false; } bool operator^= (bool o) { if (o) flip(); return test(); } }; class set1; class set1_ref; class set1_const_ref { friend class set1; friend class set1_ref; private: set1_const_ref(); // not present set1_const_ref& operator= (const set1_const_ref &); // not present protected: word_t *data; size_t words; public: static const size_t npos = -1; set1_const_ref(word_t *d, size_t w) : data(d), words(w) { } bool operator!= (const set1_const_ref &o) const { return !(*this == o); } size_t size() const { return words * bits_per_word; } bool test(size_t i) const { size_t w = i / bits_per_word; size_t o = i % bits_per_word; if (w >= words) throw_out_of_range("bpf::bitset::set1_ref::test"); return (data[w] >> o) & 1; } bool operator[] (size_t i) const { return test(i); } bool empty() const; bool operator== (const set1_const_ref &o) const; bool is_subset_of(const set1_const_ref &o) const; size_t find_first() const; size_t find_next(size_t i) const; size_t find_next_zero(size_t i) const; }; class set1_ref : public set1_const_ref { private: set1_ref(); // not present public: set1_ref(size_t *d, size_t w) : set1_const_ref(d, w) { } bit_ref operator[] (size_t i) { size_t w = i / bits_per_word; size_t o = i % bits_per_word; if (w >= words) throw_out_of_range("bpf::bitset::set1_ref::operator[]"); return bit_ref(data + w, o); } set1_ref& operator= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator="); memcpy(data, o.data, words * sizeof(*data)); return *this; } set1_ref& operator= (const set1_ref &o) { return operator=(static_cast(o)); } set1_ref& operator|= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator|="); for (size_t i = 0; i < words; ++i) data[i] |= o.data[i]; return *this; } set1_ref& operator&= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator&="); for (size_t i = 0; i < words; ++i) data[i] &= o.data[i]; return *this; } set1_ref& operator-= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator-="); for (size_t i = 0; i < words; ++i) data[i] &= ~o.data[i]; return *this; } void clear() { memset(data, 0, words * sizeof(*data)); } void reset(size_t i) { (*this)[i].reset(); } void set(size_t i) { (*this)[i].set(); } void set(size_t i, bool v) { (*this)[i].set(v); } }; class set1 : public set1_ref { private: set1(); // not present public: set1(size_t bits); set1(const set1_const_ref &o); ~set1(); }; class set2 { private: size_t n1; size_t w2; word_t *data; set2(); // not present public: set2(size_t m1, size_t m2); set2(const set2 &o); ~set2(); size_t size() const { return n1; } set2& operator= (const set2 &o) { if (n1 != o.n1 || w2 != o.w2) throw_out_of_range("bpf::bitset::set2::operator="); memcpy(data, o.data, n1 * w2 * sizeof(word_t)); } set1_ref operator[] (size_t i) { if (i >= n1) throw_out_of_range("set2::operator[]"); return set1_ref(data + w2 * i, w2); } set1_const_ref operator[] (size_t i) const { if (i >= n1) throw_out_of_range("set2::operator[]"); return set1_const_ref(data + w2 * i, w2); } void clear() { memset(data, 0, n1 * w2 * sizeof(*data)); } }; std::ostream& operator<< (std::ostream &o, const set1_const_ref &s); } // namespace bitset } // namespace bpf #endif // BPF_BITSET_H systemtap-4.2/bpf-internal.h000066400000000000000000000420311356460210500161440ustar00rootroot00000000000000// bpf internal classes // Copyright (C) 2016-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BPF_INTERNAL_H #define BPF_INTERNAL_H #include #include #include #include #include #include "bpf-bitset.h" #include "staptree.h" extern "C" { #include } /* PR23829: These eBPF opcodes were added in recent kernels, and the following 'ad hoc' defines are only used by the embedded-code assembler. The code generator will convert these opcodes to equivalent operations valid for earlier eBPF. */ #ifndef BPF_JLT #define BPF_JLT 0xa0 /* LT is unsigned, '<' */ #define BPF_JLE 0xb0 /* LE is unsigned, '<=' */ #define BPF_JSLT 0xc0 /* SLT is signed, '<' */ #define BPF_JSLE 0xd0 /* SLE is signed, '<=' */ #endif struct systemtap_session; struct derived_probe; struct vardecl; namespace bpf { // PR24528: Used to distinguish between different implementations of // the BPF virtual machine. Different implementations have different // capabilities, e.g. target_user_bpfinterp supports arbitrary loops // whereas target_kernel_bpf restricts loops. enum bpf_target { target_kernel_bpf, // in-kernel JIT interpreter, restricted target_user_bpfinterp, // userspace interpreter, relaxed }; // TODO: target_kernel_bpf may later be split into two targets, // one for older kernel versions (most restricted) // and one for newer kernel versions (with loop support & other features) // Constants for BPF code generation. // TODO: BPF_MAX{STRING,FORMAT}LEN,BPF_MAXMAPENTRIES,BPF_MAXSPRINTFLEN should be user-configurable. // TODO: MAX_BPF_STACK and BPF_REG_SIZE should vary depending on bpf_target. #define MAX_BPF_STACK 512 #define BPF_REG_SIZE 8 #define BPF_MAXSTRINGLEN 64 #define BPF_MAXSTRINGLEN_PLUS 65 // #define BPF_MAXSTRINGLEN 128 // TODO: Longer strings require a smarter storage allocator. // #define BPF_MAXSTRINGLEN_PLUS 129 #define BPF_MAXFORMATLEN 256 #define BPF_MAXPRINTFARGS 32 // #define BPF_MAXPRINTFARGS 3 // Maximum for trace_printk() method. #define BPF_MAXSPRINTFARGS 3 // Maximum for sprintf() method. #define BPF_MAXMAPENTRIES 2048 // XXX: BPF_MAXMAPENTRIES may depend on kernel version. May need to experiment with rlimit in instantiate_maps(). // Constants for transport message layout. // TODO: Try to reduce the size (to __u32) while keeping proper alignment. #define BPF_TRANSPORT_VAL uint64_t #define BPF_TRANSPORT_ARG uint64_t // XXX: BPF_TRANSPORT_ARG is for small numerical arguments, not pe_long values. // Constants for array sorting. // // XXX Helpers take at most 5 arguments from BPF code. Hence we // combine a couple arguments into one sort_flags for the // map_get_next_key pseudo-helper: #define SORT_FLAGS(sort_column, sort_direction) \ (((sort_column) << 4) | ((sort_direction) + 1)) #define GET_SORT_COLUMN(sort_flags) \ (((sort_flags) & ~0xf) >> 4) #define GET_SORT_DIRECTION(sort_flags) \ ((int64_t)((sort_flags) & 0xf) - 1) // int sort_direction; // -1: decreasing, 0: none, 1: increasing // unsigned sort_column; // 0: value, 1..N: index // TODO PR24528: also encode s->sort_aggr // Will print out bpf assembly before and after optimization: //#define DEBUG_CODEGEN typedef unsigned short regno; static const regno max_regno = BPF_MAXINSNS; static const regno noreg = -1; typedef unsigned short opcode; struct insn; // BPF itself does not provide a full set of comparison codes. // To make things easy for ourselves, emulate them. enum condition { EQ, NE, LT, LE, GT, GE, LTU, LEU, GTU, GEU, TEST }; struct value { enum value_type { UNINIT, IMM, STR, /* <- lowered to HARDREG by the optimizer */ HARDREG, TMPREG, /* <- lowered to HARDREG by the optimizer */ }; value_type type : 16; regno reg_val : 16; int64_t imm_val; std::string str_val; bool format_str; // marks format string exp_type format_type; // marks format arguments value(value_type t = UNINIT, regno r = noreg, int64_t c = 0, std::string s = "", bool format_str = false) : type(t), reg_val(r), imm_val(c), str_val(s), format_str(format_str), format_type(pe_unknown) { } static value mk_imm(int64_t i) { return value(IMM, noreg, i); } static value mk_str(std::string s, bool format_str = false) { return value(STR, noreg, 0, s, format_str); } static value mk_reg(regno r) { return value(TMPREG, r); } static value mk_hardreg(regno r) { return value(HARDREG, r); } bool is_reg() const { return type >= HARDREG; } bool is_imm() const { return type == IMM; } bool is_str() const { return type == STR; } bool is_format() const { assert(is_str()); return format_str; } regno reg() const { assert(is_reg()); return reg_val; } int64_t imm() const { assert(is_imm()); return imm_val; } std::string str() const { assert(is_str()); return str_val; } std::ostream& print(std::ostream &) const; }; inline std::ostream& operator<< (std::ostream &o, const value &v) { return v.print (o); } inline bool is_call(opcode c) { return c == (BPF_JMP | BPF_CALL); } bool is_jmp(opcode c); bool is_move(opcode c); bool is_ldst(opcode c); bool is_binary(opcode c); bool is_commutative(opcode c); void init_bpf_helper_tables(); const char *bpf_function_name (unsigned id); bpf_func_id bpf_function_id (const std::string &name); unsigned bpf_function_nargs (unsigned id); const opcode BPF_LD_MAP = BPF_LD | BPF_IMM | BPF_DW | (BPF_PSEUDO_MAP_FD << 8); // Not actual BPF helpers, but treating them as such simplifies some of the // interpreter logic. We give them IDs that shouldn't conflict with IDs of // real BPF helpers. #define __STAPBPF_FUNC_MAPPER(FN) \ FN(map_get_next_key), \ FN(sprintf), \ FN(stapbpf_stat_get), \ FN(gettimeofday_ns), \ FN(set_procfs_value), \ FN(append_procfs_value), \ FN(get_procfs_value), \ FN(str_concat), \ FN(text_str), \ FN(string_quoted), const bpf_func_id BPF_FUNC_map_get_next_key = (bpf_func_id) -1; const bpf_func_id BPF_FUNC_sprintf = (bpf_func_id) -2; const bpf_func_id BPF_FUNC_stapbpf_stat_get = (bpf_func_id) -3; const bpf_func_id BPF_FUNC_gettimeofday_ns = (bpf_func_id) -4; const bpf_func_id BPF_FUNC_get_target = (bpf_func_id) -5; const bpf_func_id BPF_FUNC_set_procfs_value = (bpf_func_id) -6; const bpf_func_id BPF_FUNC_append_procfs_value = (bpf_func_id) -7; const bpf_func_id BPF_FUNC_get_procfs_value = (bpf_func_id) -8; const bpf_func_id BPF_FUNC_str_concat = (bpf_func_id) -9; const bpf_func_id BPF_FUNC_text_str = (bpf_func_id) -10; const bpf_func_id BPF_FUNC_string_quoted = (bpf_func_id) -11; struct insn { opcode code : 16; // The usual bpf opcode unsigned id : 16; // Context-dependent unique identifier signed off : 16; // The memory offset operand value *dest; // The usual destination operand value *src0; // The destination input, pre-allocation value *src1; // The usual source register operand insn *prev, *next; // Linked list of insns in the block #ifdef DEBUG_CODEGEN std::string note; // For additional diagnostics. #endif insn(); bool is_jmp() const { return bpf::is_jmp(code); } bool is_call() const { return bpf::is_call(code); } bool is_move() const { return bpf::is_move(code); } bool is_ldst() const { return bpf::is_ldst(code); } bool is_binary() const { return bpf::is_binary(code); } bool is_commutative() const { return bpf::is_commutative(code); } void mark_sets(bitset::set1_ref &s, bool v) const; void mark_uses(bitset::set1_ref &s, bool v) const; std::ostream& print(std::ostream &o) const; }; inline std::ostream& operator<< (std::ostream &o, const insn &i) { return i.print (o); } struct block; struct edge { block *prev, *next; edge(block *p, block *n); ~edge(); void redirect_next(block *n); }; struct block { typedef std::unordered_set edge_set; edge_set prevs; // All incoming edges insn *first, *last; // Linked list of insns in the block edge *taken; // Taken (conditional or not) edge edge *fallthru; // Not taken conditional edge unsigned short id; // Index in cfg block(int); ~block(); block *is_forwarder() const; void print(std::ostream &o) const; }; inline std::ostream& operator<< (std::ostream &o, const block &b) { b.print (o); return o; } class insn_inserter { private: insn_inserter(); // not present public: block *b; insn *i; #ifdef DEBUG_CODEGEN std::stack notes; #endif insn_inserter(block *bb, insn *ii) : b(bb), i(ii) { } insn_inserter(block *bb, insn *ii, const std::string& note) : b(bb), i(ii) { #ifdef DEBUG_CODEGEN notes.push(note); #else (void)note; // unused #endif } virtual ~insn_inserter() { } virtual void insert(insn *i) = 0; insn *new_insn(); block *get_block() const { return b; } insn_inserter& operator++ () { if (i) i = i->next; return *this; } insn_inserter& operator-- () { if (i) i = i->prev; return *this; } operator bool () const { return i != NULL; } }; struct insn_before_inserter : public insn_inserter { insn_before_inserter() : insn_inserter(NULL, NULL) { } insn_before_inserter(block *b, insn *i) : insn_inserter(b,i) { } insn_before_inserter(block *b, insn *i, const std::string& note) : insn_inserter(b,i,note) { } virtual void insert(insn *i); }; struct insn_after_inserter : public insn_inserter { insn_after_inserter() : insn_inserter(NULL, NULL) { } insn_after_inserter(block *b, insn *i) : insn_inserter(b,i) { } insn_after_inserter(block *b, insn *i, const std::string& note) : insn_inserter(b,i,note) { } virtual void insert(insn *i); }; struct insn_append_inserter : public insn_after_inserter { insn_append_inserter() : insn_after_inserter(NULL, NULL) { } insn_append_inserter(block *b) : insn_after_inserter(b, NULL) { } insn_append_inserter(block *b, const std::string& note) : insn_after_inserter(b, NULL, note) { } }; struct program { enum bpf_target target; std::vector blocks; // All blocks in the program block *new_block(); std::vector hardreg_vals; std::vector reg_vals; // Store at most one of each IMM and STR value: std::unordered_map imm_map; std::unordered_map str_map; std::unordered_map format_map; regno max_reg() const { return reg_vals.size() + MAX_BPF_REG; } value *lookup_reg(regno r); value *new_reg(); value *new_imm(int64_t); value *new_str(std::string, bool format_str = false); // The BPF local stack is [0, -512] indexed off BPF_REG_10. // The translator has dibs on the low bytes, [0, -max_tmp_space], // for use with various function calls that pass data by reference. // The register allocator may use [-max_tmp_space, -512] for spills. unsigned max_tmp_space; void use_tmp_space(unsigned bytes) { if (max_tmp_space < bytes) max_tmp_space = bytes; assert(max_tmp_space <= MAX_BPF_STACK); } void mk_ld(insn_inserter &ins, int sz, value *dest, value *base, int off); void mk_st(insn_inserter &ins, int sz, value *base, int off, value *src); void mk_unary(insn_inserter &ins, opcode op, value *dest, value *src); void mk_binary(insn_inserter &ins, opcode op, value *d, value *s0, value *s1); void mk_mov(insn_inserter &ins, value *dest, value *src); void mk_call(insn_inserter &ins, enum bpf_func_id id, unsigned nargs); void mk_exit(insn_inserter &ins); void mk_jmp(insn_inserter &ins, block *dest); void mk_jcond(insn_inserter &ins, condition c, value *s0, value *s1, block *t, block *f); void load_map(insn_inserter &ins, value *dest, int src); program(enum bpf_target target); ~program(); void generate(); void print(std::ostream &) const; }; // ??? Properly belongs to bpf_unparser but must be visible from bpf-opt.cxx: value *emit_simple_literal_str(program &this_prog, insn_inserter &this_ins, value *dest, int ofs, const std::string &src, bool zero_pad = false); inline std::ostream& operator<< (std::ostream &o, const program &c) { c.print (o); return o; } struct globals { // The list of BPF maps used to store global data: struct bpf_map_def { unsigned type; unsigned key_size; unsigned value_size; unsigned max_entries; unsigned map_flags; }; typedef std::vector map_vect; map_vect maps; // Used to identify a numbered bpf_map (within map_vect): using map_idx = int; // How to locate a value within the maps, based on vardecl vd: // // (1) lookup globals_map[vd] --> yields map_slot ms // (2) if ms.is_stat(), vd is an aggregate (scalar_stats, array_stats explained below) // - (s).count --> (scalar_stats['count'])[ms.this_idx][cpuid] if ms.is_scalar() // - (s[key]).count --> (array_stats[vd]['count'])[key][cpuid] otherwise // (3) otherwise, vd is a regular value // - v --> (ms.this_map)[ms.this_idx] if ms.is_scalar() // - v[key] --> (ms.this_map)[key] otherwise // // Above, v is a regular value, s is a statistical aggregate. // The indexing operations inside parens are performed at translation time, // the indexing operations outside parens are performed at runtime. // // TODOXXX PR24424: For histogram data, the indexing scheme will be: // - (s).histogram[n] --> (scalar_stats['histogram'])[ms.this_idx,n][cpuid] // Here, map[idx,n] is map[idx << shift | n] (rudimentary multi-key map). struct map_slot { map_idx map_id; // -- -1 indicates is_stat() int idx; // -- -1 indicates !is_scalar() bool is_scalar() { return idx >= 0; } bool is_stat() { return map_id < 0; } map_slot(map_idx map_id, int idx) : map_id(map_id), idx(idx) {} }; typedef std::unordered_map globals_map; globals_map globals; bool empty() { return this->globals.empty(); } // PR23476: Each statistical aggregate is represented by a percpu data structure // with fields such as count, sum, ... (see struct stat_data in runtime/stat.h). using stat_field = std::string; // XXX: could make an enum static std::vector stat_fields; // XXX: initialized in bpf-translate.cxx static stat_field stat_iter_field; // XXX: used to obtain keys for foreach, in, &c // scalar_stats, array_stats: For each stats field, create one map // for scalar aggregates, plus one map per one-dimensional array of // aggregates. typedef std::map stats_map; stats_map scalar_stats; std::unordered_map array_stats; // XXX: Used to store stats_map elements in a canonical order for serialization: typedef std::vector interned_stats_map; static interned_stats_map intern_stats_map(const stats_map &sm); static stats_map deintern_stats_map(const interned_stats_map &ism); // XXX: Used to identify stat_component_types within BPF code: static uint64_t intern_sc_type(stat_component_type sc_type) { return (uint64_t)sc_type; } static stat_component_type deintern_sc_type(uint64_t x) { return (stat_component_type)x; } // To pass stats_map information to the bpf userspace helper, // assign each stats_map a numerical 'agg_idx'. Index 0 is reserved // for scalar_stats, other stats_maps are given consecutive indices: using agg_idx = int; std::unordered_map aggregates; // The .bo ELF file will have a section (agg_idx -> interned_stats_map). // Index into globals. This element represents the map of internal globals // used for sharing data between stapbpf and kernel-side bpf programs. static const map_idx internal_map_idx = 0; // Indicates whether exit() has been called from within a bpf program. struct vardecl internal_exit; // Indexes into the bpf map of internal globals. enum internal_global_idx { EXIT = 0, NUM_INTERNALS, // non-ABI }; // PR22330: Index into globals. This element represents the // perf_event_map used to send messages from kernel-side bpf // programs to stapbpf. static const map_idx perf_event_map_idx = 1; // XXX: The number of elements for the perf_event_map is not known // at translation time and must be determined by the stapbpf loader: static const int NUM_CPUS_PLACEHOLDER = 0; // Types of transport messages supported: enum perf_event_type { STP_EXIT = 0, STP_PRINTF_START, STP_PRINTF_END, STP_PRINTF_FORMAT, STP_PRINTF_ARG_LONG, STP_PRINTF_ARG_STR, // TODO PR23476: Yet more messages to request things such as histogram printing. }; // Converts a string to an index usable in STP_PRINTF_FORMAT messages: int intern_string(std::string& str); // Interned strings by index: std::vector interned_strings; // The set of already interned strings: std::map interned_str_map; // XXX: Hacky, used to resolve function symbols in embedded code: systemtap_session *session; }; } // namespace bpf #endif // BPF_INTERNAL_H systemtap-4.2/bpf-opt.cxx000066400000000000000000000615111356460210500155110ustar00rootroot00000000000000// bpf translation pass // Copyright (C) 2016-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "staptree.h" #include "session.h" #include #include #include "bpf-internal.h" #include "bpf-bitset.h" namespace bpf { // Allocate space on the stack and store a string literal in that space: static value * alloc_literal_str(program &p, insn_inserter &ins, value *s) { std::string str = s->str(); size_t str_bytes = str.size() + 1; str_bytes += 4 - str_bytes % 4; // write aligned words to avoid garbage data int ofs; size_t tmp_space; if (s->is_format() && str_bytes <= BPF_MAXSTRINGLEN * 2) { // PR23068 workaround mitigation to reduce stack pressure: // // Store format strings in the top of the stack, since at most // one printf() operation is prepared at a time and other string // values will not be stored in that area now. ofs = -str_bytes; goto write_string; } // Append the string to existing temporary data. // // TODO: This could produce significant space limitations. // A better solution would be to integrate with the // register allocator and reclaim the space after // the string literal is no longer live. tmp_space = p.max_tmp_space; tmp_space += 4 - tmp_space % 4; // write aligned words to avoid verifier error p.use_tmp_space(tmp_space); if (tmp_space + str_bytes > MAX_BPF_STACK) throw std::runtime_error("string allocation failed due to lack of room on stack"); tmp_space += str_bytes; #if 1 // The following aren't ideal because an unlucky ordering of // allocation requests will waste additional space. // XXX PR23860: Passing a short (non-padded) string constant can fail // the verifier, which is not smart enough to determine that accesses // past the end of the string will never occur. To fix this, make sure // the string offset is at least -BPF_MAXSTRINGLEN. //if (!s->is_format() && tmp_space < BPF_MAXSTRINGLEN) // tmp_space = BPF_MAXSTRINGLEN; // TODO PR23860: An even uglier workaround for emit_string_copy() // overlapping source and destination regions. Only do this for // non-format strings, as format strings are not manipulated by the // eBPF program. if (!s->is_format() && tmp_space < BPF_MAXSTRINGLEN * 2 + str_bytes) tmp_space = BPF_MAXSTRINGLEN * 2 + str_bytes; #endif p.use_tmp_space(tmp_space); ofs = -tmp_space; write_string: value *frame = p.lookup_reg(BPF_REG_10); value *out = emit_simple_literal_str(p, ins, frame, ofs, str, false /* don't zero pad */); return out; } static void lower_str_values(program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *j = b->first; j != NULL; j = j->next) { value *s0 = j->src0; if (s0 && s0->is_str()) { insn_before_inserter ins(b, j, "str"); std::string str0 = s0->str(); value *new_s0 = alloc_literal_str(p, ins, s0); j->src0 = new_s0; } value *s1 = j->src1; if (s1 && s1->is_str()) { insn_before_inserter ins(b, j, "str"); std::string str1 = s1->str(); value *new_s1 = alloc_literal_str(p, ins, s1); j->src1 = new_s1; } } } } static void fixup_operands(program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *j = b->first; j != NULL; j = j->next) { // Any plain move is already handled. if (j->is_move()) continue; // The second source cannot handle 64-bit integers. value *s1 = j->src1; if (s1 && s1->is_imm() && s1->imm() != (int32_t)s1->imm()) { value *n = p.new_reg(); insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, n, s1); j->src1 = s1 = n; // Since the content is in the src register, we need // to use BPF_STX instead of BPF_ST j->code = BPF_STX | BPF_MEM | BPF_W; } if (value *s0 = j->src0) { if (value *d = j->dest) { // Binary operators must have dest == src0. if (d == s0) ; else if (d == s1) { if (j->is_commutative()) { j->src0 = s1; j->src1 = s0; } else { // Special care for x = y - x value *n = p.new_reg(); { insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, n, s0); } j->src0 = n; j->dest = n; { insn_after_inserter ins(b, j, "opt"); p.mk_mov(ins, d, n); } } } else { // Transform { x = y - z } to { x = y; x -= z; } insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, d, s0); j->src0 = d; } } else if (s0->is_imm()) { // Comparisons can't have src0 constant. value *n = p.new_reg(); insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, n, s0); j->src0 = n; } } } } } static void thread_jumps(program &p) { const unsigned nblocks = p.blocks.size (); std::vector fwds(nblocks); // Identify blocks that do nothing except jump to another block. for (unsigned i = 0; i < nblocks; ++i) fwds[i] = p.blocks[i]->is_forwarder (); // Propagate chains of forwarder blocks. { bool changed; do { changed = false; for (unsigned i = 0; i < nblocks; ++i) if (block *fi = fwds[i]) { unsigned j = fi->id; if (block *fj = fwds[j]) { if (i != j) { fwds[i] = fj; changed = true; } } } } while (changed); } // Perform jump threading. for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; if (edge *e = b->taken) { if (block *n = fwds[e->next->id]) e->redirect_next (n); } if (edge *e = b->fallthru) { if (block *n = fwds[e->next->id]) e->redirect_next (n); } } } static void fold_jumps(program &p) { const unsigned nblocks = p.blocks.size (); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; if (b->taken && b->fallthru && b->taken->next == b->fallthru->next) { insn *l = b->last; assert (BPF_CLASS (l->code) == BPF_JMP); l->code = BPF_JMP | BPF_JA; delete b->fallthru; } } } static void reorder_blocks(program &p) { unsigned nblocks = p.blocks.size (); std::vector visited(nblocks); std::vector ordered; std::vector worklist; // Begin with the entry block. worklist.push_back(p.blocks[0]); // Iterate until all blocks placed. while (!worklist.empty()) { block *b = worklist.back (); worklist.pop_back (); // Don't place a block twice, we're not duplicating paths. if (visited[b->id]) continue; // Place this block now. ordered.push_back (b); visited[b->id] = true; edge *t = b->taken; edge *f = b->fallthru; // Look for an IF-THEN triangle where the IF condition might // do well to be reversed. We could find larger subgraphs with // postdominators, but since we can't reverse all jumps, it's // probably not worth it. Also look for cases where the taken // edge has not been placed, but the fallthru has. if (t && f && ((t->next->fallthru && t->next->fallthru->next == f->next) || (visited[f->next->id] && !visited[t->next->id]))) switch (b->last->code) { case BPF_JMP | BPF_JEQ | BPF_X: case BPF_JMP | BPF_JEQ | BPF_K: case BPF_JMP | BPF_JNE | BPF_X: case BPF_JMP | BPF_JNE | BPF_K: b->last->code ^= BPF_JEQ ^ BPF_JNE; std::swap (t, f); b->taken = t; b->fallthru = f; break; } // Plase the two subsequent blocks. // Note the LIFO nature of the worklist and place fallthru second. if (t) { block *o = t->next; if (!visited[o->id]) worklist.push_back (o); } if (f) { block *o = f->next; if (visited[o->id]) { // The fallthru has been placed. This means that we // require an extra jump, and possibly a new block in // which to hold it. if (t) { block *n = p.new_block (); insn_append_inserter ins(n, "opt"); p.mk_jmp (ins, o); ordered.push_back (n); f->redirect_next (n); } else { delete f; insn_after_inserter ins(b, b->last, "opt"); p.mk_jmp (ins, o); } } else worklist.push_back (o); } } // Remove any unreachable blocks. for (unsigned i = 0; i < nblocks; ++i) if (!visited[i]) delete p.blocks[i]; // Renumber the blocks for the new ordering. nblocks = ordered.size (); for (unsigned i = 0; i < nblocks; ++i) { block *b = ordered[i]; b->id = i; } p.blocks = ordered; } struct interference_graph { // ??? Quadratic size for a sparsely populated set. However, for small // sizes (less than hundreds of registers) this is probably more time // and space efficient than std::set>. bitset::set2 data; interference_graph(size_t n) : data(n, n) { } bool test(unsigned a, unsigned b) const { return data[a].test(b); } void add(unsigned a, unsigned b) { data[a].set(b); data[b].set(a); } void merge(unsigned a, unsigned b) { data[a] |= data[b]; data[b] = data[a]; } }; struct copy_graph { struct entry { unsigned short count; regno i, j; entry(regno ii, regno jj) : count(0), i(ii), j(jj) { } bool operator< (const entry &o) const { return (count < o.count || (count == o.count && (i < o.i || (i == o.i && j < o.j)))); } }; std::vector data; std::unordered_map map; void add(regno i, regno j); void sort(); }; void copy_graph::add(regno i, regno j) { if (i == j) return; if (i > j) std::swap(i, j); uint32_t ij = (uint32_t)i << 16 | j; uint32_t k; auto iter = map.find(ij); if (iter == map.end()) { k = data.size(); data.push_back(entry(i, j)); auto ok = map.insert(std::pair(ij, k)); assert(ok.second); } else k = iter->second; data[k].count += 1; } void copy_graph::sort() { map.clear(); std::sort(data.begin(), data.end()); } struct life_data { bitset::set2 live_in; bitset::set2 live_out; bitset::set2 used; bitset::set2 killed; bitset::set1 cross_call; std::vector uses; unsigned short npartitions; life_data(size_t nblocks, size_t nregs); }; life_data::life_data(size_t nblocks, size_t nregs) : live_in(nblocks, nregs), live_out(nblocks, nregs), used(nblocks, nregs), killed(nblocks, nregs), cross_call(nregs), uses(nregs) { } static void find_lifetimes (life_data &d, program &p) { const unsigned nblocks = p.blocks.size(); const unsigned nregs = p.max_reg(); // Collect initial lifetime d from the blocks. for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; bitset::set1_ref killed = d.killed[i]; bitset::set1_ref used = d.used[i]; for (insn *j = b->last; j != NULL; j = j->prev) { // Every regno that is set in a block is part of killed. j->mark_sets(killed, 1); // Remove sets from used before adding the uses. j->mark_sets(used, 0); j->mark_uses(used, 1); } d.live_in[i] = used; } // Propagate lifetime d around blocks. We could reduce iteration // by processing the blocks in post-dominator order. But the program // sizes we must have (because of bpf restrictions) are is too small // to worry about more than simple reverse order. bool changed; bitset::set1 tmp(nregs); do { changed = false; for (unsigned i = nblocks; i-- > 0; ) { block *b = p.blocks[i]; if (b->taken) { tmp = d.live_in[b->taken->next->id]; if (b->fallthru) tmp |= d.live_in[b->fallthru->next->id]; } else if (b->fallthru) tmp = d.live_in[b->fallthru->next->id]; else tmp.clear(); d.live_out[i] = tmp; tmp -= d.killed[i]; tmp |= d.used[i]; // Note that in order to ensure termination we must accumulate // into live_in rather than assigning to it. if (!tmp.is_subset_of (d.live_in[i])) { changed = true; d.live_in[i] |= tmp; } } } while (changed); } static void find_block_cgraph (copy_graph &cgraph, block *b) { for (insn *j = b->last; j != NULL; j = j->prev) { if (j->is_move() && j->src1->is_reg()) cgraph.add(j->dest->reg(), j->src1->reg()); else if (j->is_binary() && j->src0->is_reg()) cgraph.add(j->dest->reg(), j->src0->reg()); } } static void find_cgraph (copy_graph &cgraph, const program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) find_block_cgraph (cgraph, p.blocks[i]); } static void find_block_uses (std::vector &uses, block *b) { for (insn *j = b->last; j != NULL; j = j->prev) { if (j->src0 && j->src0->is_reg()) ++uses[j->src0->reg()]; if (j->src1 && j->src1->is_reg()) ++uses[j->src1->reg()]; } } static void find_uses (std::vector &uses, const program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) find_block_uses (uses, p.blocks[i]); } static void find_block_igraph (interference_graph &igraph, bitset::set1_ref &cross_call, block *b, bitset::set1_ref &live) { for (insn *j = b->last; j != NULL; j = j->prev) { // Remove sets from used before adding the uses. j->mark_sets(live, 0); if (j->is_call()) cross_call |= live; j->mark_uses(live, 1); // We use another bitset to include the variables that are // defined at this instruction in the interference. bitset::set1 interference = live; if (!j->is_call()) j->mark_sets(interference, 1); // Record interference between two simultaneously live registers. for (size_t r1 = interference.find_first(); r1 != bitset::set1_ref::npos; r1 = interference.find_next (r1)) for (size_t r2 = interference.find_next(r1); r2 != bitset::set1_ref::npos; r2 = interference.find_next (r2)) igraph.add(r1, r2); } } static void find_igraph (interference_graph &igraph, life_data &d, program &p) { const unsigned nblocks = p.blocks.size(); const unsigned nregs = p.max_reg(); bitset::set1 tmp(nregs); for (unsigned i = 0; i < nblocks; ++i) { tmp = d.live_out[i]; find_block_igraph (igraph, d.cross_call, p.blocks[i], tmp); } } struct pref_sort_reg { const life_data &d; pref_sort_reg(const life_data &dd) : d(dd) { } bool cmp(regno a, regno b) const; bool operator()(const regno &a, const regno &b) const { return cmp(a, b); } }; bool pref_sort_reg::cmp(regno a, regno b) const { // Prefer registers that cross calls first. int diff = d.cross_call.test(a) - d.cross_call.test(b); if (diff != 0) return diff > 0; // Prefer registers with more uses. diff = d.uses[a] - d.uses[b]; if (diff != 0) return diff > 0; // Finally, make the sort stable by comparing regnos. return a < b; } static void merge_copies(std::vector &partition, life_data &life, interference_graph &igraph, program &p) { copy_graph cgraph; find_cgraph(cgraph, p); cgraph.sort(); unsigned ncopies = cgraph.data.size(); for (unsigned i = 0; i < ncopies; ++i) { const copy_graph::entry &c = cgraph.data[i]; unsigned r1 = partition[c.i]; unsigned r2 = c.j; if (r2 >= MAX_BPF_REG && partition[r2] == r2 && !igraph.test(r1, r2) && (r1 >= BPF_REG_6 || !life.cross_call.test(r2))) { partition[r2] = r1; igraph.merge(r1, r2); life.cross_call[r1] |= life.cross_call[r2]; } } } static void merge(std::vector &partition, std::vector &ordered, life_data &life, interference_graph &igraph, program &p) { unsigned nregs = p.max_reg(); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) { unsigned r1 = ordered[i - MAX_BPF_REG]; if (partition[r1] != r1) continue; for (unsigned j = i + 1; j < nregs; ++j) { unsigned r2 = ordered[j - MAX_BPF_REG]; if (partition[r2] == r2) { bool interferes = false; // check for interference between r1, r2 and any // registers already merged with either r1 or r2. for (unsigned k = MAX_BPF_REG; k < nregs; ++k) { unsigned r3 = ordered[k - MAX_BPF_REG]; if ((partition[r3] == r1 && igraph.test(r2, r3)) || (partition[r3] == r2 && igraph.test(r1, r3))) { interferes = true; break; } } if (!interferes) { partition[r2] = r1; igraph.merge(r1, r2); life.cross_call[r1] |= life.cross_call[r2]; } } } } } static unsigned allocate(std::vector &partition, std::vector &ordered, life_data &life, interference_graph &igraph, program &p) { // return 0 if allocation succeeds, otherwise return the first // temporary that cannot be allocated. unsigned nregs = p.max_reg(); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) { unsigned r2 = ordered[i - MAX_BPF_REG]; // Propagate partition info from previous allocations. if (partition[r2] != r2) continue; unsigned first; if (life.cross_call.test(r2)) first = BPF_REG_6; else first = BPF_REG_0; for (unsigned r1 = first; r1 < BPF_REG_10; ++r1) { bool interferes = false; // check for interference between r1, r2 and any // registers already merged with either r1 or r2. for (unsigned k = MAX_BPF_REG; k < nregs; ++k) { unsigned r3 = ordered[k - MAX_BPF_REG]; if ((partition[r3] == r1 && igraph.test(r2, r3)) || (partition[r3] == r2 && igraph.test(r1, r3))) { interferes = true; break; } } if (!interferes) { partition[r2] = r1; igraph.merge(r1, r2); goto done; } } // We didn't find a color for r2. return r2; done: ; } return 0; } static unsigned choose_spill_reg(unsigned tmpreg, std::vector &ordered, std::vector spilled) { unsigned ret = 0; // Choose the lowest priority reg that has been allocated but not spilled. // tmpreg is the first element in ordered that hasn't been allocated. for (unsigned i = 0; i < ordered.size() && ordered[i] != tmpreg; ++i) { unsigned reg = ordered[i]; if (!spilled[reg]) ret = reg; } if (!ret) throw std::runtime_error(_("unable to register allocate")); spilled[ret] = true; return ret; } static void spill(unsigned reg, unsigned num_spills, program &p) { unsigned nblocks = p.blocks.size(); value *frame = p.lookup_reg(BPF_REG_10); // reg's stack offset. int off = BPF_REG_SIZE * (num_spills + 1) + p.max_tmp_space; // Ensure double word alignment. if (off % BPF_REG_SIZE) off += BPF_REG_SIZE - off % BPF_REG_SIZE; if (off > MAX_BPF_STACK) throw std::runtime_error( _("register allocation failed due to insufficent BPF stack size")); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *j = b->last; j != NULL; j = j->prev) { value *src0 = j->src0; value *src1 = j->src1; value *dest = j->dest; value *new_tmp = NULL; // If reg is a source, insert a load before j if ((src0 && src0->reg_val == reg) || (src1 && src1->reg_val == reg)) { insn_before_inserter ins(b, j, "regalloc"); new_tmp = p.new_reg(); p.mk_ld (ins, BPF_DW, new_tmp, frame, -off); // Replace reg with new_tmp if (src0 && src0->reg_val == reg) j->src0 = new_tmp; if (src1 && src1->reg_val == reg) j->src1 = new_tmp; } // If reg is the destination, insert a store after j if (dest && dest->reg_val == reg) { insn_after_inserter ins(b, j, "regalloc"); new_tmp = new_tmp ?: p.new_reg(); p.mk_st (ins, BPF_DW, frame, -off, new_tmp); j->dest = new_tmp; } } } return; } static void finalize_allocation(std::vector &partition, program &p) { unsigned nregs = p.max_reg(); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) { value *v = p.lookup_reg(i); // Hard registers are partition[i] == i, // and while other partition members should require // no more than three dereferences to yield a hard reg, // we allow for up to ten dereferences. unsigned r = partition[i]; for (int j = 0; r >= MAX_BPF_REG && j < 10; j++) r = partition[r]; assert(r < MAX_BPF_REG); v->reg_val = r; } } static void reg_alloc(program &p) { bool done = false; const unsigned nblocks = p.blocks.size(); std::vector spilled(p.max_reg()); for (unsigned num_spills = 0; !done; ++num_spills) { const unsigned nregs = p.max_reg(); life_data life(nblocks, nregs); find_lifetimes(life, p); find_uses(life.uses, p); std::vector partition(nregs); // Initially, all registers are in their own partition. for (unsigned i = 0; i < nregs; ++i) partition[i] = i; // Compute the interference of all registers. interference_graph igraph(nregs); find_igraph (igraph, life, p); // Merge non-conflicting partitions between copies first. merge_copies(partition, life, igraph, p); // Merge all other non-conflicting registers next. std::vector ordered(nregs - MAX_BPF_REG); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) ordered[i - MAX_BPF_REG] = i; merge(partition, ordered, life, igraph, p); // XXX: Consider using C++14 lambda. pref_sort_reg sort_obj(life); std::sort(ordered.begin(), ordered.end(), sort_obj); // Perform a simplistic register allocation by merging TMPREG // partitions with HARDREG "partitions". unsigned reg = allocate(partition, ordered, life, igraph, p); if (reg) { // reg could not be allocated. Spill the lowest priority // temporary that has already been allocated. reg = choose_spill_reg(reg, ordered, spilled); spill(reg, num_spills, p); // Add new temporaries to spilled. for (unsigned i = nregs; i < p.max_reg(); ++i) spilled.push_back(true); spilled[reg] = true; } else { // Write partition data to the TMPREG value structures. finalize_allocation(partition, p); done = true; } } } static void post_alloc_cleanup (program &p) { const unsigned nblocks = p.blocks.size(); unsigned id = 0; for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *n, *j = b->first; j != NULL; j = n) { n = j->next; if (j->is_move() && j->src1->is_reg() && j->dest->reg() == j->src1->reg()) { // Delete no-op moves created by partition merging. insn *p = j->prev; if (p) p->next = n; else b->first = n; if (n) n->prev = p; else b->last = p; } else { j->id = id; // 64-bit immediates take two op slots. id += ((j->code & 0xff) == (BPF_LD | BPF_IMM | BPF_DW) ? 2 : 1); } } } } // XXX PR23860: Passing a short (non-padded) string constant can fail // the verifier, which is not smart enough to determine that accesses // past the end of the string will never occur. To fix this, start the // program with some code to zero out the temporary stack space. void zero_stack(program &p) { block *entry_block = p.blocks[0]; insn_before_inserter ins(entry_block, entry_block->first, "zero_stack"); value *frame = p.lookup_reg(BPF_REG_10); for (int32_t ofs = -(int32_t)p.max_tmp_space; ofs < 0; ofs += 4) p.mk_st(ins, BPF_W, frame, (int32_t)ofs, p.new_imm(0)); } void program::generate() { #ifdef DEBUG_CODEGEN std::cerr << "DEBUG BEFORE OPT " << *this << std::endl; #endif lower_str_values(*this); zero_stack(*this); fixup_operands(*this); thread_jumps(*this); fold_jumps(*this); reorder_blocks(*this); reg_alloc(*this); post_alloc_cleanup(*this); #ifdef DEBUG_CODEGEN std::cerr << "DEBUG AFTER OPT " << *this << std::endl; #endif } } // namespace bpf systemtap-4.2/bpf-shared-globals.h000066400000000000000000000030621356460210500172200ustar00rootroot00000000000000// bpf globals functionality shared between translator and stapbpf // Copyright (C) 2016-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BPF_SHARED_GLOBALS_H #define BPF_SHARED_GLOBALS_H namespace bpf { // PR23476 List of percpu stat fields (see struct stat_data in runtime/stat.h). std::vector globals::stat_fields { "count", "sum", // for @count(), @sum(), @avg() // TODO: also "shift" // TODO: "min", "max", // for @min(), @max() // TODO: "avg_s", "_M2", "variance", "variance_s", // for @variance() // TODO: "histogram", // PR24424 for @hist_linear(), @hist_log() }; // XXX Use the map for this field when iterating keys or testing inclusion: std::string globals::stat_iter_field = "count"; globals::interned_stats_map globals::intern_stats_map(const globals::stats_map &sm) { globals::interned_stats_map ism; for (globals::stat_field sf : globals::stat_fields) { auto it = sm.find(sf); assert (it != sm.end()); ism.push_back(it->second); } return ism; } globals::stats_map globals::deintern_stats_map(const globals::interned_stats_map &ism) { globals::stats_map sm; for (unsigned i = 0; i < std::min(ism.size(), globals::stat_fields.size()); i++) { globals::stat_field sf = globals::stat_fields[i]; globals::map_idx map_id = ism[i]; sm[sf] = map_id; } return sm; } }; #endif systemtap-4.2/bpf-translate.cxx000066400000000000000000004470541356460210500167160ustar00rootroot00000000000000// bpf translation pass // Copyright (C) 2016-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "bpf-internal.h" #include "parse.h" #include "staptree.h" #include "elaborate.h" #include "session.h" #include "translator-output.h" #include "tapsets.h" #include #include #include #include #include extern "C" { #include /* Unfortunately strtab manipulation functions were only officially added to elfutils libdw in 0.167. Before that there were internal unsupported ebl variants. While libebl.h isn't supported we'll try to use it anyway if the elfutils we build against is too old. */ #include #if _ELFUTILS_PREREQ (0, 167) #include typedef Dwelf_Strent Stap_Strent; typedef Dwelf_Strtab Stap_Strtab; #define stap_strtab_init dwelf_strtab_init #define stap_strtab_add(X,Y) dwelf_strtab_add(X,Y) #define stap_strtab_free dwelf_strtab_free #define stap_strtab_finalize dwelf_strtab_finalize #define stap_strent_offset dwelf_strent_off #else #include typedef Ebl_Strent Stap_Strent; typedef Ebl_Strtab Stap_Strtab; #define stap_strtab_init ebl_strtabinit #define stap_strtab_add(X,Y) ebl_strtabadd(X,Y,0) #define stap_strtab_free ebl_strtabfree #define stap_strtab_finalize ebl_strtabfinalize #define stap_strent_offset ebl_strtaboffset #endif #include #include } // XXX: Required static data and methods from bpf::globals, shared with stapbpf. #include "bpf-shared-globals.h" #ifndef EM_BPF #define EM_BPF 0xeb9f #endif #ifndef R_BPF_MAP_FD #define R_BPF_MAP_FD 1 #endif std::string module_name; namespace bpf { struct side_effects_visitor : public expression_visitor { bool side_effects; side_effects_visitor() : side_effects(false) { } void visit_expression(expression *) { } void visit_pre_crement(pre_crement *) { side_effects = true; } void visit_post_crement(post_crement *) { side_effects = true; } void visit_assignment (assignment *) { side_effects = true; } void visit_functioncall (functioncall *) { side_effects = true; } void visit_print_format (print_format *) { side_effects = true; } void visit_stat_op (stat_op *) { side_effects = true; } void visit_hist_op (hist_op *) { side_effects = true; } }; struct init_block : public ::block { // This block contains statements that initialize global variables // with default values. It should be visited first among any // begin probe bodies. Note that initialization of internal globals // (ex. the exit status) is handled by the stapbpf runtime. init_block(globals &glob); ~init_block(); bool empty() { return this->statements.empty(); } }; init_block::init_block(globals &glob) { for (auto i = glob.globals.begin(); i != glob.globals.end(); ++i) { struct vardecl *v = i->first; if (v->init && v->type == pe_long) { struct literal_number *num = static_cast(v->init); struct symbol *sym = new symbol; struct assignment *asgn = new assignment; struct expr_statement *stmt = new expr_statement; sym->referent = v; asgn->type = pe_long; asgn->op = "="; asgn->left = sym; asgn->right = num; stmt->value = asgn; this->statements.push_back(stmt); } } } init_block::~init_block() { for (auto i = this->statements.begin(); i != this->statements.end(); ++i) { struct expr_statement *stmt = static_cast(*i); struct assignment *asgn = static_cast(stmt->value); struct symbol *sym = static_cast(asgn->left); // referent and right are not owned by this. sym->referent = NULL; asgn->right = NULL; delete sym; delete asgn; delete stmt; } } static bool has_side_effects (expression *e) { side_effects_visitor t; e->visit (&t); return t.side_effects; } /* forward declarations */ struct asm_stmt; struct bpf_unparser : public throwing_visitor { // The visitor class isn't as helpful as it might be. As a consequence, // the RESULT member is set after visiting any expression type. Use the // emit_expr helper to return the result properly. value *result; // The program into which we are emitting code. program &this_prog; globals &glob; value *this_in_arg0 = NULL; // The "current" block into which we are currently emitting code. insn_append_inserter this_ins; void set_block(block *b) { this_ins.b = b; this_ins.i = b->last; } void clear_block() { this_ins.b = NULL; this_ins.i = NULL; } bool in_block() const { return this_ins.b != NULL; } // Destinations for "break", "continue", and "return" respectively. std::vector loop_break; std::vector loop_cont; std::vector func_return; std::vector func_return_val; std::vector func_calls; // Local variable declarations. typedef std::unordered_map locals_map; locals_map *this_locals; // Return 0. block *ret0_block; block *exit_block; block *get_ret0_block(); block *get_exit_block(); // TODO General triage of bpf-possible functionality: virtual void visit_block (::block *s); // TODO visit_try_block -> UNHANDLED virtual void visit_embeddedcode (embeddedcode *s); virtual void visit_null_statement (null_statement *s); virtual void visit_expr_statement (expr_statement *s); virtual void visit_if_statement (if_statement* s); virtual void visit_for_loop (for_loop* s); virtual void visit_foreach_loop (foreach_loop* s); virtual void visit_return_statement (return_statement* s); virtual void visit_delete_statement (delete_statement* s); virtual void visit_next_statement (next_statement* s); virtual void visit_break_statement (break_statement* s); virtual void visit_continue_statement (continue_statement* s); virtual void visit_literal_string (literal_string *e); virtual void visit_literal_number (literal_number* e); // TODO visit_embedded_expr -> UNHANDLED, could treat as embedded_code virtual void visit_binary_expression (binary_expression* e); virtual void visit_unary_expression (unary_expression* e); virtual void visit_pre_crement (pre_crement* e); virtual void visit_post_crement (post_crement* e); virtual void visit_logical_or_expr (logical_or_expr* e); virtual void visit_logical_and_expr (logical_and_expr* e); virtual void visit_array_in (array_in* e); // ??? visit_regex_query -> UNHANDLED, requires new kernel functionality virtual void visit_compound_expression (compound_expression *e); virtual void visit_comparison (comparison* e); // TODO visit_concatenation for kernel probes -> (2) pseudo-LOOP: copy the // strings while concatenating virtual void visit_concatenation (concatenation* e); virtual void visit_ternary_expression (ternary_expression* e); virtual void visit_assignment (assignment* e); virtual void visit_symbol (symbol* e); virtual void visit_target_register (target_register* e); virtual void visit_target_deref (target_deref* e); // visit_target_bitfield -> ?? should already be handled in earlier pass? // visit_target_symbol -> ?? should already be handled in earlier pass virtual void visit_arrayindex (arrayindex *e); virtual void visit_functioncall (functioncall* e); virtual void visit_print_format (print_format* e); virtual void visit_stat_op (stat_op* e); virtual void visit_hist_op (hist_op* e); // visit_atvar_op -> ?? should already be handled in earlier pass // visit_cast_op -> ?? should already be handled in earlier pass // visit_autocast_op -> ?? should already be handled in earlier pass // visit_defined_op -> ?? should already be handled in earlier pass // visit_entry_op -> ?? should already be handled in earlier pass // visit_perf_op -> ?? should already be handled in earlier pass // TODO: Other bpf functionality to take advantage of in tapsets, or as alternate implementations: // - backtrace.stp :: BPF_MAP_TYPE_STACKTRACE + bpf_getstackid // - BPF_MAP_TYPE_LRU_HASH :: for size-limited maps // - BPF_MAP_GET_NEXT_KEY :: for user-space iteration through maps // see https://ferrisellis.com/posts/ebpf_syscall_and_maps/#ebpf-map-types void emit_stmt(statement *s); void emit_mov(value *d, value *s); void emit_jmp(block *b); void emit_cond(expression *e, block *t, block *f); void emit_statmap_lookup(value *dest, globals::map_idx map_id, value *idx); void emit_statmap_update(globals::map_idx map_id, value *idx, int idx_ofs, value *val); void emit_aggregation(vardecl *var, globals::map_slot& g, value *val, value *idx = NULL, int idx_ofs = 0); void emit_store(expression *dest, value *src); value *emit_expr(expression *e); value *emit_bool(expression *e); value *emit_context_var(bpf_context_vardecl *v); void emit_transport_msg(globals::perf_event_type msg, value *arg = NULL, exp_type format_type = pe_unknown); value *emit_functioncall(functiondecl *f, const std::vector &args); value *emit_print_format(const std::string &format, const std::vector &actual, bool print_to_stream = true, const token *tok = NULL); // Used for the embedded-code assembler: int64_t parse_imm (const asm_stmt &stmt, const std::string &str); size_t parse_asm_stmt (embeddedcode *s, size_t start, /*OUT*/asm_stmt &stmt); value *emit_asm_arg(const asm_stmt &stmt, const std::string &arg, bool allow_imm = true, bool allow_emit = true); value *emit_asm_reg(const asm_stmt &stmt, const std::string ®); value *get_asm_reg(const asm_stmt &stmt, const std::string ®); void emit_asm_opcode(const asm_stmt &stmt, std::map label_map); // Used for the embedded-code assembler's diagnostics: source_loc adjusted_loc; size_t adjust_pos; std::vector adjusted_toks; // track for deallocation // Used for string data: value *emit_literal_string(const std::string &str, const token *tok); value *emit_string_copy(value *dest, int ofs, value *src, bool zero_pad = false); // Used for passing long and string arguments on the stack where an address is expected: void emit_long_arg(value *arg, int ofs, value *val); void emit_str_arg(value *arg, int ofs, value *str); void add_prologue(); locals_map *new_locals(const std::vector &); bpf_unparser (program &c, globals &g); virtual ~bpf_unparser (); }; bpf_unparser::bpf_unparser(program &p, globals &g) : throwing_visitor ("unhandled statement or expression type"), result(NULL), this_prog(p), glob(g), this_locals(NULL), ret0_block(NULL), exit_block(NULL) { } bpf_unparser::~bpf_unparser() { delete this_locals; } bpf_unparser::locals_map * bpf_unparser::new_locals(const std::vector &vars) { locals_map *m = new locals_map; for (std::vector::const_iterator i = vars.begin (); i != vars.end (); ++i) { const locals_map::value_type v (*i, this_prog.new_reg()); auto ok = m->insert (v); assert (ok.second); } return m; } block * bpf_unparser::get_exit_block() { if (exit_block) return exit_block; block *b = this_prog.new_block(); insn_append_inserter ins(b, "exit_block"); this_prog.mk_exit(ins); exit_block = b; return b; } block * bpf_unparser::get_ret0_block() { if (ret0_block) return ret0_block; block *b = this_prog.new_block(); insn_append_inserter ins(b, "ret0_block"); this_prog.mk_mov(ins, this_prog.lookup_reg(BPF_REG_0), this_prog.new_imm(0)); b->fallthru = new edge(b, get_exit_block()); ret0_block = b; return b; } void bpf_unparser::emit_stmt(statement *s) { if (s) s->visit (this); } value * bpf_unparser::emit_expr(expression *e) { e->visit (this); value *v = result; result = NULL; return v; } void bpf_unparser::emit_mov(value *d, value *s) { this_prog.mk_mov(this_ins, d, s); } void bpf_unparser::emit_jmp(block *b) { // Begin by hoping that we can simply place the destination as fallthru. // If this assumption doesn't hold, it'll be fixed by reorder_blocks. block *this_block = this_ins.get_block (); this_block->fallthru = new edge(this_block, b); clear_block (); } void bpf_unparser::emit_cond(expression *e, block *t_dest, block *f_dest) { condition cond; value *s0, *s1; // Look for and handle logical operators first. if (logical_or_expr *l = dynamic_cast(e)) { block *cont_block = this_prog.new_block (); emit_cond (l->left, t_dest, cont_block); set_block (cont_block); emit_cond (l->right, t_dest, f_dest); return; } if (logical_and_expr *l = dynamic_cast(e)) { block *cont_block = this_prog.new_block (); emit_cond (l->left, cont_block, f_dest); set_block (cont_block); emit_cond (l->right, t_dest, f_dest); return; } if (unary_expression *u = dynamic_cast(e)) if (u->op == "!") { emit_cond (u->operand, f_dest, t_dest); return; } // What is left must generate a comparison + conditional branch. if (comparison *c = dynamic_cast(e)) { s0 = emit_expr (c->left); s1 = emit_expr (c->right); if (c->op == "==") cond = EQ; else if (c->op == "!=") cond = NE; else if (c->op == "<") cond = LT; else if (c->op == "<=") cond = LE; else if (c->op == ">") cond = GT; else if (c->op == ">=") cond = GE; else throw SEMANTIC_ERROR (_("unhandled comparison operator"), e->tok); } else { binary_expression *bin = dynamic_cast(e); if (bin && bin->op == "&") { s0 = emit_expr (bin->left); s1 = emit_expr (bin->right); cond = TEST; } else { // Fall back to E != 0. s0 = emit_expr (e); s1 = this_prog.new_imm(0); cond = NE; } } this_prog.mk_jcond (this_ins, cond, s0, s1, t_dest, f_dest); clear_block (); } value * bpf_unparser::emit_bool (expression *e) { block *else_block = this_prog.new_block (); block *join_block = this_prog.new_block (); value *r = this_prog.new_reg(); emit_mov (r, this_prog.new_imm(1)); emit_cond (e, join_block, else_block); set_block (else_block); emit_mov (r, this_prog.new_imm(0)); emit_jmp (join_block); set_block(join_block); return r; } /* PR23476: Helpers for loading/storing long values in a stat field map. Several of these map operations are issued for each stats operation, so we avoid code duplication by taking an index already on the stack. ??? These helpers could be used in other contexts than just stats. */ void bpf_unparser::emit_statmap_lookup(value *dest, globals::map_idx map_id, value *idx) { this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); emit_mov(this_prog.lookup_reg(BPF_REG_2), idx); // XXX idx stored by caller this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); // Check for null pointer: value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); block *cont_block = this_prog.new_block(); block *join_block = this_prog.new_block(); emit_mov(dest, i0); // default to a result of 0 this_prog.mk_jcond(this_ins, EQ, r0, i0, join_block, cont_block); set_block(cont_block); this_prog.mk_ld(this_ins, BPF_DW, dest, r0, 0); emit_jmp(join_block); set_block(join_block); } void bpf_unparser::emit_statmap_update(globals::map_idx map_id, value *idx, int idx_ofs, value *val) { int val_ofs = idx_ofs - 8; if ((-val_ofs) % 8 != 0) // align to double-word val_ofs -= 8 - (-val_ofs) % 8; this_prog.use_tmp_space(-val_ofs); this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); emit_mov(this_prog.lookup_reg(BPF_REG_2), idx); // XXX idx stored by caller emit_long_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); // TODO this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); } // XXX Based on __stap_stat_add in runtime/stat-common.c. // There might be a clever way to avoid code duplication later, // but right now the code format is too different. Just reimplement. void bpf_unparser::emit_aggregation(vardecl *var, globals::map_slot& ms, value *val, value *idx, int idx_ofs) { #ifdef DEBUG_CODEGEN this_ins.notes.push("agg"); #endif // Obtain the correct stats_map and index: assert (ms.is_stat()); globals::stats_map sd; if (var->arity == 0) { assert (ms.is_scalar() && idx == NULL); sd = glob.scalar_stats; // idx is an offset into scalar stat field maps, store on the stack value *frame = this_prog.lookup_reg(BPF_REG_10); idx_ofs = -4; // BPF_W this_prog.mk_st(this_ins, BPF_W, frame, idx_ofs, this_prog.new_imm(ms.idx)); this_prog.use_tmp_space(-idx_ofs); idx = this_prog.new_reg(); this_prog.mk_binary(this_ins, BPF_ADD, idx, frame, this_prog.new_imm(idx_ofs)); } else // var->arity > 0 { assert (!ms.is_scalar()); assert (var->arity > 0 && idx != NULL); auto it = glob.array_stats.find(var); assert (it != glob.array_stats.end()); // XXX: should check earlier sd = it->second; // idx is a value stored on the stack } for (auto f : globals::stat_fields) assert(sd.find(f) != sd.end()); // TODO PR23476: Emit simplified code for now. // // ??? lock stat // if (idx not in sd[stat_iter_field] || sd->count == 0) { // sd->count = 1; // sd->sum = val; // } else { // if(stat_op_count) sd->count++; // if(stat_op_sum) sd->sum += val; // } // ??? unlock stat block *then_block = this_prog.new_block (); block *else_block = this_prog.new_block (); block *join_block = this_prog.new_block (); value *tmp = this_prog.new_reg(); emit_statmap_lookup(tmp, sd["count"], idx); this_prog.mk_jcond (this_ins, EQ, tmp, this_prog.new_imm(0), then_block, else_block); set_block (then_block); emit_statmap_update(sd["count"], idx, idx_ofs, this_prog.new_imm(1)); emit_statmap_update(sd["sum"], idx, idx_ofs, val); emit_jmp (join_block); set_block (else_block); if (1) // TODO: if (stat_op_count) { emit_statmap_lookup(tmp, sd["count"], idx); this_prog.mk_binary(this_ins, BPF_ADD, tmp, tmp, this_prog.new_imm(1)); emit_statmap_update(sd["count"], idx, idx_ofs, tmp); } if (1) // TODO: if (stat_op_sum) { emit_statmap_lookup(tmp, sd["sum"], idx); this_prog.mk_binary(this_ins, BPF_ADD, tmp, tmp, val); emit_statmap_update(sd["sum"], idx, idx_ofs, tmp); } emit_jmp (join_block); set_block(join_block); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); #endif } void bpf_unparser::emit_store(expression *e, value *val) { if (symbol *s = dynamic_cast(e)) // scalar lvalue { vardecl *var = s->referent; assert (var->arity == 0); auto g = glob.globals.find (var); if (g != glob.globals.end()) { value *frame = this_prog.lookup_reg(BPF_REG_10); int key_ofs, val_ofs; // BPF_FUNC_map_update_elem will dereference the address // passed in BPF_REG_3: switch (var->type) { case pe_long: // Store the long on the stack and pass its address: val_ofs = -8; emit_long_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: val_ofs = -BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); this_prog.use_tmp_space(BPF_MAXSTRINGLEN); break; case pe_stats: // Emit separate code to update stat fields: emit_aggregation(var, g->second, val); return; default: goto err; } key_ofs = val_ofs - 4; this_prog.mk_st(this_ins, BPF_W, frame, key_ofs, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(-key_ofs); // XXX g->second.is_stat() handled above this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(key_ofs)); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); return; } auto i = this_locals->find (var); if (i != this_locals->end ()) { emit_mov (i->second, val); return; } } else if (arrayindex *a = dynamic_cast(e)) // array lvalue { if (symbol *a_sym = dynamic_cast(a->base)) { vardecl *v = a_sym->referent; int key_ofs = 0, val_ofs; auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); unsigned element = v->arity; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); switch (v->type) { case pe_long: // Store the long on the stack and pass its address: val_ofs = key_ofs - 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: val_ofs = key_ofs - BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); this_prog.use_tmp_space(BPF_MAXSTRINGLEN); break; case pe_stats: // Emit separate code to update stat fields: { value *idx = this_prog.new_reg(); value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_binary(this_ins, BPF_ADD, idx, frame, this_prog.new_imm(key_ofs)); this_prog.use_tmp_space(-key_ofs); emit_aggregation(v, g->second, val, idx, key_ofs); } return; default: throw SEMANTIC_ERROR(_("unhandled array type"), v->tok); } this_prog.use_tmp_space(-val_ofs); // XXX g->second.is_stat() handled above this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); return; } } err: throw SEMANTIC_ERROR (_("unknown lvalue"), e->tok); } void bpf_unparser::visit_block (::block *s) { unsigned n = s->statements.size(); for (unsigned i = 0; i < n; ++i) emit_stmt (s->statements[i]); } /* WORK IN PROGRESS: A simple eBPF assembler. In order to effectively write eBPF tapset functions, we want to use embedded-code assembly rather than compile from SystemTap code. At the same time, we want to hook into stapbpf functionality to reserve stack memory, allocate virtual registers or signal errors. The assembler syntax will probably take a couple of attempts to get just right. This attempt keeps things as close as possible to the first embedded-code assembler, with a few more features and a disgustingly lenient parser that allows things like $ this is all one "**identifier**" believe-it!-or-not Ahh for the days of 1960s FORTRAN. ??? It might make more sense to implement an assembler based on the syntax used in official eBPF subsystem docs. */ /* Supported assembly statement types include: ::= label, ; ::= alloc, , [, align|noalign]; ::= call, , , , ...; ::= , , , , ; Supported argument types include: ::= | ::= | - ::= | r | $ctx $ | $ | $$ | ::= | BPF_MAXSTRINGLEN | BPF_F_CURRENT_CPU | - ::= | */ // #define BPF_ASM_DEBUG struct asm_stmt { std::string kind; unsigned code; std::string dest, src1; int64_t off, imm; // metadata for jmp instructions // ??? The logic around these flags could be pruned a bit. bool has_jmp_target = false; bool has_fallthrough = false; std::string jmp_target, fallthrough; // metadata for call, error instructions std::vector params; // metadata for alloc instructions bool align_alloc; token *tok; }; std::ostream& operator << (std::ostream& o, const asm_stmt& stmt) { if (stmt.kind == "label") o << "label, " << stmt.dest << ";"; else if (stmt.kind == "opcode") { o << std::hex << stmt.code << ", " << stmt.dest << ", " << stmt.src1 << ", "; if (stmt.off != 0 || stmt.jmp_target == "") o << stmt.off; else if (stmt.off != 0) // && stmt.jmp_target != "" o << stmt.off << "/"; if (stmt.jmp_target != "") o << "label:" << stmt.jmp_target; o << ", " << stmt.imm << ";" << (stmt.has_fallthrough ? " +FALLTHROUGH " + stmt.fallthrough : ""); } else if (stmt.kind == "alloc") { o << "alloc, " << stmt.dest << ", " << stmt.imm << ";"; } else if (stmt.kind == "call") { o << "call, " << stmt.dest << ", "; for (unsigned k = 0; k < stmt.params.size(); k++) { o << stmt.params[k]; o << (k >= stmt.params.size() - 1 ? ";" : ", "); } } else o << ""; return o; } bool is_numeric (const std::string &str) { size_t pos = 0; try { stol(str, &pos, 0); } catch (const std::invalid_argument &e) { return false; } catch (const std::out_of_range &e) { /* XXX: probably numeric but not valid; give up */ return false; } catch (...) { /* XXX: handle other errors the same way */ std::cerr << "BUG: bpf assembler -- is_numeric() saw unexpected exception" << std::endl; return false; } return (pos == str.size()); } int64_t bpf_unparser::parse_imm (const asm_stmt &stmt, const std::string &str) { int64_t val; if (str == "BPF_MAXSTRINGLEN") val = BPF_MAXSTRINGLEN; else if (str == "BPF_F_CURRENT_CPU") val = BPF_F_CURRENT_CPU; else if (str == "-") val = 0; else try { val = stol(str); } catch (std::exception &e) { // XXX: invalid_argument, out_of_range throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode operand '%s'", str.c_str()), stmt.tok); } return val; } /* Parse an assembly statement starting from position start in code, then write the output in stmt. Returns a position immediately after the parsed statement. */ size_t bpf_unparser::parse_asm_stmt (embeddedcode *s, size_t start, /*OUT*/asm_stmt &stmt) { const interned_string &code = s->code; retry: std::vector args; unsigned n = code.size(); size_t pos; bool in_comment = false; bool in_string = false; // ??? As before, parser is extremely non-rigorous and could do // with some tightening in terms of the inputs it accepts. std::string arg = ""; size_t save_start = start; // -- position for diagnostics for (pos = start; pos < n; pos++) { char c = code[pos]; char c2 = pos + 1 < n ? code [pos + 1] : 0; if (isspace(c) && !in_string) continue; // skip else if (in_comment) { if (c == '*' && c2 == '/') ++pos, in_comment = false; // else skip } else if (in_string) { // resulting string will be processed by translate_escapes() if (c == '"') arg.push_back(c), in_string = false; // include quote else if (c == '\\' && c2 == '"') ++pos, arg.push_back(c), arg.push_back(c2); else // accept any char, including whitespace arg.push_back(c); } else if (c == '/' && c2 == '*') ++pos, in_comment = true; else if (c == '"') // found a literal string { if (arg.empty() && args.empty()) save_start = pos; // start of first argument // XXX: This allows '"' inside an arg and will treat the // string as a sequence of weird identifier characters. A // more rigorous parser would error on mixing strings and // regular chars. arg.push_back(c); // include quote in_string = true; } else if (c == ',') // reached end of argument { // XXX: This strips out empty args. A more rigorous parser would error. if (arg != "") args.push_back(arg); arg = ""; } else if (c == ';') // reached end of statement { // XXX: This strips out empty args. A more rigorous parser would error. if (arg != "") args.push_back(arg); arg = ""; pos++; break; } else // found (we assume) a regular char { if (arg.empty() && args.empty()) save_start = pos; // start of first argument // XXX: As before, this strips whitespace within args // (so '$ab', '$ a b' and '$a b' are equivalent). // // A more rigorous parser would track in_arg // and after_arg states and error on whitespace within args. arg.push_back(c); } } // final ';' is optional, so we watch for a trailing arg: if (arg != "") args.push_back(arg); // handle the case with no args if (args.empty() && pos >= n) return std::string::npos; // finished parsing else if (args.empty()) { // XXX: This skips an empty statement. // A more rigorous parser would error. start = pos; goto retry; } // compute token with adjusted source location for diagnostics // TODO: needs some attention to how multiline tokens are printed in error reporting -- with this code, caret aligns incorrectly for (/* use saved adjust_pos */; adjust_pos < save_start && adjust_pos < n; adjust_pos++) { char c = code[adjust_pos]; if (c == '\n') { adjusted_loc.line++; adjusted_loc.column = 1; } else adjusted_loc.column++; } // Now populate the statement data. stmt = asm_stmt(); // clear pre-existing data // set token with adjusted source location stmt.tok = s->tok->adjust_location(adjusted_loc); adjusted_toks.push_back(stmt.tok); #ifdef BPF_ASM_DEBUG std::cerr << "bpf_asm parse_asm_stmt: tokenizer got "; for (unsigned k = 0; k < args.size(); k++) std::cerr << args[k] << ", "; std::cerr << std::endl; #endif if (args[0] == "label") { if (args.size() != 2) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (label expects 1 arg, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.dest = args[1]; } else if (args[0] == "alloc") { if (args.size() != 3 && args.size() != 4) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (alloc expects 2 or 3 args, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.dest = args[1]; stmt.imm = parse_imm(stmt, args[2]); // handle align, noalign options if (args.size() == 4 && args[3] == "align") { stmt.align_alloc = true; } else if (args.size() == 4 && args[3] == "noalign") { stmt.align_alloc = false; } else if (args.size() == 4) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (alloc expects 'align' or 'noalign' as 3rd arg, found '%s'", args[3].c_str()), stmt.tok); else { stmt.align_alloc = false; } } else if (args[0] == "call") { if (args.size() < 3) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (call expects at least 2 args, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.dest = args[1]; assert(stmt.params.empty()); for (unsigned k = 2; k < args.size(); k++) stmt.params.push_back(args[k]); } else if (is_numeric(args[0])) { if (args.size() != 5) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (opcode expects 4 args, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = "opcode"; try { stmt.code = stoul(args[0], 0, 0); } catch (std::exception &e) { // XXX: invalid_argument, out_of_range throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode opcode '%s'", args[0].c_str()), stmt.tok); } stmt.dest = args[1]; stmt.src1 = args[2]; stmt.has_jmp_target = BPF_CLASS(stmt.code) == BPF_JMP && BPF_OP(stmt.code) != BPF_EXIT && BPF_OP(stmt.code) != BPF_CALL; stmt.has_fallthrough = // only for jcond stmt.has_jmp_target && BPF_OP(stmt.code) != BPF_JA; // XXX: stmt.fallthrough is computed by visit_embeddedcode if (stmt.has_jmp_target) { stmt.off = 0; stmt.jmp_target = args[3]; } else stmt.off = parse_imm(stmt, args[3]); stmt.imm = parse_imm(stmt, args[4]); } else throw SEMANTIC_ERROR (_F("unknown bpf embeddedcode operator '%s'", args[0].c_str()), stmt.tok); // we returned one statement, there may be more parsing to be done return pos; } /* forward declaration */ std::string translate_escapes (const interned_string &str, const token* tok); /* Convert a or operand to a value. May emit code to store a string constant on the stack. */ value * bpf_unparser::emit_asm_arg (const asm_stmt &stmt, const std::string &arg, bool allow_imm, bool allow_emit) { if (arg == "$$") { /* arg is a return value */ if (func_return.empty()) throw SEMANTIC_ERROR (_("no return value outside function"), stmt.tok); return func_return_val.back(); } else if (arg == "$ctx") { /* provide the context where available */ return this_in_arg0 ? this_in_arg0 : this_prog.new_imm(0x0); } else if (arg[0] == '$') { /* assume arg is a variable */ std::string var = arg.substr(1); for (auto i = this_locals->begin(); i != this_locals->end(); ++i) { vardecl *v = i->first; if (var == v->unmangled_name) return i->second; } /* if it's an unknown variable, allocate a temporary */ struct vardecl *vd = new vardecl; vd->name = "__bpfasm__local_" + var; vd->unmangled_name = var; vd->type = pe_long; vd->arity = 0; value *reg = this_prog.new_reg(); const locals_map::value_type v (vd, reg); auto ok = this_locals->insert (v); assert (ok.second); return reg; } else if (is_numeric(arg) && allow_imm) { /* arg is an immediate constant */ long imm = stol(arg, 0, 0); return this_prog.new_imm(imm); } else if (is_numeric(arg) || arg[0] == 'r') { /* arg is a register number */ std::string reg = arg[0] == 'r' ? arg.substr(1) : arg; unsigned long num; bool parsed = false; try { num = stoul(reg, 0, 0); parsed = true; } catch (std::exception &e) {} // XXX: invalid_argument, out_of_range if (!parsed || num > 10) throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); return this_prog.lookup_reg(num); } else if (arg[0] == '"') { if (!allow_emit) throw SEMANTIC_ERROR (_F("invalid bpf argument %s " "(string literal not allowed here)", arg.c_str()), stmt.tok); /* arg is a string constant */ if (arg[arg.size() - 1] != '"') throw SEMANTIC_ERROR (_F("BUG: improper string %s", arg.c_str()), stmt.tok); std::string escaped_str = arg.substr(1,arg.size()-2); /* strip quotes */ std::string str = translate_escapes(escaped_str, stmt.tok); return emit_literal_string(str, stmt.tok); } else if (arg == "BPF_MAXSTRINGLEN" || arg == "BPF_F_CURRENT_CPU") { /* arg is a system constant */ if (!allow_imm) throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); if (arg == "BPF_MAXSTRINGLEN") return this_prog.new_imm(BPF_MAXSTRINGLEN); else // arg == "BPF_F_CURRENT_CPU" return this_prog.new_imm(BPF_F_CURRENT_CPU); } else if (arg == "-") { /* arg is null a.k.a '0' */ if (!allow_imm) throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); return this_prog.new_imm(0); } else if (allow_imm) throw SEMANTIC_ERROR (_F("invalid bpf argument '%s'", arg.c_str()), stmt.tok); else throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); } /* As above, but don't accept immediate values. Do accept string constants (since they're stored in a register). */ value * bpf_unparser::emit_asm_reg (const asm_stmt &stmt, const std::string ®) { return emit_asm_arg(stmt, reg, /*allow_imm=*/false); } /* As above, but don't allow string constants or anything that emits code. Useful if the context requires an lvalue. */ value * bpf_unparser::get_asm_reg (const asm_stmt &stmt, const std::string ®) { return emit_asm_arg(stmt, reg, /*allow_imm=*/false, /*allow_emit=*/false); } void bpf_unparser::emit_asm_opcode (const asm_stmt &stmt, std::map label_map) { if (stmt.code > 0xff && stmt.code != BPF_LD_MAP) throw SEMANTIC_ERROR (_("invalid bpf code"), stmt.tok); bool r_dest = false, r_src0 = false, r_src1 = false, i_src1 = false; bool op_jmp = false, op_jcond = false; condition c = EQ; // <- quiet a compiler warning about uninitialized c switch (BPF_CLASS (stmt.code)) { case BPF_LDX: r_dest = r_src1 = true; break; case BPF_STX: r_src0 = r_src1 = true; break; case BPF_ST: r_src0 = i_src1 = true; break; case BPF_ALU: case BPF_ALU64: r_dest = true; if (stmt.code & BPF_X) r_src1 = true; else i_src1 = true; switch (BPF_OP (stmt.code)) { case BPF_NEG: case BPF_MOV: break; case BPF_END: /* X/K bit repurposed as LE/BE. */ i_src1 = false, r_src1 = true; break; default: r_src0 = true; } break; case BPF_JMP: switch (BPF_OP (stmt.code)) { case BPF_EXIT: // no special treatment needed break; case BPF_CALL: i_src1 = true; break; case BPF_JA: op_jmp = true; break; default: // XXX: assume this is a jcond op op_jcond = true; r_src0 = true; if (stmt.code & BPF_X) r_src1 = true; else i_src1 = true; } // compute jump condition c switch (BPF_OP (stmt.code)) { case BPF_JEQ: c = EQ; break; case BPF_JNE: c = NE; break; case BPF_JGT: c = GTU; break; case BPF_JGE: c = GEU; break; case BPF_JLT: c = LTU; break; case BPF_JLE: c = LEU; break; case BPF_JSGT: c = GT; break; case BPF_JSGE: c = GE; break; case BPF_JSLT: c = LT; break; case BPF_JSLE: c = LE; break; case BPF_JSET: c = TEST; break; default: if (op_jcond) throw SEMANTIC_ERROR (_("invalid branch in bpf code"), stmt.tok); } break; default: if (stmt.code == BPF_LD_MAP) r_dest = true, i_src1 = true; else throw SEMANTIC_ERROR (_F("unknown opcode '%d' in bpf code", stmt.code), stmt.tok); } value *v_dest = NULL; if (r_dest || r_src0) v_dest = get_asm_reg(stmt, stmt.dest); else if (stmt.dest != "0" && stmt.dest != "-") throw SEMANTIC_ERROR (_F("invalid register field '%s' in bpf code", stmt.dest.c_str()), stmt.tok); value *v_src1 = NULL; if (r_src1) v_src1 = emit_asm_reg(stmt, stmt.src1); else { if (stmt.src1 != "0" && stmt.src1 != "-") throw SEMANTIC_ERROR (_F("invalid register field '%s' in bpf code", stmt.src1.c_str()), stmt.tok); if (i_src1) v_src1 = this_prog.new_imm(stmt.imm); else if (stmt.imm != 0) throw SEMANTIC_ERROR (_("invalid immediate field in bpf code"), stmt.tok); } if (stmt.off != (int16_t)stmt.off) throw SEMANTIC_ERROR (_F("offset field '%lld' out of range in bpf code", (long long) stmt.off), stmt.tok); if (op_jmp) { block *target = label_map[stmt.jmp_target]; this_prog.mk_jmp(this_ins, target); } else if (op_jcond) { if (label_map.count(stmt.jmp_target) == 0) throw SEMANTIC_ERROR(_F("undefined jump target '%s' in bpf code", stmt.jmp_target.c_str()), stmt.tok); if (label_map.count(stmt.fallthrough) == 0) throw SEMANTIC_ERROR(_F("BUG: undefined fallthrough target '%s'", stmt.fallthrough.c_str()), stmt.tok); block *target = label_map[stmt.jmp_target]; block *fallthrough = label_map[stmt.fallthrough]; this_prog.mk_jcond(this_ins, c, v_dest, v_src1, target, fallthrough); } else // regular opcode { insn *i = this_ins.new_insn(); i->code = stmt.code; i->dest = (r_dest ? v_dest : NULL); i->src0 = (r_src0 ? v_dest : NULL); i->src1 = v_src1; i->off = stmt.off; } } void bpf_unparser::visit_embeddedcode (embeddedcode *s) { #ifdef DEBUG_CODEGEN this_ins.notes.push("asm"); #endif std::vector statements; asm_stmt stmt; // PR24528: The /* userspace */ annotation is used to mark // userspace-only BPF embeddedcode tapset functions. if (s->tagged_p("/* userspace */") && this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("embeddedcode marked /* userspace */ in kernel bpf probe"), s->tok); // track adjusted source location for each stmt adjusted_loc = s->tok->location; adjust_pos = 0; size_t pos = 0; while ((pos = parse_asm_stmt(s, pos, stmt)) != std::string::npos) { statements.push_back(stmt); } // build basic block table std::map label_map; block *entry_block = this_ins.b; label_map[";;entry"] = entry_block; bool after_label = true; asm_stmt *after_jump = NULL; unsigned fallthrough_count = 0; for (std::vector::iterator it = statements.begin(); it != statements.end(); it++) { stmt = *it; if (after_jump != NULL && stmt.kind == "label") { after_jump->has_fallthrough = true; after_jump->fallthrough = stmt.dest; } else if (after_jump != NULL) { block *b = this_prog.new_block(); // generate unique label for fallthrough edge std::ostringstream oss; oss << "fallthrough;;" << fallthrough_count++; std::string fallthrough_label = oss.str(); // XXX: semicolons prevent collision with programmer-defined labels label_map[fallthrough_label] = b; set_block(b); after_jump->has_fallthrough = true; after_jump->fallthrough = fallthrough_label; } if (stmt.kind == "label" && after_label) { // avoid creating multiple blocks for consecutive labels label_map[stmt.dest] = this_ins.b; after_jump = NULL; } else if (stmt.kind == "label") { block *b = this_prog.new_block(); label_map[stmt.dest] = b; set_block(b); after_label = true; after_jump = NULL; } else if (stmt.has_fallthrough) { after_label = false; after_jump = &*it; // be sure to refer to original, not copied stmt } else if (stmt.kind == "opcode" && BPF_CLASS(stmt.code) == BPF_JMP && BPF_OP(stmt.code) != BPF_CALL /* CALL stays in the same block */) { after_label = false; after_jump = &*it; // be sure to refer to original, not copied stmt } else { after_label = false; after_jump = NULL; } } if (after_jump != NULL) // ??? should just fall through to exit throw SEMANTIC_ERROR (_("BUG: bpf embeddedcode doesn't support " "fallthrough on final asm_stmt"), stmt.tok); // emit statements bool jumped_already = false; set_block(entry_block); for (std::vector::iterator it = statements.begin(); it != statements.end(); it++) { stmt = *it; #ifdef BPF_ASM_DEBUG std::cerr << "bpf_asm visit_embeddedcode: " << stmt << std::endl; #endif if (stmt.kind == "label") { if (!jumped_already) emit_jmp (label_map[stmt.dest]); set_block(label_map[stmt.dest]); } else if (stmt.kind == "alloc") { /* Reserve stack space and store its address in dest. */ int ofs = -this_prog.max_tmp_space - stmt.imm; if (stmt.align_alloc && (-ofs) % 8 != 0) // align to double-word ofs -= 8 - (-ofs) % 8; this_prog.use_tmp_space(-ofs); // ??? Consider using a storage allocator and this_prog.new_obj(). value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_binary(this_ins, BPF_ADD, dest, this_prog.lookup_reg(BPF_REG_10) /*frame*/, this_prog.new_imm(ofs)); } else if (stmt.kind == "call") { assert (!stmt.params.empty()); std::string func_name = stmt.params[0]; bpf_func_id hid = bpf_function_id(func_name); if (hid != __BPF_FUNC_MAX_ID) { // ??? For diagnostics: check if the number of arguments is correct. regno r = BPF_REG_1; unsigned nargs = 0; for (unsigned k = 1; k < stmt.params.size(); k++) { // ??? Could make params optional to avoid the MOVs, // ??? since the calling convention is well-known. value *from_reg = emit_asm_arg(stmt, stmt.params[k]); value *to_reg = this_prog.lookup_reg(r); this_prog.mk_mov(this_ins, to_reg, from_reg); nargs++; r++; } this_prog.mk_call(this_ins, hid, nargs); if (stmt.dest != "-") { value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_mov(this_ins, dest, this_prog.lookup_reg(BPF_REG_0) /* returnval */); } // ??? For diagnostics: check other cases with stmt.dest. } else if (func_name == "printf" || func_name == "sprintf") { if (stmt.params.size() < 2) throw SEMANTIC_ERROR (_F("bpf embeddedcode '%s' expects format string, " "none provided", func_name.c_str()), stmt.tok); std::string format = stmt.params[1]; if (format.size() < 2 || format[0] != '"' || format[format.size()-1] != '"') throw SEMANTIC_ERROR (_F("bpf embeddedcode '%s' expects format string, " "but first parameter is not a string literal", func_name.c_str()), stmt.tok); format = format.substr(1,format.size()-2); /* strip quotes */ format = translate_escapes(format, stmt.tok); size_t format_bytes = format.size() + 1; if (format_bytes > BPF_MAXFORMATLEN) throw SEMANTIC_ERROR(_("Format string for print too long"), stmt.tok); std::vector args; for (unsigned k = 2; k < stmt.params.size(); k++) args.push_back(emit_asm_arg(stmt, stmt.params[k])); if (args.size() > BPF_MAXPRINTFARGS) throw SEMANTIC_ERROR(_NF("additional argument to print", "too many arguments to print (%zu)", args.size(), args.size()), stmt.tok); bool print_to_stream = (func_name == "printf"); value *retval = emit_print_format(format, args, print_to_stream, stmt.tok); if (retval != NULL && stmt.dest != "-") { value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_mov(this_ins, dest, retval); } // ??? For diagnostics: check other cases with retval and stmt.dest. } else { // TODO: Experimental code for supporting basic functioncalls. // Needs improvement and simplification to work with full generality. // But thus far, it is sufficient for calling exit(). #if 1 if (func_name != "exit") throw SEMANTIC_ERROR(_("BUG: bpf embeddedcode non-helper 'call' operation only supports printf(),sprintf(),exit() for now"), stmt.tok); #elif 1 throw SEMANTIC_ERROR(_("BUG: bpf embeddedcode non-helper 'call' operation only supports printf(),sprintf() for now"), stmt.tok); #endif #if 1 // ???: Passing systemtap_session through all the way to here // seems intrusive, but less intrusive than moving // embedded-code assembly to the translate_globals() pass. symresolution_info sym (*glob.session); functioncall *call = new functioncall; call->tok = stmt.tok; unsigned nargs = stmt.params.size() - 1; std::vector fds = sym.find_functions (call, func_name, nargs, stmt.tok); delete call; if (fds.empty()) // ??? Could call levenshtein_suggest() as in // symresolution_info::visit_functioncall(). throw SEMANTIC_ERROR(_("bpf embeddedcode unresolved function call"), stmt.tok); if (fds.size() > 1) throw SEMANTIC_ERROR(_("bpf embeddedcode unhandled function overloading"), stmt.tok); functiondecl *f = fds[0]; // TODO: Imitation of semantic_pass_symbols, does not // cover full generality of the lookup process. update_visitor_loop (*glob.session, glob.session->code_filters, f->body); sym.current_function = f; sym.current_probe = 0; f->body->visit (&sym); // ??? For now, always inline the function call. for (auto i = func_calls.begin(); i != func_calls.end(); ++i) if (f == *i) throw SEMANTIC_ERROR (_("unhandled function recursion"), stmt.tok); // Collect the function arguments. std::vector args; for (unsigned k = 1; k < stmt.params.size(); k++) args.push_back(emit_asm_arg(stmt, stmt.params[k])); if (args.size () != f->formal_args.size()) throw SEMANTIC_ERROR(_F("bpf embeddedcode call to function '%s' " "expected %zu arguments, got %zu", func_name.c_str(), f->formal_args.size(), args.size()), stmt.tok); value *retval = emit_functioncall(f, args); if (stmt.dest != "-") { value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_mov(this_ins, dest, retval); } // ??? For diagnostics: check other cases with retval and stmt.dest. #endif } } else if (stmt.kind == "opcode") { emit_asm_opcode (stmt, label_map); } else throw SEMANTIC_ERROR (_F("BUG: bpf embeddedcode contains unexpected " "asm_stmt kind '%s'", stmt.kind.c_str()), stmt.tok); if (stmt.has_fallthrough) { jumped_already = true; set_block(label_map[stmt.fallthrough]); } else jumped_already = false; } // housekeeping -- deallocate adjusted_toks along with statements for (std::vector::iterator it = adjusted_toks.begin(); it != adjusted_toks.end(); it++) delete *it; adjusted_toks.clear(); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); // asm #endif } void bpf_unparser::visit_null_statement (null_statement *) { } void bpf_unparser::visit_expr_statement (expr_statement *s) { (void) emit_expr (s->value); } void bpf_unparser::visit_if_statement (if_statement* s) { block *then_block = this_prog.new_block (); block *join_block = this_prog.new_block (); if (s->elseblock) { block *else_block = this_prog.new_block (); emit_cond (s->condition, then_block, else_block); set_block (then_block); emit_stmt (s->thenblock); if (in_block ()) emit_jmp (join_block); set_block (else_block); emit_stmt (s->elseblock); if (in_block ()) emit_jmp (join_block); } else { emit_cond (s->condition, then_block, join_block); set_block (then_block); emit_stmt (s->thenblock); if (in_block ()) emit_jmp (join_block); } set_block (join_block); } void bpf_unparser::visit_for_loop (for_loop* s) { // PR24528: Userspace-only feature. if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported loop in bpf kernel probe"), s->tok); // TODO: Future versions of BPF will include limited looping capability. block *body_block = this_prog.new_block (); block *iter_block = this_prog.new_block (); block *test_block = this_prog.new_block (); block *join_block = this_prog.new_block (); emit_stmt (s->init); if (!in_block ()) return; emit_jmp (test_block); loop_break.push_back (join_block); loop_cont.push_back (iter_block); set_block (body_block); emit_stmt (s->block); if (in_block ()) emit_jmp (iter_block); loop_cont.pop_back (); loop_break.pop_back (); set_block (iter_block); emit_stmt (s->incr); if (in_block ()) emit_jmp (test_block); set_block (test_block); emit_cond (s->cond, body_block, join_block); set_block (join_block); } void bpf_unparser::visit_foreach_loop(foreach_loop* s) { // PR24528: Userspace-only feature. if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported loop in bpf kernel probe"), s->tok); // TODO: Future versions of BPF will include limited looping capability. if (s->indexes.size() != 1) throw SEMANTIC_ERROR(_("unhandled multi-dimensional array"), s->tok); vardecl *keydecl = s->indexes[0]->referent; auto i = this_locals->find(keydecl); if (i == this_locals->end()) throw SEMANTIC_ERROR(_("unknown index"), keydecl->tok); symbol *a; if (! (a = dynamic_cast(s->base))) throw SEMANTIC_ERROR(_("unknown type"), s->base->tok); vardecl *arraydecl = a->referent; // PR23875: foreach should handle string keys auto type = arraydecl->index_types[0]; if (type != pe_long && type != pe_string) throw SEMANTIC_ERROR(_("unhandled foreach index type"), s->tok); int keysize = 8; // XXX: If a string key, foreach will handle a pointer to it. auto g = glob.globals.find(arraydecl); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array"), arraydecl->tok); int map_id = g->second.map_id; // PR23476: Handle foreach iteration for stats arrays. assert (!g->second.is_scalar()); if (g->second.is_stat()) { auto all_fields = glob.array_stats.find(arraydecl); if (all_fields == glob.array_stats.end()) throw SEMANTIC_ERROR(_("unknown stats array"), arraydecl->tok); auto one_field = all_fields->second.find(globals::stat_iter_field); assert (one_field != all_fields->second.end()); map_id = one_field->second; // XXX: Since foreach only handles/returns keys, it's sufficient // to simply iterate one of the stat field maps. // If sorting on aggregate is required (s->sort_aggr), // map_get_next_key will need to perform aggregation // calculations that might require access to more than one map. // // TODO PR24528: need to pass sort_aggr to the interpreter. // TODO PR24528: use existing foreach_sort_stat.exp testcase to check this. if (s->sort_column == 0) throw SEMANTIC_ERROR(_("unsupported sorted iteration on stat aggregate"), arraydecl->tok); } value *limit = this_prog.new_reg(); value *key = i->second; value *i0 = this_prog.new_imm(0); value *key_ofs = this_prog.new_imm(-keysize); value *newkey_ofs = this_prog.new_imm(-keysize-keysize); value *frame = this_prog.lookup_reg(BPF_REG_10); block *body_block = this_prog.new_block (); block *load_block_1 = this_prog.new_block (); block *iter_block = this_prog.new_block (); block *join_block = this_prog.new_block (); // Track iteration limit. if (s->limit) this_prog.mk_mov(this_ins, limit, emit_expr(s->limit)); else // XXX may want 'limit = this_prog.new_imm(-1);' this_prog.mk_mov(this_ins, limit, this_prog.new_imm(-1)); // XXX: s->sort_column may be uninitialized if s->sort_direction == 0 unsigned sort_column = s->sort_column; //unsigned sort_column = s->sort_direction == 0 ? 0 : s->sort_column; // Get the first key. this_prog.load_map (this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), i0); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), frame, newkey_ofs); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(SORT_FLAGS(sort_column,s->sort_direction))); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_5), limit); this_prog.mk_call (this_ins, BPF_FUNC_map_get_next_key, 5); this_prog.mk_jcond (this_ins, NE, this_prog.lookup_reg(BPF_REG_0), i0, join_block, load_block_1); this_prog.use_tmp_space(2*keysize); emit_jmp(load_block_1); // Do loop body loop_break.push_back (join_block); loop_cont.push_back (iter_block); set_block(body_block); emit_stmt(s->block); if (in_block ()) emit_jmp(iter_block); loop_cont.pop_back (); loop_break.pop_back (); // Call map_get_next_key, exit loop if it doesn't return 0 set_block(iter_block); this_prog.load_map (this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_st (this_ins, BPF_DW, frame, -keysize, key); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, key_ofs); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), frame, newkey_ofs); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(SORT_FLAGS(sort_column,s->sort_direction))); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_5), limit); this_prog.mk_call (this_ins, BPF_FUNC_map_get_next_key, 5); this_prog.mk_jcond (this_ins, NE, this_prog.lookup_reg(BPF_REG_0), i0, join_block, load_block_1); // Load next key, decrement limit if applicable set_block(load_block_1); // Return the key. If it's a string, it's already a string address. this_prog.mk_ld (this_ins, BPF_DW, key, frame, -keysize-keysize); // If the foreach loop iterates over the value, then fetch it too. if (s->value) { vardecl *valdecl = s->value->referent; auto j = this_locals->find(valdecl); if (j == this_locals->end()) throw SEMANTIC_ERROR(_("unknown value"), valdecl->tok); value *val = j->second; block *load_block_2 = this_prog.new_block (); // To lookup value, we need to pass a pointer to the key. If the key is an // integer, we need to pass the location in the stack. this_prog.load_map (this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); switch (keydecl->type) { case pe_long: this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, newkey_ofs); break; case pe_string: this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), key); break; default: throw SEMANTIC_ERROR (_("unhandled foreach key type"), keydecl->tok); } this_prog.mk_call (this_ins, BPF_FUNC_map_lookup_elem, 2); this_prog.mk_jcond (this_ins, EQ, this_prog.lookup_reg(BPF_REG_0), i0, join_block, load_block_2); // Load the corresponding value if key is valid. set_block(load_block_2); // If the value is an integer, we must deference the pointer. switch (valdecl->type) { case pe_long: this_prog.mk_ld(this_ins, BPF_DW, val, this_prog.lookup_reg(BPF_REG_0), 0); break; case pe_string: this_prog.mk_mov(this_ins, val, this_prog.lookup_reg(BPF_REG_0)); break; default: throw SEMANTIC_ERROR (_("unhandled foreach value type"), valdecl->tok); } } if (s->limit) this_prog.mk_binary (this_ins, BPF_ADD, limit, limit, this_prog.new_imm(-1)); emit_jmp(body_block); set_block(join_block); } void bpf_unparser::visit_break_statement (break_statement* s) { if (loop_break.empty ()) throw SEMANTIC_ERROR (_("cannot 'break' outside loop"), s->tok); emit_jmp (loop_break.back ()); } void bpf_unparser:: visit_continue_statement (continue_statement* s) { if (loop_cont.empty ()) throw SEMANTIC_ERROR (_("cannot 'continue' outside loop"), s->tok); emit_jmp (loop_cont.back ()); } void bpf_unparser::visit_return_statement (return_statement* s) { if (func_return.empty ()) throw SEMANTIC_ERROR (_("cannot 'return' outside function"), s->tok); assert (!func_return_val.empty ()); if (s->value) emit_mov (func_return_val.back (), emit_expr (s->value)); emit_jmp (func_return.back ()); } void bpf_unparser::visit_next_statement (next_statement* s) { if (!func_return.empty ()) throw SEMANTIC_ERROR(_("bpf unhandled next statement in function"), s->tok); emit_jmp(exit_block); } void bpf_unparser::visit_delete_statement (delete_statement *s) { expression *e = s->value; if (symbol *s = dynamic_cast(e)) { vardecl *var = s->referent; if (var->arity != 0) throw SEMANTIC_ERROR (_("unimplemented delete of array"), s->tok); auto g = glob.globals.find (var); if (g != glob.globals.end()) { value *frame = this_prog.lookup_reg(BPF_REG_10); int key_ofs, val_ofs; switch (var->type) { case pe_long: val_ofs = -8; this_prog.mk_st(this_ins, BPF_DW, frame, val_ofs, this_prog.new_imm(0)); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), frame, this_prog.new_imm(val_ofs)); break; // ??? pe_string -> (2) TODO delete ref (but leave the storage for later cleanup of the entire containing struct?) // ??? pe_stats -> TODOXXX default: goto err; } key_ofs = val_ofs - 4; this_prog.mk_st(this_ins, BPF_W, frame, key_ofs, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(-key_ofs); // TODO: Handle map_id < 0 for pe_stats, or assert otherwise. if (g->second.map_id < 0) throw SEMANTIC_ERROR (_("unsupported delete operation on statistics aggregate"), s->tok); // TODOXXX PR23476 this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(key_ofs)); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); return; } auto i = this_locals->find (var); if (i != this_locals->end ()) { emit_mov (i->second, this_prog.new_imm(0)); return; } } else if (arrayindex *a = dynamic_cast(e)) { if (symbol *a_sym = dynamic_cast(a->base)) { vardecl *v = a_sym->referent; int key_ofs = 0; auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); unsigned element = v->arity; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); // TODO: Handle map_id < 0 for pe_stats or assert otherwise. if (g->second.map_id < 0) throw SEMANTIC_ERROR (_("unsupported delete operation on statistics aggregate"), a->tok); // TODOXXX PR23476 this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_call(this_ins, BPF_FUNC_map_delete_elem, 2); return; } } err: throw SEMANTIC_ERROR (_("unknown lvalue"), e->tok); } // Translate string escape characters. // Accepts strings produced by parse.cxx lexer::scan and // by the eBPF embedded-code assembler. // // PR23559: This is currently an eBPF-only version of the function // that does not translate octal escapes. std::string translate_escapes (const interned_string &str, const token* tok) { std::string result; bool saw_esc = false; for (interned_string::const_iterator j = str.begin(); j != str.end(); ++j) { if (saw_esc) { saw_esc = false; switch (*j) { case 'f': result += '\f'; break; case 'n': result += '\n'; break; case 'r': result += '\r'; break; case 't': result += '\t'; break; case 'v': result += '\v'; break; // Translate octal and hex escapes: case '0' ... '7': { unsigned int c = 0; // An octal escape sequence is at most 3 characters. for (unsigned k = 0; k < 3; ++k) { c = c * 8 + (*j - '0'); ++j; if (j == str.end() || *j < '0' || *j > '7') { --j; // avoid swallowing extra char break; } } // TODO: this check should be performed by the parser if (c > 255 /* \377 */) throw SEMANTIC_ERROR (_("octal escape sequence out of range"), tok); if (c != 0) // XXX skip '\0' as it can break a transport tag result += (char) c; } break; case 'x': { unsigned int c = 0; ++j; // A hex escape sequence is arbitrarily long. // XXX: Behaviour is 'undefined' when overflowing char. for (; j != str.end(); ++j) { if (*j >= '0' && *j <= '9') c = c * 16 + (*j - '0'); else if (*j >= 'a' && *j <= 'f') c = c * 16 + (*j - 'a' + 10); else if (*j >= 'A' && *j <= 'F') c = c * 16 + (*j - 'A' + 10); else { --j; // avoid swallowing extra char break; } } // TODO: this check should be performed by the parser if (c > 0xff) throw SEMANTIC_ERROR (_("hex escape sequence out of range"), tok); if (c != 0) // XXX skip '\0' as it can break a transport tag result += (char) c; // If we've hit the end of the string , then return the result. if (j == str.end()) return result; } break; default: result += *j; break; } } else if (*j == '\\') saw_esc = true; else result += *j; } return result; } value * bpf_unparser::emit_literal_string (const std::string &str, const token *tok) { size_t str_bytes = str.size() + 1; if (str_bytes > BPF_MAXSTRINGLEN) throw SEMANTIC_ERROR(_("string literal too long"), tok); return this_prog.new_str(str); // will be lowered to a pointer by bpf-opt.cxx } void bpf_unparser::visit_literal_string (literal_string* e) { interned_string v = e->value; std::string str = translate_escapes(v, e->tok); result = emit_literal_string(str, e->tok); } void bpf_unparser::visit_literal_number (literal_number* e) { result = this_prog.new_imm(e->value); } void bpf_unparser::visit_binary_expression (binary_expression* e) { int code; if (e->op == "+") code = BPF_ADD; else if (e->op == "-") code = BPF_SUB; else if (e->op == "*") code = BPF_MUL; else if (e->op == "&") code = BPF_AND; else if (e->op == "|") code = BPF_OR; else if (e->op == "^") code = BPF_XOR; else if (e->op == "<<") code = BPF_LSH; else if (e->op == ">>") code = BPF_ARSH; else if (e->op == ">>>") code = BPF_RSH; else if (e->op == "/") code = BPF_DIV; else if (e->op == "%") code = BPF_MOD; else throw SEMANTIC_ERROR (_("unhandled binary operator"), e->tok); value *s0 = this_prog.new_reg(); // copy e->left into a seperate reg in case evaluating e->right // causes e->left to mutate (ex. x + x++). this_prog.mk_mov(this_ins, s0, emit_expr (e->left)); value *s1 = emit_expr (e->right); value *d = this_prog.new_reg (); this_prog.mk_binary (this_ins, code, d, s0, s1); result = d; } void bpf_unparser::visit_unary_expression (unary_expression* e) { if (e->op == "-") { // Note that negative literals appear in the script langauge as // unary negations over positive literals. if (literal_number *lit = dynamic_cast(e)) result = this_prog.new_imm(-(uint64_t)lit->value); else { value *s = emit_expr (e->operand); value *d = this_prog.new_reg(); this_prog.mk_unary (this_ins, BPF_NEG, d, s); result = d; } } else if (e->op == "~") { value *s1 = this_prog.new_imm(-1); value *s0 = emit_expr (e->operand); value *d = this_prog.new_reg (); this_prog.mk_binary (this_ins, BPF_XOR, d, s0, s1); result = d; } else if (e->op == "!") result = emit_bool (e); else if (e->op == "+") result = emit_expr (e->operand); else throw SEMANTIC_ERROR (_("unhandled unary operator"), e->tok); } void bpf_unparser::visit_pre_crement (pre_crement* e) { int dir; if (e->op == "++") dir = 1; else if (e->op == "--") dir = -1; else throw SEMANTIC_ERROR (_("unhandled crement operator"), e->tok); value *c = this_prog.new_imm(dir); value *v = emit_expr (e->operand); this_prog.mk_binary (this_ins, BPF_ADD, v, v, c); emit_store (e->operand, v); result = v; } void bpf_unparser::visit_post_crement (post_crement* e) { int dir; if (e->op == "++") dir = 1; else if (e->op == "--") dir = -1; else throw SEMANTIC_ERROR (_("unhandled crement operator"), e->tok); value *c = this_prog.new_imm(dir); value *r = this_prog.new_reg (); value *v = emit_expr (e->operand); emit_mov (r, v); this_prog.mk_binary (this_ins, BPF_ADD, v, v, c); emit_store (e->operand, v); result = r; } void bpf_unparser::visit_logical_or_expr (logical_or_expr* e) { result = emit_bool (e); } void bpf_unparser::visit_logical_and_expr (logical_and_expr* e) { result = emit_bool (e); } // ??? This matches the code in translate.cxx, but it looks like the // functionality has been disabled in the SystemTap parser. void bpf_unparser::visit_compound_expression (compound_expression* e) { e->left->visit(this); e->right->visit(this); // overwrite result of first expression } void bpf_unparser::visit_comparison (comparison* e) { result = emit_bool (e); } void bpf_unparser::visit_concatenation (concatenation* e) { if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported in bpf kernel probe"), e->tok); // We make use of many temporary registers because intermediate strings // can arise from function calls which may clobber registers that hold data. value *l = emit_expr (e->left); value* placeholder_l = this_prog.new_reg(); this_prog.mk_mov(this_ins, placeholder_l, l); value *r = emit_expr (e->right); value* placeholder_r = this_prog.new_reg(); this_prog.mk_mov(this_ins, placeholder_r, r); this_prog.mk_mov(this_ins, this_prog.lookup_reg(BPF_REG_1), placeholder_l); this_prog.mk_mov(this_ins, this_prog.lookup_reg(BPF_REG_2), placeholder_r); // Call function to concatenate. this_prog.mk_call(this_ins, BPF_FUNC_str_concat, 2); value* str = this_prog.new_reg(); this_prog.mk_mov(this_ins, str, this_prog.lookup_reg(BPF_REG_0)); result = str; } void bpf_unparser::visit_ternary_expression (ternary_expression* e) { block *join_block = this_prog.new_block (); value *r = this_prog.new_reg (); if (!has_side_effects (e->truevalue)) { block *else_block = this_prog.new_block (); emit_mov (r, emit_expr (e->truevalue)); emit_cond (e->cond, join_block, else_block); set_block (else_block); emit_mov (r, emit_expr (e->falsevalue)); emit_jmp (join_block); } else if (!has_side_effects (e->falsevalue)) { block *then_block = this_prog.new_block (); emit_mov (r, emit_expr (e->falsevalue)); emit_cond (e->cond, join_block, then_block); set_block (then_block); emit_mov (r, emit_expr (e->truevalue)); emit_jmp (join_block); } else { block *then_block = this_prog.new_block (); block *else_block = this_prog.new_block (); emit_cond (e->cond, then_block, else_block); set_block (then_block); emit_mov (r, emit_expr (e->truevalue)); emit_jmp (join_block); set_block (else_block); emit_mov (r, emit_expr (e->falsevalue)); emit_jmp (join_block); } set_block (join_block); result = r; } void bpf_unparser::visit_assignment (assignment* e) { value *r = emit_expr (e->right); if (e->op == "<<<") ; // XXX: handled by emit_store(), which checks for statistics lvalue else if (e->op != "=") { int code; if (e->op == "+=") code = BPF_ADD; else if (e->op == "-=") code = BPF_SUB; else if (e->op == "*=") code = BPF_MUL; else if (e->op == "/=") code = BPF_DIV; else if (e->op == "%=") code = BPF_MOD; else if (e->op == "<<=") code = BPF_LSH; else if (e->op == ">>=") code = BPF_ARSH; else if (e->op == "&=") code = BPF_AND; else if (e->op == "^=") code = BPF_XOR; else if (e->op == "|=") code = BPF_OR; else throw SEMANTIC_ERROR (_("unhandled assignment operator"), e->tok); value *l = emit_expr (e->left); this_prog.mk_binary (this_ins, code, l, l, r); r = l; } emit_store (e->left, r); result = r; } value * bpf_unparser::emit_context_var(bpf_context_vardecl *v) { // similar to visit_target_deref but the size/offset info // is given in v->size/v->offset instead of an expression. value *d = this_prog.new_reg(); if (v->size > 8) { // Compute a pointer but do not dereference. Needed // for array context variables. this_prog.mk_binary (this_ins, BPF_ADD, d, this_in_arg0, this_prog.new_imm(v->offset)); return d; } value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), this_in_arg0, this_prog.new_imm(v->offset)); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm(v->size)); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_1), frame, this_prog.new_imm(-v->size)); this_prog.use_tmp_space (v->size); this_prog.mk_call (this_ins, BPF_FUNC_probe_read, 3); int opc; switch (v->size) { case 1: opc = BPF_B; break; case 2: opc = BPF_H; break; case 4: opc = BPF_W; break; case 8: opc = BPF_DW; break; default: assert(0); } this_prog.mk_ld (this_ins, opc, d, frame, -v->size); if (v->is_signed && v->size < 8) { value *sh = this_prog.new_imm ((8 - v->size) * 8); this_prog.mk_binary (this_ins, BPF_LSH, d, d, sh); this_prog.mk_binary (this_ins, BPF_ARSH, d, d, sh); } return d; } void bpf_unparser::visit_symbol(symbol *s) { vardecl *v = s->referent; assert (v->arity < 1); if (bpf_context_vardecl *c = dynamic_cast(v)) { result = emit_context_var(c); return; } auto g = glob.globals.find (v); if (g != glob.globals.end()) { if (g->second.is_stat()) throw SEMANTIC_ERROR (_("unhandled statistics variable"), s->tok); // TODOXXX PR23476 value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_st(this_ins, BPF_W, frame, -4, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(4); this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(-4)); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); block *cont_block = this_prog.new_block(); block *exit_block = get_exit_block(); // Note that the kernel bpf verifier requires that we check that // the pointer is non-null. this_prog.mk_jcond(this_ins, EQ, r0, i0, exit_block, cont_block); set_block(cont_block); result = this_prog.new_reg(); switch (v->type) { case pe_long: this_prog.mk_ld(this_ins, BPF_DW, result, r0, 0); break; case pe_string: // Just return the address of the string within the map: emit_mov(result, r0); break; default: throw SEMANTIC_ERROR (_("unhandled global variable type"), s->tok); } return; } // ??? Maybe use result = this_locals.at (v); // to throw std::out_of_range on lookup failure. auto l = this_locals->find (v); if (l != this_locals->end()) { result = (*l).second; return; } throw SEMANTIC_ERROR (_("unknown variable"), s->tok); } void bpf_unparser::visit_arrayindex(arrayindex *e) { if (symbol *sym = dynamic_cast(e->base)) { vardecl *v = sym->referent; auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); if (g->second.is_stat()) throw SEMANTIC_ERROR (_("unhandled statistics variable"), v->tok); // TODOXXX PR23476 unsigned element = v->arity; int key_ofs = 0; // iterate over the elements do { --element; value *idx = emit_expr(e->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); block *t_block = this_prog.new_block(); block *f_block = this_prog.new_block(); block *join_block = this_prog.new_block(); result = this_prog.new_reg(); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); this_prog.mk_jcond(this_ins, EQ, r0, i0, t_block, f_block); // Key is not in the array. Evaluate to 0. set_block(t_block); emit_mov(result, i0); emit_jmp(join_block); // Key is in the array. Get value from stack. set_block(f_block); if (v->type == pe_long) this_prog.mk_ld(this_ins, BPF_DW, result, r0, 0); else emit_mov(result, r0); emit_jmp(join_block); set_block(join_block); } else throw SEMANTIC_ERROR(_("unhandled arrayindex expression"), e->tok); } void bpf_unparser::visit_array_in(array_in* e) { arrayindex *a = e->operand; if (symbol *s = dynamic_cast(a->base)) { vardecl *v = s->referent; auto g = glob.globals.find (v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown variable"), v->tok); unsigned element = v->arity; int key_ofs = 0; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch(v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); // TODO: Handle map_id < 0 for pe_stats or assert otherwise. if (g->second.map_id < 0) throw SEMANTIC_ERROR (_("unsupported array-in operation on statistics aggregate"), s->tok); // TODOXXX PR23476 this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); value *i1 = this_prog.new_imm(1); value *d = this_prog.new_reg(); block *b0 = this_prog.new_block(); block *b1 = this_prog.new_block(); block *cont_block = this_prog.new_block(); this_prog.mk_jcond(this_ins, EQ, r0, i0, b0, b1); // d = 0 set_block(b0); this_prog.mk_mov(this_ins, d, i0); b0->fallthru = new edge(b0, cont_block); // d = 1 set_block(b1); this_prog.mk_mov(this_ins, d, i1); b1->fallthru = new edge(b1, cont_block); set_block(cont_block); result = d; return; } /// ??? hist_op throw SEMANTIC_ERROR(_("unhandled operand type"), a->base->tok); } void bpf_unparser::visit_target_deref (target_deref* e) { // ??? For some hosts, including x86_64, it works to read userspace // and kernelspace with the same function. For others, like s390x, // this only works to read kernelspace. value *src = emit_expr (e->addr); value *frame = this_prog.lookup_reg (BPF_REG_10); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_3), src); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm (e->size)); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_1), frame, this_prog.new_imm (-(int64_t)e->size)); this_prog.use_tmp_space(e->size); this_prog.mk_call(this_ins, BPF_FUNC_probe_read, 3); value *d = this_prog.new_reg (); int opc; switch (e->size) { case 1: opc = BPF_B; break; case 2: opc = BPF_H; break; case 4: opc = BPF_W; break; case 8: opc = BPF_DW; break; default: throw SEMANTIC_ERROR(_("unhandled deref size"), e->tok); } this_prog.mk_ld (this_ins, opc, d, frame, -e->size); if (e->signed_p && e->size < 8) { value *sh = this_prog.new_imm ((8 - e->size) * 8); this_prog.mk_binary (this_ins, BPF_LSH, d, d, sh); this_prog.mk_binary (this_ins, BPF_ARSH, d, d, sh); } result = d; } void bpf_unparser::visit_target_register (target_register* e) { // ??? Should not hard-code register size. int size = sizeof(void *); // ??? Should not hard-code register offsets in pr_regs. int ofs = 0; switch (e->regno) { #if defined(__i386__) case 0: ofs = offsetof(pt_regs, eax); break; case 1: ofs = offsetof(pt_regs, ecx); break; case 2: ofs = offsetof(pt_regs, edx); break; case 3: ofs = offsetof(pt_regs, ebx); break; case 4: ofs = offsetof(pt_regs, esp); break; case 5: ofs = offsetof(pt_regs, ebp); break; case 6: ofs = offsetof(pt_regs, esi); break; case 7: ofs = offsetof(pt_regs, edi); break; case 8: ofs = offsetof(pt_regs, eip); break; #elif defined(__x86_64__) case 0: ofs = offsetof(pt_regs, rax); break; case 1: ofs = offsetof(pt_regs, rdx); break; case 2: ofs = offsetof(pt_regs, rcx); break; case 3: ofs = offsetof(pt_regs, rbx); break; case 4: ofs = offsetof(pt_regs, rsi); break; case 5: ofs = offsetof(pt_regs, rdi); break; case 6: ofs = offsetof(pt_regs, rbp); break; case 7: ofs = offsetof(pt_regs, rsp); break; case 8: ofs = offsetof(pt_regs, r8); break; case 9: ofs = offsetof(pt_regs, r9); break; case 10: ofs = offsetof(pt_regs, r10); break; case 11: ofs = offsetof(pt_regs, r11); break; case 12: ofs = offsetof(pt_regs, r12); break; case 13: ofs = offsetof(pt_regs, r13); break; case 14: ofs = offsetof(pt_regs, r14); break; case 15: ofs = offsetof(pt_regs, r15); break; case 16: ofs = offsetof(pt_regs, rip); break; #elif defined(__arm__) case 0: ofs = offsetof(pt_regs, uregs[0]); break; case 1: ofs = offsetof(pt_regs, uregs[1]); break; case 2: ofs = offsetof(pt_regs, uregs[2]); break; case 3: ofs = offsetof(pt_regs, uregs[3]); break; case 4: ofs = offsetof(pt_regs, uregs[4]); break; case 5: ofs = offsetof(pt_regs, uregs[5]); break; case 6: ofs = offsetof(pt_regs, uregs[6]); break; case 7: ofs = offsetof(pt_regs, uregs[7]); break; case 8: ofs = offsetof(pt_regs, uregs[8]); break; case 9: ofs = offsetof(pt_regs, uregs[9]); break; case 10: ofs = offsetof(pt_regs, uregs[10]); break; case 11: ofs = offsetof(pt_regs, uregs[11]); break; case 12: ofs = offsetof(pt_regs, uregs[12]); break; case 13: ofs = offsetof(pt_regs, uregs[13]); break; case 14: ofs = offsetof(pt_regs, uregs[14]); break; case 15: ofs = offsetof(pt_regs, uregs[15]); break; #elif defined(__aarch64__) case 0: ofs = offsetof(user_pt_regs, regs[0]); break; case 1: ofs = offsetof(user_pt_regs, regs[1]); break; case 2: ofs = offsetof(user_pt_regs, regs[2]); break; case 3: ofs = offsetof(user_pt_regs, regs[3]); break; case 4: ofs = offsetof(user_pt_regs, regs[4]); break; case 5: ofs = offsetof(user_pt_regs, regs[5]); break; case 6: ofs = offsetof(user_pt_regs, regs[6]); break; case 7: ofs = offsetof(user_pt_regs, regs[7]); break; case 8: ofs = offsetof(user_pt_regs, regs[8]); break; case 9: ofs = offsetof(user_pt_regs, regs[9]); break; case 10: ofs = offsetof(user_pt_regs, regs[10]); break; case 11: ofs = offsetof(user_pt_regs, regs[11]); break; case 12: ofs = offsetof(user_pt_regs, regs[12]); break; case 13: ofs = offsetof(user_pt_regs, regs[13]); break; case 14: ofs = offsetof(user_pt_regs, regs[14]); break; case 15: ofs = offsetof(user_pt_regs, regs[15]); break; case 16: ofs = offsetof(user_pt_regs, regs[16]); break; case 17: ofs = offsetof(user_pt_regs, regs[17]); break; case 18: ofs = offsetof(user_pt_regs, regs[18]); break; case 19: ofs = offsetof(user_pt_regs, regs[19]); break; case 20: ofs = offsetof(user_pt_regs, regs[20]); break; case 21: ofs = offsetof(user_pt_regs, regs[21]); break; case 22: ofs = offsetof(user_pt_regs, regs[22]); break; case 23: ofs = offsetof(user_pt_regs, regs[23]); break; case 24: ofs = offsetof(user_pt_regs, regs[24]); break; case 25: ofs = offsetof(user_pt_regs, regs[25]); break; case 26: ofs = offsetof(user_pt_regs, regs[26]); break; case 27: ofs = offsetof(user_pt_regs, regs[27]); break; case 28: ofs = offsetof(user_pt_regs, regs[28]); break; case 29: ofs = offsetof(user_pt_regs, regs[29]); break; case 30: ofs = offsetof(user_pt_regs, regs[30]); break; case 31: ofs = offsetof(user_pt_regs, sp); break; #elif defined(__powerpc__) case 0: ofs = offsetof(pt_regs, gpr[0]); break; case 1: ofs = offsetof(pt_regs, gpr[1]); break; case 2: ofs = offsetof(pt_regs, gpr[2]); break; case 3: ofs = offsetof(pt_regs, gpr[3]); break; case 4: ofs = offsetof(pt_regs, gpr[4]); break; case 5: ofs = offsetof(pt_regs, gpr[5]); break; case 6: ofs = offsetof(pt_regs, gpr[6]); break; case 7: ofs = offsetof(pt_regs, gpr[7]); break; case 8: ofs = offsetof(pt_regs, gpr[8]); break; case 9: ofs = offsetof(pt_regs, gpr[9]); break; case 10: ofs = offsetof(pt_regs, gpr[10]); break; case 11: ofs = offsetof(pt_regs, gpr[11]); break; case 12: ofs = offsetof(pt_regs, gpr[12]); break; case 13: ofs = offsetof(pt_regs, gpr[13]); break; case 14: ofs = offsetof(pt_regs, gpr[14]); break; case 15: ofs = offsetof(pt_regs, gpr[15]); break; case 16: ofs = offsetof(pt_regs, gpr[16]); break; case 17: ofs = offsetof(pt_regs, gpr[17]); break; case 18: ofs = offsetof(pt_regs, gpr[18]); break; case 19: ofs = offsetof(pt_regs, gpr[19]); break; case 20: ofs = offsetof(pt_regs, gpr[20]); break; case 21: ofs = offsetof(pt_regs, gpr[21]); break; case 22: ofs = offsetof(pt_regs, gpr[22]); break; case 23: ofs = offsetof(pt_regs, gpr[23]); break; case 24: ofs = offsetof(pt_regs, gpr[24]); break; case 25: ofs = offsetof(pt_regs, gpr[25]); break; case 26: ofs = offsetof(pt_regs, gpr[26]); break; case 27: ofs = offsetof(pt_regs, gpr[27]); break; case 28: ofs = offsetof(pt_regs, gpr[28]); break; case 29: ofs = offsetof(pt_regs, gpr[29]); break; case 30: ofs = offsetof(pt_regs, gpr[30]); break; case 31: ofs = offsetof(pt_regs, gpr[31]); break; case 64: ofs = offsetof(pt_regs, ccr); break; case 66: ofs = offsetof(pt_regs, msr); break; case 101: ofs = offsetof(pt_regs, xer); break; case 108: ofs = offsetof(pt_regs, link); break; case 109: ofs = offsetof(pt_regs, ctr); break; case 118: ofs = offsetof(pt_regs, dsisr); break; case 119: ofs = offsetof(pt_regs, dar); break; # if !defined(__powerpc64__) case 100: ofs = offsetof(pt_regs, mq); break; # endif // ??? NIP is not assigned to a dwarf register number at all. #elif defined(__s390__) case 0: ofs = offsetof(user_regs_struct, gprs[0]); break; case 1: ofs = offsetof(user_regs_struct, gprs[1]); break; case 2: ofs = offsetof(user_regs_struct, gprs[2]); break; case 3: ofs = offsetof(user_regs_struct, gprs[3]); break; case 4: ofs = offsetof(user_regs_struct, gprs[4]); break; case 5: ofs = offsetof(user_regs_struct, gprs[5]); break; case 6: ofs = offsetof(user_regs_struct, gprs[6]); break; case 7: ofs = offsetof(user_regs_struct, gprs[7]); break; case 8: ofs = offsetof(user_regs_struct, gprs[8]); break; case 9: ofs = offsetof(user_regs_struct, gprs[9]); break; case 10: ofs = offsetof(user_regs_struct, gprs[10]); break; case 11: ofs = offsetof(user_regs_struct, gprs[11]); break; case 12: ofs = offsetof(user_regs_struct, gprs[12]); break; case 13: ofs = offsetof(user_regs_struct, gprs[13]); break; case 14: ofs = offsetof(user_regs_struct, gprs[14]); break; case 15: ofs = offsetof(user_regs_struct, gprs[15]); break; // Note that the FPRs are not numbered sequentially case 16: ofs = offsetof(user_regs_struct, fp_regs.fprs[0]); break; case 17: ofs = offsetof(user_regs_struct, fp_regs.fprs[2]); break; case 18: ofs = offsetof(user_regs_struct, fp_regs.fprs[4]); break; case 19: ofs = offsetof(user_regs_struct, fp_regs.fprs[6]); break; case 20: ofs = offsetof(user_regs_struct, fp_regs.fprs[1]); break; case 21: ofs = offsetof(user_regs_struct, fp_regs.fprs[3]); break; case 22: ofs = offsetof(user_regs_struct, fp_regs.fprs[5]); break; case 23: ofs = offsetof(user_regs_struct, fp_regs.fprs[7]); break; case 24: ofs = offsetof(user_regs_struct, fp_regs.fprs[8]); break; case 25: ofs = offsetof(user_regs_struct, fp_regs.fprs[10]); break; case 26: ofs = offsetof(user_regs_struct, fp_regs.fprs[12]); break; case 27: ofs = offsetof(user_regs_struct, fp_regs.fprs[14]); break; case 28: ofs = offsetof(user_regs_struct, fp_regs.fprs[9]); break; case 29: ofs = offsetof(user_regs_struct, fp_regs.fprs[11]); break; case 30: ofs = offsetof(user_regs_struct, fp_regs.fprs[13]); break; case 31: ofs = offsetof(user_regs_struct, fp_regs.fprs[15]); break; // ??? Omitting CTRs (not in user_regs_struct) // ??? Omitting ACRs (lazy, and unlikely to appear in unwind) case 64: ofs = offsetof(user_regs_struct, psw.mask); break; case 65: ofs = offsetof(user_regs_struct, psw.addr); break; #endif default: throw SEMANTIC_ERROR(_("unhandled register number"), e->tok); } value *frame = this_prog.lookup_reg (BPF_REG_10); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), this_in_arg0, this_prog.new_imm (ofs)); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm (size)); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_1), frame, this_prog.new_imm (-size)); this_prog.use_tmp_space(size); this_prog.mk_call(this_ins, BPF_FUNC_probe_read, 3); value *d = this_prog.new_reg (); int opc; switch (size) { case 4: opc = BPF_W; break; case 8: opc = BPF_DW; break; default: throw SEMANTIC_ERROR(_("unhandled register size"), e->tok); } this_prog.mk_ld (this_ins, opc, d, frame, -size); result = d; } // Emit unrolled-loop code to write string literal from src to // dest[+ofs] in 4-byte chunks, with optional zero-padding up to // BPF_MAXSTRINGLEN. // // ??? Could use 8-byte chunks if we're starved for instruction count. // ??? Endianness of the target comes into play here. value * emit_simple_literal_str(program &this_prog, insn_inserter &this_ins, value *dest, int ofs, const std::string &src, bool zero_pad) { #ifdef DEBUG_CODEGEN this_ins.notes.push("str"); #endif size_t str_bytes = src.size() + 1; size_t str_words = (str_bytes + 3) / 4; for (unsigned i = 0; i < str_words; ++i) { uint32_t word = 0; for (unsigned j = 0; j < 4; ++j) if (i * 4 + j < str_bytes - 1) { // ??? assuming little-endian target // // Must cast each signed char in src to unsigned char first // in order to avoid the implicit sign extension resulting // from the uint32_t cast. word |= ((uint32_t)(unsigned char)src[i * 4 + j]) << (j * 8); } this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, this_prog.new_imm(word)); } // XXX: bpf_map_update_elem and bpf_map_lookup_elem will always copy // exactly BPF_MAXSTRINGLEN bytes, which can cause problems with // garbage data beyond the end of the string, particularly for map // keys. The silliest way to solve this is by padding every string // constant to BPF_MAXSTRINGLEN bytes, but the stack isn't really // big enough for this to work with practical programs. // // So instead we have this optional code to pad the string, and // enable the option only when copying a string to a map key. if (zero_pad) { for (unsigned i = str_words; i < BPF_MAXSTRINGLEN / 4; i++) { this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, this_prog.new_imm(0)); } } value *out = this_prog.new_reg(); this_prog.mk_binary(this_ins, BPF_ADD, out, dest, this_prog.new_imm(ofs)); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); // str #endif return out; } // Emit unrolled-loop code to write string value from src to // dest[+ofs] in 4-byte chunks, with optional zero-padding up to // BPF_MAXSTRINGLEN. // // TODO (PR23860): This code does not work when the source and target // regions overlap. // // ??? Could use 8-byte chunks if we're starved for instruction count. // ??? Endianness of the target may come into play here. value * bpf_unparser::emit_string_copy(value *dest, int ofs, value *src, bool zero_pad) { if (src->is_str()) { /* If src is a string literal, its exact length is known and we can emit simpler, unconditional string copying code. */ std::string str = src->str(); return emit_simple_literal_str(this_prog, this_ins, dest, ofs, str, zero_pad); } #ifdef DEBUG_CODEGEN this_ins.notes.push(zero_pad ? "strcpy_zero_pad" : "strcpy"); #endif size_t str_bytes = BPF_MAXSTRINGLEN; size_t str_words = (str_bytes + 3) / 4; value *out = this_prog.new_reg(); // -- where to store the final string addr block *return_block = this_prog.new_block(); // XXX: It is sometimes possible to receive src == NULL. // trace_printk() did not care about being passed such values, but // applying strcpy() to NULL will (understandably) fail the // verifier. Therefore, we need to check for this possibility first: block *null_copy_block = this_prog.new_block(); block *normal_block = this_prog.new_block(); this_prog.mk_jcond(this_ins, EQ, src, this_prog.new_imm(0), null_copy_block, normal_block); // Only call emit_simple_literal_str() if we can't reuse the zero-pad code: if (!zero_pad) { set_block(null_copy_block); value *empty_str = emit_simple_literal_str (this_prog, this_ins, dest, ofs, "", false); emit_mov(out, empty_str); emit_jmp(return_block); } set_block(normal_block); /* block_A[i] copies src[4*i] to dest[4*i+ofs]; block_B[i] copies 0 to dest[4*i+ofs], produced only if zero_pad is true. */ std::vector block_A, block_B; block_A.push_back(this_ins.get_block()); if (zero_pad) block_B.push_back(null_copy_block); for (unsigned i = 0; i < str_words; ++i) { block *next_block; if (i < str_words - 1) { /* Create block_A[i+1], block_B[i+1]: */ block_A.push_back(this_prog.new_block()); if (zero_pad) block_B.push_back(this_prog.new_block()); next_block = block_A[i+1]; } else { next_block = return_block; } set_block(block_A[i]); value *word = this_prog.new_reg(); this_prog.mk_ld(this_ins, BPF_W, word, src, (int32_t)i * 4); this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, word); /* Finish unconditionally after copying BPF_MAXSTRINGLEN bytes: */ if (i == str_words - 1) { emit_jmp(next_block); continue; } // Determining whether a word contains a NUL byte is a neat bit-fiddling puzzle. // Kudos go to Valgrind and Memcheck for showing the way, along the lines of: // // b1 := word & 0xff; nz1 := (-b1)|b1; all_nz = nz1 // b2 := (word >> 8) & 0xff; nz2 := (-b2)|b2; all_nz = all_nz & nz2 // b3 := (word >> 16) & 0xff; nz3 := (-b3)|b3; all_nz = all_nz & nz3 // b4 := (word >> 24) & 0xff; nz4 := (-b4)|b4; all_nz = all_nz & nz4 // all_nz := nz1 & nz2 & nz3 & nz4 // // Here, nzX is 0 iff bX is NUL, all_nz is 0 iff word contains a NUL byte. value *all_nz = this_prog.new_reg(); value *bN = this_prog.new_reg(); value *nZ = this_prog.new_reg(); for (unsigned j = 0; j < 4; j++) { unsigned shift = 8*j; if (shift != 0) { this_prog.mk_binary(this_ins, BPF_RSH, bN, word, this_prog.new_imm(shift)); } else { emit_mov(bN, word); } this_prog.mk_binary(this_ins, BPF_AND, bN, bN, this_prog.new_imm(0xff)); this_prog.mk_unary(this_ins, BPF_NEG, nZ, bN); this_prog.mk_binary(this_ins, BPF_OR, nZ, nZ, bN); if (j == 0) { emit_mov(all_nz, nZ); } else { this_prog.mk_binary(this_ins, BPF_AND, all_nz, all_nz, nZ); } } this_prog.mk_jcond(this_ins, EQ, all_nz, this_prog.new_imm(0), zero_pad ? block_B[i+1] : return_block, next_block); } // XXX: Zero-padding is only used under specific circumstances; // see the corresponding comment in emit_simple_literal_str(). if (zero_pad) { for (unsigned i = 0; i < str_words; ++i) { set_block(block_B[i]); this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, this_prog.new_imm(0)); emit_jmp(i < str_words - 1 ? block_B[i+1] : return_block); } } set_block(return_block); this_prog.mk_binary(this_ins, BPF_ADD, out, dest, this_prog.new_imm(ofs)); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); // strcpy #endif return out; } // Used for passing long arguments on the stack where an address is // expected. Store val in a stack slot at offset ofs and store the // stack address of val in arg. void bpf_unparser::emit_long_arg(value *arg, int ofs, value *val) { value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_st(this_ins, BPF_DW, frame, ofs, val); this_prog.mk_binary(this_ins, BPF_ADD, arg, frame, this_prog.new_imm(ofs)); } // Used for passing string arguments on the stack where an address is // expected. Zero-pad and copy str to the stack at offset ofs and // store the stack address of str in arg. Zero-padding is required // since functions such as map_update_elem will expect a fixed-length // value of BPF_MAXSTRINGLEN for string map keys. void bpf_unparser::emit_str_arg(value *arg, int ofs, value *str) { value *frame = this_prog.lookup_reg(BPF_REG_10); value *out = emit_string_copy(frame, ofs, str, true /* zero pad */); emit_mov(arg, out); } value * bpf_unparser::emit_functioncall (functiondecl *f, const std::vector& args) { // Create a new map for the function's local variables. locals_map *locals = new_locals(f->locals); // Install locals in the map. unsigned n = args.size(); for (unsigned i = 0; i < n; ++i) { const locals_map::value_type v (f->formal_args[i], args[i]); auto ok = locals->insert (v); assert (ok.second); } locals_map *old_locals = this_locals; this_locals = locals; block *join_block = this_prog.new_block (); value *retval = this_prog.new_reg (); func_calls.push_back (f); func_return.push_back (join_block); func_return_val.push_back (retval); emit_stmt (f->body); func_return_val.pop_back (); func_return.pop_back (); func_calls.pop_back (); if (in_block ()) emit_jmp (join_block); set_block (join_block); this_locals = old_locals; delete locals; return retval; } void bpf_unparser::visit_functioncall (functioncall *e) { // ??? Function overloading isn't handled. if (e->referents.size () != 1) throw SEMANTIC_ERROR (_("unhandled function overloading"), e->tok); functiondecl *f = e->referents[0]; // ??? For now, always inline the function call. for (auto i = func_calls.begin(); i != func_calls.end(); ++i) if (f == *i) throw SEMANTIC_ERROR (_("unhandled function recursion"), e->tok); // XXX: Should have been checked in earlier pass. assert (e->args.size () == f->formal_args.size ()); // Evaluate and collect the function arguments. std::vector args; for (unsigned n = e->args.size (), i = 0; i < n; ++i) { value *r = this_prog.new_reg (); emit_mov (r, emit_expr (e->args[i])); args.push_back(r); } result = emit_functioncall(f, args); } int globals::intern_string (std::string& str) { if (interned_str_map.count(str) > 0) return interned_str_map[str]; int this_idx = interned_strings.size(); interned_strings.push_back(str); interned_str_map[str] = this_idx; return this_idx; } // Generates perf_event_output transport message glue code. // // XXX: Based on the interface of perf_event_output, this_in_arg0 must // be a pt_regs * struct. In fact, the BPF program apparently has to // pass the context given to the program as arg 0, regardless of the // type. For the sake of user-space helpers (e.g. begin/end) we just // pass NULL when this_in_arg0 is not available. Should not happen // in-kernel where BPF programs apparently always have a context, but // it's worth noting the assumptions here. // // TODO: We need to specify the transport message format more // compactly. Thus far, everything is written as double-words to avoid // getting 'misaligned stack access' errors from the verifier. // // TODO: We could extend this interface to allow passing multiple // values in one transport message, e.g. a sequence of pe_long. void bpf_unparser::emit_transport_msg (globals::perf_event_type msg, value *arg, exp_type format_type) { // Harmonize the information in arg, format_type, and msg: if (arg != NULL) { if (format_type == pe_unknown) format_type = arg->format_type; assert(format_type == arg->format_type || arg->format_type == pe_unknown); if (arg->is_str() && arg->is_format() && format_type == pe_unknown) format_type = pe_string; // XXX: Finally, pick format_type based on msg (inferred from format string): if (msg == globals::STP_PRINTF_ARG_LONG && format_type == pe_unknown) format_type = pe_long; else if (msg == globals::STP_PRINTF_ARG_STR && format_type == pe_unknown) format_type = pe_string; } unsigned arg_size = 0; if (arg != NULL) switch (format_type) { case pe_long: arg_size = 8; break; case pe_string: if (arg->is_str() && arg->is_format()) arg_size = sizeof(BPF_TRANSPORT_ARG); // pass index of interned str else { arg_size = BPF_MAXSTRINGLEN; // XXX hack for PR25169: Unfortunately, we may conflict with prior // stack allocations in embedded assembly code which were done // before seeing this transport message. So we need to allocate // below max_tmp_space. Could switch to a preallocation scheme that // scans the code for string operations. arg_size += this_prog.max_tmp_space; } break; default: assert(false); // XXX: Should be caught earlier. } // XXX: The following force-aligns all elements to double word boundary. // Could probably switch to single-word alignment with more careful design. if (arg_size % 8 != 0) arg_size += 8 - arg_size % 8; int arg_ofs = -arg_size; int msg_ofs = arg_ofs-sizeof(BPF_TRANSPORT_VAL); if (msg_ofs % 8 != 0) msg_ofs -= (8 - (-msg_ofs) % 8); this_prog.use_tmp_space(-msg_ofs); value *frame = this_prog.lookup_reg(BPF_REG_10); // store arg if (arg != NULL) switch (format_type) { case pe_long: this_prog.mk_st(this_ins, BPF_DW, frame, arg_ofs, arg); break; case pe_string: if (arg->is_str() && arg->is_format()) { int idx = glob.intern_string(arg->str_val); this_prog.mk_st(this_ins, BPF_DW, frame, arg_ofs, this_prog.new_imm(idx)); } else emit_string_copy(frame, arg_ofs, arg, false /* no zero pad */); break; default: assert(false); // XXX: Should be caught earlier. } // double word -- XXX verifier forces aligned access this_prog.mk_st(this_ins, BPF_DW, frame, msg_ofs, this_prog.new_imm(msg)); value *ctx = this_in_arg0 == NULL ? this_prog.new_imm(0) : this_in_arg0; emit_mov(this_prog.lookup_reg(BPF_REG_1), ctx); // ctx this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_2), globals::perf_event_map_idx); emit_mov(this_prog.lookup_reg(BPF_REG_3), this_prog.new_imm(BPF_F_CURRENT_CPU)); // flags this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_4), frame, this_prog.new_imm(msg_ofs)); emit_mov(this_prog.lookup_reg(BPF_REG_5), this_prog.new_imm(-msg_ofs)); this_prog.mk_call(this_ins, BPF_FUNC_perf_event_output, 5); } globals::perf_event_type printf_arg_type (value *arg, const print_format::format_component &c) { switch (arg->format_type) { case pe_long: return globals::STP_PRINTF_ARG_LONG; case pe_string: return globals::STP_PRINTF_ARG_STR; case pe_unknown: // XXX: Could be a lot stricter and force // arg->format_type and c.type to match. switch (c.type) { case print_format::conv_pointer: case print_format::conv_number: case print_format::conv_char: case print_format::conv_memory: case print_format::conv_memory_hex: case print_format::conv_binary: return globals::STP_PRINTF_ARG_LONG; case print_format::conv_string: return globals::STP_PRINTF_ARG_STR; default: assert(false); // XXX } default: assert(false); // XXX: Should be caught earlier. } } value * bpf_unparser::emit_print_format (const std::string& format, const std::vector& actual, bool print_to_stream, const token *tok) { size_t nargs = actual.size(); if (!print_to_stream) { // PR24528: Userspace-only feature. if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported sprintf in bpf kernel probe"), tok); // TODO: sprintf() has an additional constraint on arguments due // to passing them in a very small number of registers. if (actual.size() > BPF_MAXSPRINTFARGS) throw SEMANTIC_ERROR(_NF("additional argument to sprintf", "too many arguments to sprintf (%zu)", actual.size(), actual.size()), tok); // Emit an ordinary function call to sprintf. size_t format_bytes = format.size() + 1; this_prog.mk_mov(this_ins, this_prog.lookup_reg(BPF_REG_1), this_prog.new_str(format, true /*format_str*/)); emit_mov(this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm(format_bytes)); for (size_t i = 0; i < nargs; ++i) emit_mov(this_prog.lookup_reg(BPF_REG_3 + i), actual[i]); this_prog.mk_call(this_ins, BPF_FUNC_sprintf, nargs + 2); return this_prog.lookup_reg(BPF_REG_0); } // Filter components to include only non-literal printf arguments: std::vector all_components = print_format::string_to_components(format); // XXX: Could pass print_format * to avoid extra parse, except for embedded-code. std::vector components; for (auto &c : all_components) { if (c.type != print_format::conv_literal) components.push_back(c); } if (components.size() != nargs) { if (tok != NULL) throw SEMANTIC_ERROR(_F("format string expected %zu args, got %zu", components.size(), nargs), tok); else assert(false); // XXX: Should be caught earlier. } emit_transport_msg(globals::STP_PRINTF_START, this_prog.new_imm(nargs), pe_long); emit_transport_msg(globals::STP_PRINTF_FORMAT, this_prog.new_str(format, true /*format_str*/)); for (size_t i = 0; i < nargs; ++i) emit_transport_msg(printf_arg_type(actual[i], components[i]), actual[i]); emit_transport_msg(globals::STP_PRINTF_END); return NULL; } void bpf_unparser::visit_print_format (print_format *e) { if (e->hist) throw SEMANTIC_ERROR (_("unhandled histogram print"), e->tok); size_t nargs = e->args.size(); size_t i; if (nargs > BPF_MAXPRINTFARGS) throw SEMANTIC_ERROR(_NF("additional argument to print", "too many arguments to print (%zu)", e->args.size(), e->args.size()), e->tok); std::vector actual; for (i = 0; i < nargs; ++i) { value *arg = emit_expr(e->args[i]); arg->format_type = e->args[i]->type; actual.push_back(arg); } for (size_t i = 0; i < nargs; ++i) if (actual[i]->format_type == pe_stats) throw SEMANTIC_ERROR (_("cannot print a raw stats object"), e->args[i]->tok); else if (actual[i]->format_type != pe_long && actual[i]->format_type != pe_string) throw SEMANTIC_ERROR (_("cannot print unknown expression type"), e->args[i]->tok); std::string format; if (e->print_with_format) { // If this is a long string with no actual arguments, it will be // interned in the format string table as usual. interned_string fstr = e->raw_components; format += translate_escapes(fstr, e->tok); } else { // Synthesize a print-format string if the user didn't // provide one; the synthetic string simply contains one // directive for each argument. std::string delim; if (e->print_with_delim) { interned_string dstr = e->delimiter; for (interned_string::const_iterator j = dstr.begin(); j != dstr.end(); ++j) { if (*j == '%') delim += '%'; delim += *j; } } for (i = 0; i < nargs; ++i) { if (i > 0 && e->print_with_delim) format += delim; switch (e->args[i]->type) { default: case pe_unknown: throw SEMANTIC_ERROR(_("cannot print unknown expression type"), e->args[i]->tok); case pe_stats: throw SEMANTIC_ERROR(_("cannot print a raw stats object"), e->args[i]->tok); case pe_long: format += "%lld"; break; case pe_string: format += "%s"; break; } } if (e->print_with_newline) format += '\n'; } size_t format_bytes = format.size() + 1; if (format_bytes > BPF_MAXFORMATLEN) throw SEMANTIC_ERROR(_("Format string for print too long"), e->tok); value *retval = emit_print_format(format, actual, e->print_to_stream, e->tok); if (retval != NULL) result = retval; } void bpf_unparser::visit_stat_op (stat_op* e) { #ifdef DEBUG_CODEGEN this_ins.notes.push("stat_get"); #endif // XXX PR24528: This code is userspace-only. Unfortunately, BPF does // not allow accessing percpu map elements from other cpus in // kernel-space, so for now we will just issue a fake helper call // and let the userspace sort this out. // // "I don't see a case where accessing other cpu per-cpu element // wouldn't be a bug in the program." // https://lore.kernel.org/patchwork/patch/634595/ if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported extraction function in bpf kernel probe"), e->tok); switch (e->ctype) { case sc_average: case sc_count: case sc_sum: break; // ok to pass to the helper case sc_none: assert (0); // should not happen, as sc_none is only used in foreach slots // TODO PR23476: Not yet implemented. case sc_min: case sc_max: case sc_variance: default: throw SEMANTIC_ERROR (_("unhandled stat op"), e->tok); } // identify the aggregate for the userspace interpreter globals::agg_idx agg = 0; if (symbol *s = dynamic_cast(e->stat)) // scalar stat value { vardecl *v = s->referent; assert (v->arity == 0); agg = 0; // id for scalar stat value if (v->type != pe_stats) throw SEMANTIC_ERROR (_("unexpected aggregate of non-statistic"), v->tok); auto g = glob.globals.find (v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown statistics variable"), v->tok); if (!g->second.is_stat()) throw SEMANTIC_ERROR(_("not a statistics variable"), v->tok); // Store the long on the stack and pass its address: emit_long_arg(this_prog.lookup_reg(BPF_REG_2), -8, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(8); } else if (arrayindex *a = dynamic_cast(e->stat)) // array stat value { if (symbol *a_sym = dynamic_cast(a->base)) { vardecl *v = a_sym->referent; agg = glob.aggregates[v]; // id for array stat value auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); unsigned element = v->arity; unsigned key_ofs = 0; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), v->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); } else throw SEMANTIC_ERROR(_("unknown statistics value"), e->stat->tok); } emit_mov(this_prog.lookup_reg(BPF_REG_1), this_prog.new_imm(agg)); // agg_idx uint64_t sc_type = globals::intern_sc_type(e->ctype); emit_mov(this_prog.lookup_reg(BPF_REG_3), this_prog.new_imm(sc_type)); this_prog.mk_call (this_ins, BPF_FUNC_stapbpf_stat_get, 3); result = this_prog.new_reg(); emit_mov(result, this_prog.lookup_reg(BPF_REG_0)); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); #endif } void bpf_unparser::visit_hist_op (hist_op *e) { // TODO PR24424: Implement as a perf-request or as a userspace-only helper. throw SEMANTIC_ERROR (_("unhandled hist op"), e->tok); } // } // anon namespace void build_internal_globals(globals& glob) { struct vardecl exit; exit.name = "__global___STAPBPF_exit"; exit.unmangled_name = "__STAPBPF_exit"; exit.type = pe_long; exit.arity = 0; glob.internal_exit = exit; glob.globals.insert(std::pair (&glob.internal_exit, globals::map_slot(0, globals::EXIT))); glob.maps.push_back ({ BPF_MAP_TYPE_HASH, 4, /* NB: value_size */ 8, globals::NUM_INTERNALS, 0 }); // PR22330: Use a PERF_EVENT_ARRAY map for message transport: glob.maps.push_back ({ BPF_MAP_TYPE_PERF_EVENT_ARRAY, 4, 4, globals::NUM_CPUS_PLACEHOLDER, 0 }); // XXX: NUM_CPUS_PLACEHOLDER will be replaced at loading time. } static void translate_globals (globals &glob, systemtap_session& s) { int long_map = -1; // -- for scalar long variables int str_map = -1; // -- for scalar string variables build_internal_globals(glob); for (auto i = s.globals.begin(); i != s.globals.end(); ++i) { vardecl *v = *i; int this_map, this_idx; switch (v->arity) { case 0: // scalars switch (v->type) { case pe_long: if (long_map < 0) { globals::bpf_map_def m = { BPF_MAP_TYPE_ARRAY, 4, 8, 0, 0 }; long_map = glob.maps.size(); glob.maps.push_back(m); } this_map = long_map; this_idx = glob.maps[long_map].max_entries++; break; case pe_string: if (str_map < 0) { globals::bpf_map_def m = { BPF_MAP_TYPE_ARRAY, 4, BPF_MAXSTRINGLEN, 0, 0 }; str_map = glob.maps.size(); glob.maps.push_back(m); } this_map = str_map; this_idx = glob.maps[str_map].max_entries++; break; case pe_stats: if (glob.scalar_stats.empty()) { for (globals::stat_field f : globals::stat_fields) { globals::bpf_map_def m = { BPF_MAP_TYPE_PERCPU_ARRAY, 4, 8, 0, 0 }; globals::map_idx map_id = glob.maps.size(); glob.maps.push_back(m); glob.scalar_stats[f] = map_id; } // ??? TODO: skip/drop any stat fields unused by all aggregates // TODO PR24424: special case for 'histogram' field } this_map = -1; // Mark as statistical aggregate. // Add one element to each stat field's array: this_idx = -1; for (globals::stat_field f : globals::stat_fields) { // XXX: Not all aggregates use the same stat // fields. Some slots may therefore be unused, but // it simplifies things a lot to use the same index // for all fields of an aggregate. int map_id = glob.scalar_stats[f]; int check_idx = glob.maps[map_id].max_entries++; if (this_idx == -1) this_idx = check_idx; else assert(check_idx == this_idx); // XXX: All arrays same length. } assert(this_idx >= 0); break; default: throw SEMANTIC_ERROR (_("unhandled scalar type"), v->tok); } break; default: // arrays (one or more dimension) { unsigned key_size = 0; unsigned max_entries; unsigned element = v->arity; do { --element; switch (v->index_types[element]) { case pe_long: key_size += 8; break; case pe_string: key_size += BPF_MAXSTRINGLEN; break; default: throw SEMANTIC_ERROR (_("unhandled index type"), v->tok); } } while (element); max_entries = v->maxsize > 0 ? v->maxsize : BPF_MAXMAPENTRIES; if (v->type == pe_stats) { glob.array_stats[v] = globals::stats_map(); for (globals::stat_field f : globals::stat_fields) { globals::bpf_map_def m = { BPF_MAP_TYPE_PERCPU_HASH, 0, 0, 0, 0 }; m.key_size = key_size; m.max_entries = max_entries; m.value_size = 8; // XXX: for stat data, sizeof(uint64_t) int map_id = glob.maps.size(); glob.maps.push_back(m); glob.array_stats[v][f] = map_id; // Assign an agg_idx to identify the aggregate from BPF code. // XXX: agg_idx 0 is reserved for scalar_stats: glob.aggregates[v] = 1 + glob.aggregates.size(); // ??? TODO: skip/drop any stat fields unused by this aggregate // TODO PR24424: special case for 'histogram' field } this_map = -1; // Mark as statistical aggregate. this_idx = -1; // Mark as array. } else { globals::bpf_map_def m = { BPF_MAP_TYPE_HASH, 0, 0, 0, 0 }; m.key_size = key_size; switch (v->type) { case pe_long: m.value_size = 8; break; case pe_string: m.value_size = BPF_MAXSTRINGLEN; break; // XXX: case pe_stats is handled above default: throw SEMANTIC_ERROR (_("unhandled array element type"), v->tok); } m.max_entries = max_entries; this_map = glob.maps.size(); glob.maps.push_back(m); this_idx = -1; // XXX: was 0, check if this is used correctly } } break; } assert(this_map != globals::internal_map_idx); auto ok = (glob.globals.insert (std::pair (v, globals::map_slot(this_map, this_idx)))); assert(ok.second); } } struct BPF_Section { Elf_Scn *scn; Elf64_Shdr *shdr; std::string name; Stap_Strent *name_ent; Elf_Data *data; bool free_data; // NB: then data must have been malloc()'d! BPF_Section(const std::string &n); ~BPF_Section(); }; BPF_Section::BPF_Section(const std::string &n) : scn(0), name(n), name_ent(0), data(0), free_data(false) { } BPF_Section::~BPF_Section() { if (free_data) free(data->d_buf); } struct BPF_Symbol { std::string name; Stap_Strent *name_ent; Elf64_Sym sym; BPF_Symbol(const std::string &n, BPF_Section *, long); }; BPF_Symbol::BPF_Symbol(const std::string &n, BPF_Section *sec, long off) : name(n), name_ent(0) { memset(&sym, 0, sizeof(sym)); sym.st_shndx = elf_ndxscn(sec->scn); sym.st_value = off; } struct BPF_Output { Elf *elf; Elf64_Ehdr *ehdr; Stap_Strtab *str_tab; std::vector sections; std::vector symbols; BPF_Output(int fd); ~BPF_Output(); BPF_Section *new_scn(const std::string &n); BPF_Symbol *new_sym(const std::string &n, BPF_Section *, long); BPF_Symbol *append_sym(const std::string &n, BPF_Section *, long); }; BPF_Output::BPF_Output(int fd) : elf(elf_begin(fd, ELF_C_WRITE_MMAP, NULL)), ehdr(elf64_newehdr(elf)), str_tab(stap_strtab_init(true)) { ehdr->e_type = ET_REL; ehdr->e_machine = EM_BPF; } BPF_Output::~BPF_Output() { stap_strtab_free(str_tab); for (auto i = symbols.begin(); i != symbols.end(); ++i) delete *i; for (auto i = sections.begin(); i != sections.end(); ++i) delete *i; elf_end(elf); } BPF_Section * BPF_Output::new_scn(const std::string &name) { BPF_Section *n = new BPF_Section(name); Elf_Scn *scn = elf_newscn(elf); n->scn = scn; n->shdr = elf64_getshdr(scn); n->data = elf_newdata(scn); n->name_ent = stap_strtab_add(str_tab, n->name.c_str()); sections.push_back(n); return n; } BPF_Symbol * BPF_Output::new_sym(const std::string &name, BPF_Section *sec, long off) { BPF_Symbol *s = new BPF_Symbol(name, sec, off); s->name_ent = stap_strtab_add(str_tab, s->name.c_str()); return s; } BPF_Symbol * BPF_Output::append_sym(const std::string &name, BPF_Section *sec, long off) { BPF_Symbol *s = new_sym(name, sec, off); symbols.push_back(s); return s; } static void output_kernel_version(BPF_Output &eo, const std::string &base_version) { unsigned long maj = 0, min = 0, rel = 0; char *q; maj = strtoul(base_version.c_str(), &q, 10); if (*q == '.') { min = strtoul(q + 1, &q, 10); if (*q == '.') rel = strtoul(q + 1, NULL, 10); } BPF_Section *so = eo.new_scn("version"); Elf_Data *data = so->data; data->d_buf = malloc(sizeof(uint32_t)); assert (data->d_buf); * (uint32_t*) data->d_buf = KERNEL_VERSION(maj, min, rel); data->d_type = ELF_T_BYTE; data->d_size = 4; data->d_align = 4; so->free_data = true; so->shdr->sh_type = SHT_PROGBITS; so->shdr->sh_entsize = 4; } static void output_license(BPF_Output &eo) { BPF_Section *so = eo.new_scn("license"); Elf_Data *data = so->data; data->d_buf = (void *)"GPL"; data->d_type = ELF_T_BYTE; data->d_size = 4; so->shdr->sh_type = SHT_PROGBITS; } static void output_stapbpf_script_name(BPF_Output &eo, const std::string script_name) { BPF_Section *so = eo.new_scn("stapbpf_script_name"); Elf_Data *data = so->data; size_t script_name_len = strlen(script_name.c_str()); data->d_buf = (void *)malloc(script_name_len + 1); char *script_name_buf = (char *)data->d_buf; script_name.copy(script_name_buf, script_name_len); script_name_buf[script_name_len] = '\0'; data->d_type = ELF_T_BYTE; data->d_size = script_name_len + 1; so->free_data = true; so->shdr->sh_type = SHT_PROGBITS; } static void output_maps(BPF_Output &eo, globals &glob) { unsigned nmaps = glob.maps.size(); if (nmaps == 0) return; assert(sizeof(unsigned) == sizeof(Elf64_Word)); const size_t bpf_map_def_sz = sizeof(globals::bpf_map_def); BPF_Section *so = eo.new_scn("maps"); Elf_Data *data = so->data; data->d_buf = glob.maps.data(); data->d_type = ELF_T_BYTE; data->d_size = nmaps * bpf_map_def_sz; data->d_align = 4; so->shdr->sh_type = SHT_PROGBITS; so->shdr->sh_entsize = bpf_map_def_sz; // Allow the global arrays to have their actual names. eo.symbols.reserve(nmaps); for (unsigned i = 0; i < nmaps; ++i) eo.symbols.push_back(NULL); for (auto i = glob.globals.begin(); i != glob.globals.end(); ++i) { vardecl *v = i->first; if (v->arity <= 0) continue; if (i->second.is_stat()) continue; unsigned m = i->second.map_id; assert(eo.symbols[m] == NULL); BPF_Symbol *s = eo.new_sym(v->name, so, m * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); s->sym.st_size = bpf_map_def_sz; eo.symbols[m] = s; } // Give internal names to stat maps. for (auto i = glob.scalar_stats.begin(); i != glob.scalar_stats.end(); ++i) { std::string f = i->first; unsigned m = i->second; assert(eo.symbols[m] == NULL); BPF_Symbol *s = eo.new_sym(std::string("stat.") + f, so, m * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); eo.symbols[m] = s; } for (auto i = glob.array_stats.begin(); i != glob.array_stats.end(); ++i) { vardecl *v = i->first; for (auto j = i->second.begin(); j != i->second.end(); ++j) { std::string f = j->first; unsigned m = j->second; assert(eo.symbols[m] == NULL); BPF_Symbol *s = eo.new_sym(std::string(v->name) + std::string(".stat.") + f, so, m * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); eo.symbols[m] = s; } } // Give internal names to other maps. for (unsigned i = 0; i < nmaps; ++i) { if (eo.symbols[i] != NULL) continue; BPF_Symbol *s = eo.new_sym(std::string("map.") + std::to_string(i), so, i * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); s->sym.st_size = bpf_map_def_sz; eo.symbols[i] = s; } } static void output_interned_strings(BPF_Output &eo, globals& glob) { // XXX: Don't use SHT_STRTAB since it can reorder the strings, iiuc // requiring us to use yet more ELF infrastructure to refer to them // and forcing us to generate this section at the same time as the // code instead of in a separate procedure. To avoid that, manually // write a SHT_PROGBITS section in SHT_STRTAB format. if (glob.interned_strings.size() == 0) return; BPF_Section *str = eo.new_scn("stapbpf_interned_strings"); Elf_Data *data = str->data; size_t interned_strings_len = 1; // extra NUL byte for (auto i = glob.interned_strings.begin(); i != glob.interned_strings.end(); ++i) { std::string &str = *i; interned_strings_len += str.size() + 1; // with NUL byte } data->d_buf = (void *)malloc(interned_strings_len); char *interned_strings_buf = (char *)data->d_buf; interned_strings_buf[0] = '\0'; unsigned ofs = 1; for (auto i = glob.interned_strings.begin(); i != glob.interned_strings.end(); ++i) { std::string &str = *i; assert(ofs+str.size()+1 <= interned_strings_len); str.copy(interned_strings_buf+ofs, str.size()); interned_strings_buf[ofs+str.size()] = '\0'; ofs += str.size() + 1; } assert(ofs == interned_strings_len); data->d_type = ELF_T_BYTE; data->d_size = interned_strings_len; str->free_data = true; str->shdr->sh_type = SHT_PROGBITS; } static void output_statsmap(void *d_buf, globals::agg_idx agg_id, const globals::stats_map &sm) { globals::interned_stats_map ism = globals::intern_stats_map(sm); uint64_t *ix = (uint64_t *)d_buf; *ix = (uint64_t)agg_id; for (unsigned i = 0; i < globals::stat_fields.size(); i++) { globals::stat_field sf = globals::stat_fields[i]; auto it = sm.find(sf); assert (it != sm.end()); ix++; *ix = (uint64_t)it->second; } } static void output_interned_aggregates(BPF_Output &eo, globals& glob) { if (glob.scalar_stats.empty() && glob.aggregates.size() == 0) return; BPF_Section *agg = eo.new_scn("stapbpf_aggregates"); Elf_Data *data = agg->data; size_t interned_aggregate_len = sizeof(uint64_t) * (1 + globals::stat_fields.size()); unsigned n_aggregates = glob.scalar_stats.empty() ? glob.aggregates.size() : glob.aggregates.size() + 1; data->d_buf = (void *)calloc(n_aggregates, interned_aggregate_len); data->d_size = interned_aggregate_len * n_aggregates; size_t ofs = 0; // XXX after glob.scalar_stats if (!glob.scalar_stats.empty()) { output_statsmap(data->d_buf, ofs, glob.scalar_stats); ofs += interned_aggregate_len; } char *ix = (char *)data->d_buf; for (auto i = glob.aggregates.begin(); i != glob.aggregates.end(); i++) { assert(glob.array_stats.count(i->first) != 0); output_statsmap((void *)(ix+ofs), i->second, glob.array_stats[i->first]); ofs += interned_aggregate_len; } assert (ofs == data->d_size); data->d_type = ELF_T_BYTE; agg->free_data = true; agg->shdr->sh_type = SHT_PROGBITS; } void bpf_unparser::add_prologue() { value *i0 = this_prog.new_imm(0); // lookup exit global value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_st(this_ins, BPF_W, frame, -4, i0); this_prog.use_tmp_space(4); this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), globals::internal_map_idx); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(-4)); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); value *r0 = this_prog.lookup_reg(BPF_REG_0); block *cont_block = this_prog.new_block(); block *exit_block = get_exit_block(); // check that map_lookup_elem returned non-null ptr this_prog.mk_jcond(this_ins, EQ, r0, i0, exit_block, cont_block); set_block(cont_block); // load exit status from ptr value *exit_status = this_prog.new_reg(); this_prog.mk_ld(this_ins, BPF_DW, exit_status, r0, 0); // if exit_status == 1 jump to exit, else continue with handler cont_block = this_prog.new_block(); this_prog.mk_jcond(this_ins, EQ, exit_status, this_prog.new_imm(1), exit_block, cont_block); set_block(cont_block); } static void translate_probe(program &prog, globals &glob, derived_probe *dp) { bpf_unparser u(prog, glob); u.this_locals = u.new_locals(dp->locals); u.set_block(prog.new_block ()); // Save the input argument early. // ??? Ideally this would be deleted as dead code if it were unused; // we don't implement that at the moment. Nor is it easy to support // inserting a new start block that would enable retroactively saving // this only when needed. u.this_in_arg0 = prog.lookup_reg(BPF_REG_6); prog.mk_mov(u.this_ins, u.this_in_arg0, prog.lookup_reg(BPF_REG_1)); u.add_prologue(); dp->body->visit (&u); if (u.in_block()) u.emit_jmp(u.get_ret0_block()); } static void translate_probe_v(program &prog, globals &glob, const std::vector &v) { bpf_unparser u(prog, glob); block *this_block; if (prog.blocks.empty()) this_block = prog.new_block(); else { u.set_block(prog.blocks.back()); this_block = prog.new_block(); u.emit_jmp(this_block); } for (size_t n = v.size(), i = 0; i < n; ++i) { u.set_block(this_block); derived_probe *dp = v[i]; u.this_locals = u.new_locals(dp->locals); dp->body->visit (&u); delete u.this_locals; u.this_locals = NULL; if (i == n - 1) this_block = u.get_ret0_block(); else this_block = prog.new_block(); if (u.in_block()) u.emit_jmp(this_block); } } static void translate_init_and_probe_v(program &prog, globals &glob, init_block &b, const std::vector &v) { bpf_unparser u(prog, glob); block *this_block = prog.new_block(); u.set_block(this_block); b.visit(&u); if (!v.empty()) translate_probe_v(prog, glob, v); else { this_block = u.get_ret0_block(); assert(u.in_block()); u.emit_jmp(this_block); } } static BPF_Section * output_probe(BPF_Output &eo, program &prog, const std::string &name, unsigned flags) { unsigned ninsns = 0, nreloc = 0; // Count insns and relocations; drop in jump offset. for (auto i = prog.blocks.begin(); i != prog.blocks.end(); ++i) { block *b = *i; for (insn *j = b->first; j != NULL; j = j->next) { unsigned code = j->code; if ((code & 0xff) == (BPF_LD | BPF_IMM | BPF_DW)) { if (code == BPF_LD_MAP) nreloc += 1; ninsns += 2; } else { if (j->is_jmp()) { // ??? Forwarders should be removed by bpf-opt.cxx thread_jumps, // but we seem to miss or reintroduce a few. Minimal fix: block *target = b->taken->next; while (target->first == NULL) { target = target->is_forwarder(); assert (target != NULL); } j->off = target->first->id - (j->id + 1); } else if (j->is_call()) j->off = 0; ninsns += 1; } } } bpf_insn *buf = (bpf_insn*) calloc (sizeof(bpf_insn), ninsns); assert (buf); Elf64_Rel *rel = (Elf64_Rel*) calloc (sizeof(Elf64_Rel), nreloc); assert (rel); unsigned i = 0, r = 0; for (auto bi = prog.blocks.begin(); bi != prog.blocks.end(); ++bi) { block *b = *bi; for (insn *j = b->first; j != NULL; j = j->next) { unsigned code = j->code; value *d = j->dest; value *s = j->src1; if (code == BPF_LD_MAP) { unsigned val = s->imm(); // Note that we arrange for the map symbols to be first. rel[r].r_offset = i * sizeof(bpf_insn); rel[r].r_info = ELF64_R_INFO(val + 1, R_BPF_MAP_FD); r += 1; buf[i + 0].code = code; buf[i + 0].dst_reg = d->reg(); buf[i + 0].src_reg = code >> 8; i += 2; } else if (code == (BPF_LD | BPF_IMM | BPF_DW)) { uint64_t val = s->imm(); buf[i + 0].code = code; buf[i + 0].dst_reg = d->reg(); buf[i + 0].src_reg = code >> 8; buf[i + 0].imm = val; buf[i + 1].imm = val >> 32; i += 2; } else { buf[i].code = code; if (!d) d = j->src0; if (d) buf[i].dst_reg = d->reg(); if (s) { if (s->is_reg()) buf[i].src_reg = s->reg(); else buf[i].imm = s->imm(); } buf[i].off = j->off; i += 1; } } } assert(i == ninsns); assert(r == nreloc); BPF_Section *so = eo.new_scn(name); Elf_Data *data = so->data; data->d_buf = buf; data->d_type = ELF_T_BYTE; data->d_size = ninsns * sizeof(bpf_insn); data->d_align = 8; so->free_data = true; so->shdr->sh_type = SHT_PROGBITS; so->shdr->sh_flags = SHF_EXECINSTR | flags; if (nreloc) { BPF_Section *ro = eo.new_scn(std::string(".rel.") + name); Elf_Data *rdata = ro->data; rdata->d_buf = rel; rdata->d_type = ELF_T_REL; rdata->d_size = nreloc * sizeof(Elf64_Rel); ro->free_data = true; ro->shdr->sh_type = SHT_REL; ro->shdr->sh_info = elf_ndxscn(so->scn); } return so; } static void output_symbols_sections(BPF_Output &eo) { BPF_Section *str = eo.new_scn(".strtab"); str->shdr->sh_type = SHT_STRTAB; str->shdr->sh_entsize = 1; unsigned nsym = eo.symbols.size(); unsigned isym = 0; if (nsym > 0) { BPF_Section *sym = eo.new_scn(".symtab"); sym->shdr->sh_type = SHT_SYMTAB; sym->shdr->sh_link = elf_ndxscn(str->scn); sym->shdr->sh_info = nsym + 1; Elf64_Sym *buf = new Elf64_Sym[nsym + 1]; memset(buf, 0, sizeof(Elf64_Sym)); sym->data->d_buf = buf; sym->data->d_type = ELF_T_SYM; sym->data->d_size = (nsym + 1) * sizeof(Elf64_Sym); stap_strtab_finalize(eo.str_tab, str->data); for (unsigned i = 0; i < nsym; ++i) { BPF_Symbol *s = eo.symbols[i]; Elf64_Sym *b = buf + (i + 1); *b = s->sym; b->st_name = stap_strent_offset(s->name_ent); } isym = elf_ndxscn(sym->scn); } else stap_strtab_finalize(eo.str_tab, str->data); eo.ehdr->e_shstrndx = elf_ndxscn(str->scn); for (auto i = eo.sections.begin(); i != eo.sections.end(); ++i) { BPF_Section *s = *i; s->shdr->sh_name = stap_strent_offset(s->name_ent); if (s->shdr->sh_type == SHT_REL) s->shdr->sh_link = isym; } } } // namespace bpf int translate_bpf_pass (systemtap_session& s) { using namespace bpf; init_bpf_helper_tables(); if (elf_version(EV_CURRENT) == EV_NONE) return 1; module_name = s.module_name; const std::string module = s.tmpdir + "/" + s.module_filename(); int fd = open(module.c_str(), O_RDWR | O_CREAT | O_TRUNC, 0666); if (fd < 0) return 1; BPF_Output eo(fd); globals glob; glob.session = &s; int ret = 0; const token* t = 0; try { translate_globals(glob, s); output_maps(eo, glob); if (s.be_derived_probes || !glob.empty()) { std::vector begin_v, end_v; sort_for_bpf(s, s.be_derived_probes, begin_v, end_v); init_block init(glob); if (!init.empty()) { if (!begin_v.empty()) t = begin_v[0]->tok; program p(target_user_bpfinterp); translate_init_and_probe_v(p, glob, init, begin_v); p.generate(); output_probe(eo, p, "stap_begin", 0); } else if (!begin_v.empty()) { t = begin_v[0]->tok; program p(target_user_bpfinterp); translate_probe_v(p, glob, begin_v); p.generate(); output_probe(eo, p, "stap_begin", 0); } if (!end_v.empty()) { t = end_v[0]->tok; program p(target_user_bpfinterp); translate_probe_v(p, glob, end_v); p.generate(); output_probe(eo, p, "stap_end", 0); } } if (s.generic_kprobe_derived_probes) { sort_for_bpf_probe_arg_vector kprobe_v; sort_for_bpf(s, s.generic_kprobe_derived_probes, kprobe_v); for (auto i = kprobe_v.begin(); i != kprobe_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.procfs_derived_probes) { sort_for_bpf_probe_arg_vector procfs_v; sort_for_bpf(s, s.procfs_derived_probes, procfs_v); for (auto i = procfs_v.begin(); i != procfs_v.end(); ++i) { t = i->first->tok; program p(target_user_bpfinterp); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, 0); } } if (s.perf_derived_probes) { sort_for_bpf_probe_arg_vector perf_v; sort_for_bpf(s, s.perf_derived_probes, perf_v); for (auto i = perf_v.begin(); i != perf_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.hrtimer_derived_probes || s.timer_derived_probes) { sort_for_bpf_probe_arg_vector timer_v; sort_for_bpf(s, s.hrtimer_derived_probes, s.timer_derived_probes, timer_v); for (auto i = timer_v.begin(); i != timer_v.end(); ++i) { t = i->first->tok; // TODO PR23477: Also support userspace timer probes. program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.tracepoint_derived_probes) { sort_for_bpf_probe_arg_vector trace_v; sort_for_bpf(s, s.tracepoint_derived_probes, trace_v); for (auto i = trace_v.begin(); i != trace_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.uprobe_derived_probes) { sort_for_bpf_probe_arg_vector uprobe_v; sort_for_bpf(s, s.uprobe_derived_probes, uprobe_v); for (auto i = uprobe_v.begin(); i != uprobe_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } output_kernel_version(eo, s.kernel_base_release); output_license(eo); output_stapbpf_script_name(eo, escaped_literal_string(s.script_basename())); output_interned_strings(eo, glob); output_interned_aggregates(eo, glob); output_symbols_sections(eo); int64_t r = elf_update(eo.elf, ELF_C_WRITE_MMAP); if (r < 0) { std::clog << "Error writing output file: " << elf_errmsg(elf_errno()) << std::endl; ret = 1; } } catch (const semantic_error &e) { s.print_error(e); ret = 1; } catch (const std::runtime_error &e) { semantic_error er(ERR_SRC, _F("bpf translation failure: %s", e.what()), t); s.print_error(er); ret = 1; } catch (...) { std::cerr << "bpf translation internal error" << std::endl; ret = 1; } close(fd); if (ret == 1) unlink(s.translated_source.c_str()); return ret; } systemtap-4.2/bpf.h000066400000000000000000000006131356460210500143320ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2016 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BPF_H #define BPF_H struct systemtap_session; int translate_bpf_pass (systemtap_session& s); #endif // BPF_H systemtap-4.2/buildrun.cxx000066400000000000000000001240451356460210500157700ustar00rootroot00000000000000// build/run probes // Copyright (C) 2005-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "buildrun.h" #include "session.h" #include "util.h" #include "hash.h" #include "translate.h" #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include } // A bit of obfuscation for Gentoo's sake. // We *need* -Werror for stapconf to work correctly. // https://bugs.gentoo.org/show_bug.cgi?id=522908 #define WERROR ("-W" "error") #define PATH_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+,-./_" using namespace std; /* Adjust and run make_cmd to build a kernel module. */ static int run_make_cmd(systemtap_session& s, vector& make_cmd, bool null_out=false, bool null_err=false) { assert_no_interrupts(); // PR14168: we used to unsetenv values here; instead do it via // env(1) in make_any_make_cmd(). // Disable ccache to avoid saving files that will never be reused. // (ccache is useless to us, because our compiler commands always // include the randomized tmpdir path.) // It's not critical if this fails, so the return is ignored. (void) setenv("CCACHE_DISABLE", "1", 0); if (s.verbose > 2) make_cmd.push_back("V=1"); else if (s.verbose > 1) make_cmd.push_back("--no-print-directory"); else { make_cmd.push_back("-s"); make_cmd.push_back("--no-print-directory"); } // Exploit SMP parallelism, if available. long smp = thread::hardware_concurrency(); if (smp <= 0) smp = 1; // PR16276: but only if we're not running severely nproc-rlimited struct rlimit rlim; int rlimit_rc = getrlimit(RLIMIT_NPROC, &rlim); const unsigned int severely_limited = smp*30; // WAG at number of gcc+make etc. nested processes bool nproc_limited = (rlimit_rc == 0 && (rlim.rlim_max <= severely_limited || rlim.rlim_cur <= severely_limited)); if (smp >= 1 && !nproc_limited) make_cmd.push_back("-j" + lex_cast(smp+1)); if (strverscmp (s.kernel_base_release.c_str(), "2.6.29") < 0) { // Older kernels, before linux commit #fd54f502841c1, include // gratuitous "echo"s in their Makefile. We need to suppress // that with this bluntness. null_out = true; } int rc = stap_system (s.verbose, "kbuild", make_cmd, null_out, null_err); if (rc != 0) s.set_try_server (); return rc; } static vector make_any_make_cmd(systemtap_session& s, const string& dir, const string& target) { string newpath("PATH=/usr/bin:/bin"); const char *oldpath = getenv("PATH"); if (oldpath != NULL) { newpath += ':'; newpath += oldpath; } vector make_cmd { // PR14168: sanitize environment variables for kbuild invocation "env", "-uARCH", "-uKBUILD_EXTMOD", "-uCROSS_COMPILE", "-uKBUILD_IMAGE", "-uKCONFIG_CONFIG", "-uINSTALL_PATH", "-uLD_LIBRARY_PATH", newpath, "make", "-C", s.kernel_build_tree, "M=" + dir, // need make-quoting? target, // PR13847: suppress debuginfo creation by default "CONFIG_DEBUG_INFO=", // RHBZ1321628: suppress stack validation; expected to be temporary "CONFIG_STACK_VALIDATION=", }; // relevant to PR10280: suppress symbol versioning to restrict to exact kernel version // 'Fix' disabled since it can break guru-mode depending on kernel config // and this is a more obnoxious behaviour than breakage when a compiled // guru_mode module is run on a different kernel. //if (s.guru_mode) // make_cmd.push_back("CONFIG_MODVERSIONS="); // XXX: Consider adding an explicit option to control this behaviour? // Add architecture, except for old powerpc (RHBZ669082) if (s.architecture != "powerpc" || (strverscmp (s.kernel_base_release.c_str(), "2.6.15") >= 0)) make_cmd.push_back("ARCH=" + s.architecture); // need make-quoting? // Add any custom kbuild flags make_cmd.insert(make_cmd.end(), s.kbuildflags.begin(), s.kbuildflags.end()); return make_cmd; } static vector make_make_cmd(systemtap_session& s, const string& dir) { vector mc = make_any_make_cmd(s, dir, "modules"); return mc; } static vector make_make_objs_cmd(systemtap_session& s, const string& dir) { // Kbuild uses these rules to build external modules: // // module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD)) // modules: $(module-dirs) // @$(kecho) ' Building modules, stage 2.'; // $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost // // So if we're only interested in the stage 1 objects, we can // cheat and make only the $(module-dirs) part. // // ... at least, before kernel commit c99f3918cf. if (strverscmp (s.kernel_base_release.c_str(), "5.4") < 0) return make_any_make_cmd(s, dir, "_module_" + dir); else return make_any_make_cmd(s, dir, "modules"); // just build the lot } static void output_autoconf(systemtap_session& s, ofstream& o, const char *autoconf_c, const char *deftrue, const char *deffalse) { o << "\t"; if (s.verbose < 4) o << "@"; o << "if $(CHECK_BUILD) $(SYSTEMTAP_RUNTIME)/linux/" << autoconf_c; if (s.verbose < 5) o << " > /dev/null 2>&1"; o << "; then "; if (deftrue) o << "echo \"#define " << deftrue << " 1\""; if (deffalse) o << "; else echo \"#define " << deffalse << " 1\""; o << "; fi >> $@" << endl; } void output_exportconf(systemtap_session& s, ofstream& o, const char *symbol, const char *deftrue) { o << "\t"; if (s.verbose < 4) o << "@"; if (s.kernel_exports.find(symbol) != s.kernel_exports.end()) o << "echo \"#define " << deftrue << " 1\""; o << ">> $@" << endl; } void output_dual_exportconf(systemtap_session& s, ofstream& o, const char *symbol1, const char *symbol2, const char *deftrue) { o << "\t"; if (s.verbose < 4) o << "@"; if (s.kernel_exports.find(symbol1) != s.kernel_exports.end() && s.kernel_exports.find(symbol2) != s.kernel_exports.end()) o << "echo \"#define " << deftrue << " 1\""; o << ">> $@" << endl; } void output_either_exportconf(systemtap_session& s, ofstream& o, const char *symbol1, const char *symbol2, const char *deftrue) { o << "\t"; if (s.verbose < 4) o << "@"; if (s.kernel_exports.find(symbol1) != s.kernel_exports.end() || s.kernel_exports.find(symbol2) != s.kernel_exports.end()) o << "echo \"#define " << deftrue << " 1\""; o << ">> $@" << endl; } static int compile_dyninst (systemtap_session& s) { const string module = s.tmpdir + "/" + s.module_filename(); vector cmd { "gcc", "--std=gnu99", s.translated_source, "-o", module, "-fvisibility=hidden", "-O2", "-I" + s.runtime_path, "-D__DYNINST__", "-Wall", WERROR, "-Wno-unused", "-Wno-strict-aliasing", "-pthread", "-lrt", "-fPIC", "-shared", }; // BZ855981/948279. Since dyninst/runtime.h includes __sync_* calls, // the compiler may generate different code for it depending on -march. // For example, if the default is i386, we may get references to auxiliary // functions like __sync_add_and_fetch_4, which appear to be defined // nowhere. We hack around this problem thusly: if (s.architecture == "i386") cmd.push_back("-march=i586"); // Need this for scripts where tautologies pass through to generated // code. XXX: but this is gcc-version-dependent cmd.push_back("-Wno-tautological-compare"); for (size_t i = 0; i < s.c_macros.size(); ++i) cmd.push_back("-D" + s.c_macros[i]); if (s.verbose > 3) cmd.insert(cmd.end(), { "-ftime-report", "-Q" }); // Add any custom kbuild flags cmd.insert(cmd.end(), s.kbuildflags.begin(), s.kbuildflags.end()); int rc = stap_system (s.verbose, cmd); if (rc) s.set_try_server (); return rc; } int compile_pass (systemtap_session& s) { if (s.runtime_usermode_p()) return compile_dyninst (s); int rc = uprobes_pass (s); if (rc) { s.set_try_server (); return rc; } // fill in a quick Makefile string makefile_nm = s.tmpdir + "/Makefile"; ofstream o (makefile_nm.c_str()); // Create makefile // Clever hacks copied from vmware modules string superverbose; if (s.verbose > 3) superverbose = "set -x;"; string redirecterrors = "> /dev/null 2>&1"; if (s.verbose > 6) redirecterrors = ""; // Support O= (or KBUILD_OUTPUT) option // but flags= filter was removed from kernel scripts/Kbuild.include mid-2019 o << "_KBUILD_CFLAGS := $(call flags,KBUILD_CFLAGS) $(KBUILD_CFLAGS)" << endl; o << "stap_check_gcc = $(shell " << superverbose << " if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then " << "echo \"$(1)\"; else echo \"$(2)\"; fi)" << endl; o << "CHECK_BUILD := $(CC) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(CPPFLAGS) " << "$(LINUXINCLUDE) $(_KBUILD_CFLAGS) $(CFLAGS_KERNEL) $(EXTRA_CFLAGS) " << "$(CFLAGS) -DKBUILD_BASENAME=\\\"" << s.module_name << "\\\" " << WERROR << " -S -o /dev/null -xc " << endl; o << "stap_check_build = $(shell " << superverbose << " if $(CHECK_BUILD) $(1) " << redirecterrors << " ; then echo \"$(2)\"; else echo \"$(3)\"; fi)" << endl; o << "SYSTEMTAP_RUNTIME = \"" << s.runtime_path << "\"" << endl; // "autoconf" options go here // RHBZ 543529: early rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules o << "CONFIG_MODULE_SIG := n" << endl; string module_cflags = "EXTRA_CFLAGS"; o << module_cflags << " :=" << endl; // XXX: This gruesome hack is needed on some kernels built with separate O=directory, // where files like 2.6.27 x86's asm/mach-*/mach_mpspec.h are not found on the cpp path. // This could be a bug in arch/x86/Makefile that names // mflags-y += -Iinclude/asm-x86/mach-default // but that path does not exist in an O= build tree. o << module_cflags << " += -Iinclude2/asm/mach-default" << endl; o << module_cflags << " += -I" + s.kernel_build_tree << endl; if (s.kernel_source_tree != "") o << module_cflags << " += -I" + s.kernel_source_tree << endl; for (unsigned i = 0; i < s.kernel_extra_cflags.size(); i++) o << module_cflags << " += " + s.kernel_extra_cflags[i] << endl; // NB: don't try // o << module_cflags << " += -Iusr/include" << endl; // since such headers are cleansed of _KERNEL_ pieces that we need o << "STAPCONF_HEADER := " << s.tmpdir << "/" << s.stapconf_name << endl; o << "$(STAPCONF_HEADER):" << endl; o << "\t@> $@" << endl; output_autoconf(s, o, "autoconf-hrtimer-rel.c", "STAPCONF_HRTIMER_REL", NULL); output_exportconf(s, o, "hrtimer_get_res", "STAPCONF_HRTIMER_GET_RES"); output_autoconf(s, o, "autoconf-generated-compile.c", "STAPCONF_GENERATED_COMPILE", NULL); output_autoconf(s, o, "autoconf-hrtimer-getset-expires.c", "STAPCONF_HRTIMER_GETSET_EXPIRES", NULL); output_autoconf(s, o, "autoconf-inode-private.c", "STAPCONF_INODE_PRIVATE", NULL); output_autoconf(s, o, "autoconf-inode-rwsem.c", "STAPCONF_INODE_RWSEM", NULL); output_autoconf(s, o, "autoconf-constant-tsc.c", "STAPCONF_CONSTANT_TSC", NULL); output_autoconf(s, o, "autoconf-ktime-get-real.c", "STAPCONF_KTIME_GET_REAL", NULL); output_exportconf(s, o, "ktime_get_real_fast_ns", "STAPCONF_KTIME_GET_REAL_FAST_NS"); output_autoconf(s, o, "autoconf-x86-uniregs.c", "STAPCONF_X86_UNIREGS", NULL); output_autoconf(s, o, "autoconf-nameidata.c", "STAPCONF_NAMEIDATA_CLEANUP", NULL); output_dual_exportconf(s, o, "unregister_kprobes", "unregister_kretprobes", "STAPCONF_UNREGISTER_KPROBES"); output_autoconf(s, o, "autoconf-kprobe-symbol-name.c", "STAPCONF_KPROBE_SYMBOL_NAME", NULL); output_autoconf(s, o, "autoconf-real-parent.c", "STAPCONF_REAL_PARENT", NULL); output_autoconf(s, o, "autoconf-uaccess.c", "STAPCONF_LINUX_UACCESS_H", NULL); output_autoconf(s, o, "autoconf-oneachcpu-retry.c", "STAPCONF_ONEACHCPU_RETRY", NULL); output_autoconf(s, o, "autoconf-dpath-path.c", "STAPCONF_DPATH_PATH", NULL); output_exportconf(s, o, "synchronize_kernel", "STAPCONF_SYNCHRONIZE_KERNEL"); output_exportconf(s, o, "synchronize_rcu", "STAPCONF_SYNCHRONIZE_RCU"); output_exportconf(s, o, "synchronize_sched", "STAPCONF_SYNCHRONIZE_SCHED"); output_autoconf(s, o, "autoconf-task-uid.c", "STAPCONF_TASK_UID", NULL); output_autoconf(s, o, "autoconf-from_kuid_munged.c", "STAPCONF_FROM_KUID_MUNGED", NULL); output_exportconf(s, o, "get_mm_exe_file", "STAPCONF_GET_MM_EXE_FILE"); output_dual_exportconf(s, o, "alloc_vm_area", "free_vm_area", "STAPCONF_VM_AREA"); output_autoconf(s, o, "autoconf-procfs-owner.c", "STAPCONF_PROCFS_OWNER", NULL); output_autoconf(s, o, "autoconf-alloc-percpu-align.c", "STAPCONF_ALLOC_PERCPU_ALIGN", NULL); output_autoconf(s, o, "autoconf-x86-fs.c", "STAPCONF_X86_FS", NULL); output_autoconf(s, o, "autoconf-x86-xfs.c", "STAPCONF_X86_XFS", NULL); output_autoconf(s, o, "autoconf-x86-gs.c", "STAPCONF_X86_GS", NULL); output_autoconf(s, o, "autoconf-grsecurity.c", "STAPCONF_GRSECURITY", NULL); output_autoconf(s, o, "autoconf-trace-printk.c", "STAPCONF_TRACE_PRINTK", NULL); output_autoconf(s, o, "autoconf-regset.c", "STAPCONF_REGSET", NULL); output_autoconf(s, o, "autoconf-utrace-regset.c", "STAPCONF_UTRACE_REGSET", NULL); output_autoconf(s, o, "autoconf-uprobe-get-pc.c", "STAPCONF_UPROBE_GET_PC", NULL); output_autoconf(s, o, "autoconf-hlist-4args.c", "STAPCONF_HLIST_4ARGS", NULL); output_exportconf(s, o, "tsc_khz", "STAPCONF_TSC_KHZ"); output_exportconf(s, o, "cpu_khz", "STAPCONF_CPU_KHZ"); output_exportconf(s, o, "__module_text_address", "STAPCONF_MODULE_TEXT_ADDRESS"); output_exportconf(s, o, "add_timer_on", "STAPCONF_ADD_TIMER_ON"); output_dual_exportconf(s, o, "probe_kernel_read", "probe_kernel_write", "STAPCONF_PROBE_KERNEL"); output_autoconf(s, o, "autoconf-hw_breakpoint_context.c", "STAPCONF_HW_BREAKPOINT_CONTEXT", NULL); output_exportconf(s, o, "save_stack_trace_regs", "STAPCONF_SAVE_STACK_TRACE_REGS_EXPORTED"); output_autoconf(s, o, "autoconf-save-stack-trace.c", "STAPCONF_KERNEL_STACKTRACE", NULL); output_autoconf(s, o, "autoconf-save-stack-trace-no-bp.c", "STAPCONF_KERNEL_STACKTRACE_NO_BP", NULL); output_autoconf(s, o, "autoconf-unwind-stack-trace.c", "STAPCONF_KERNEL_UNWIND_STACK", NULL); output_autoconf(s, o, "autoconf-asm-syscall.c", "STAPCONF_ASM_SYSCALL_H", NULL); output_autoconf(s, o, "autoconf-syscall_get_args_3args.c", "STAPCONF_SYSCALL_GET_ARGS_3ARGS", NULL); output_autoconf(s, o, "autoconf-ring_buffer-flags.c", "STAPCONF_RING_BUFFER_FLAGS", NULL); output_autoconf(s, o, "autoconf-ring_buffer_lost_events.c", "STAPCONF_RING_BUFFER_LOST_EVENTS", NULL); output_autoconf(s, o, "autoconf-ring_buffer_read_prepare.c", "STAPCONF_RING_BUFFER_READ_PREPARE", NULL); output_autoconf(s, o, "autoconf-kallsyms-on-each-symbol.c", "STAPCONF_KALLSYMS_ON_EACH_SYMBOL", NULL); output_autoconf(s, o, "autoconf-walk-stack.c", "STAPCONF_WALK_STACK", NULL); output_autoconf(s, o, "autoconf-stacktrace_ops-warning.c", "STAPCONF_STACKTRACE_OPS_WARNING", NULL); output_autoconf(s, o, "autoconf-stacktrace_ops-int-address.c", "STAPCONF_STACKTRACE_OPS_INT_ADDRESS", NULL); output_autoconf(s, o, "autoconf-mm-context-vdso.c", "STAPCONF_MM_CONTEXT_VDSO", NULL); output_autoconf(s, o, "autoconf-mm-context-vdso-base.c", "STAPCONF_MM_CONTEXT_VDSO_BASE", NULL); output_autoconf(s, o, "autoconf-blk-types.c", "STAPCONF_BLK_TYPES", NULL); output_autoconf(s, o, "autoconf-perf-structpid.c", "STAPCONF_PERF_STRUCTPID", NULL); output_autoconf(s, o, "perf_event_counter_context.c", "STAPCONF_PERF_COUNTER_CONTEXT", NULL); output_autoconf(s, o, "perf_probe_handler_nmi.c", "STAPCONF_PERF_HANDLER_NMI", NULL); output_exportconf(s, o, "path_lookup", "STAPCONF_PATH_LOOKUP"); output_exportconf(s, o, "kern_path_parent", "STAPCONF_KERN_PATH_PARENT"); output_exportconf(s, o, "vfs_path_lookup", "STAPCONF_VFS_PATH_LOOKUP"); output_exportconf(s, o, "kern_path", "STAPCONF_KERN_PATH"); output_exportconf(s, o, "proc_create_data", "STAPCONF_PROC_CREATE_DATA"); output_exportconf(s, o, "PDE_DATA", "STAPCONF_PDE_DATA"); output_autoconf(s, o, "autoconf-module-sect-attrs.c", "STAPCONF_MODULE_SECT_ATTRS", NULL); output_autoconf(s, o, "autoconf-utrace-via-tracepoints.c", "STAPCONF_UTRACE_VIA_TRACEPOINTS", NULL); output_autoconf(s, o, "autoconf-task_work-struct.c", "STAPCONF_TASK_WORK_STRUCT", NULL); output_autoconf(s, o, "autoconf-vm-area-pte.c", "STAPCONF_VM_AREA_PTE", NULL); output_autoconf(s, o, "autoconf-relay-umode_t.c", "STAPCONF_RELAY_UMODE_T", NULL); output_autoconf(s, o, "autoconf-relay_buf-per_cpu_ptr.c", "STAPCONF_RELAY_BUF_PER_CPU_PTR", NULL); output_autoconf(s, o, "autoconf-fs_supers-hlist.c", "STAPCONF_FS_SUPERS_HLIST", NULL); output_autoconf(s, o, "autoconf-compat_sigaction.c", "STAPCONF_COMPAT_SIGACTION", NULL); output_autoconf(s, o, "autoconf-netfilter.c", "STAPCONF_NETFILTER_V313", NULL); output_autoconf(s, o, "autoconf-netfilter-313b.c", "STAPCONF_NETFILTER_V313B", NULL); output_autoconf(s, o, "autoconf-netfilter-4_1.c", "STAPCONF_NETFILTER_V41", NULL); output_autoconf(s, o, "autoconf-netfilter-4_4.c", "STAPCONF_NETFILTER_V44", NULL); output_autoconf(s, o, "autoconf-smpcall-5args.c", "STAPCONF_SMPCALL_5ARGS", NULL); output_autoconf(s, o, "autoconf-smpcall-4args.c", "STAPCONF_SMPCALL_4ARGS", NULL); output_autoconf(s, o, "autoconf-access_ok_2args.c", "STAPCONF_ACCESS_OK_2ARGS", NULL); output_autoconf(s, o, "autoconf-uapi-mount.c", "STAPCONF_UAPI_LINUX_MOUNT_H", NULL); output_autoconf(s, o, "autoconf-time32.c", "STAPCONF_TIME32_H", NULL); output_autoconf(s, o, "autoconf-compat-utimbuf.c", "STAPCONF_COMPAT_UTIMBUF", NULL); // used by tapset/timestamp_monotonic.stp output_autoconf(s, o, "autoconf-cpu-clock.c", "STAPCONF_CPU_CLOCK", NULL); output_autoconf(s, o, "autoconf-local-clock.c", "STAPCONF_LOCAL_CLOCK", NULL); // used by runtime/uprobe-inode.c output_either_exportconf(s, o, "uprobe_register", "register_uprobe", "STAPCONF_UPROBE_REGISTER_EXPORTED"); output_either_exportconf(s, o, "uprobe_unregister", "unregister_uprobe", "STAPCONF_UPROBE_UNREGISTER_EXPORTED"); output_autoconf(s, o, "autoconf-old-inode-uprobes.c", "STAPCONF_OLD_INODE_UPROBES", NULL); output_autoconf(s, o, "autoconf-inode-uretprobes.c", "STAPCONF_INODE_URETPROBES", NULL); // used by tapsets.cxx inode uprobe generated code output_exportconf(s, o, "uprobe_get_swbp_addr", "STAPCONF_UPROBE_GET_SWBP_ADDR_EXPORTED"); // used by runtime/loc2c-runtime.h output_exportconf(s, o, "task_user_regset_view", "STAPCONF_TASK_USER_REGSET_VIEW_EXPORTED"); // used by runtime/stp_utrace.c output_exportconf(s, o, "task_work_add", "STAPCONF_TASK_WORK_ADD_EXPORTED"); output_exportconf(s, o, "task_work_cancel", "STAPCONF_TASK_WORK_CANCEL_EXPORTED"); output_exportconf(s, o, "wake_up_state", "STAPCONF_WAKE_UP_STATE_EXPORTED"); output_exportconf(s, o, "try_to_wake_up", "STAPCONF_TRY_TO_WAKE_UP_EXPORTED"); output_exportconf(s, o, "signal_wake_up_state", "STAPCONF_SIGNAL_WAKE_UP_STATE_EXPORTED"); output_exportconf(s, o, "signal_wake_up", "STAPCONF_SIGNAL_WAKE_UP_EXPORTED"); output_exportconf(s, o, "__lock_task_sighand", "STAPCONF___LOCK_TASK_SIGHAND_EXPORTED"); output_autoconf(s, o, "autoconf-pagefault_disable.c", "STAPCONF_PAGEFAULT_DISABLE", NULL); output_exportconf(s, o, "kallsyms_lookup_name", "STAPCONF_KALLSYMS"); output_autoconf(s, o, "autoconf-uidgid.c", "STAPCONF_LINUX_UIDGID_H", NULL); output_exportconf(s, o, "sigset_from_compat", "STAPCONF_SIGSET_FROM_COMPAT_EXPORTED"); output_exportconf(s, o, "vzalloc", "STAPCONF_VZALLOC"); output_exportconf(s, o, "vzalloc_node", "STAPCONF_VZALLOC_NODE"); output_exportconf(s, o, "vmalloc_node", "STAPCONF_VMALLOC_NODE"); // RHBZ1233912 - s390 temporary workaround for non-atomic udelay() output_exportconf(s, o, "udelay_simple", "STAPCONF_UDELAY_SIMPLE_EXPORTED"); output_autoconf(s, o, "autoconf-udelay_simple.c", "STAPCONF_UDELAY_SIMPLE", NULL); output_autoconf(s, o, "autoconf-tracepoint-strings.c", "STAPCONF_TRACEPOINT_STRINGS", NULL); output_autoconf(s, o, "autoconf-timerfd.c", "STAPCONF_TIMERFD_H", NULL); output_autoconf(s, o, "autoconf-module_layout.c", "STAPCONF_MODULE_LAYOUT", NULL); output_autoconf(s, o, "autoconf-mod_kallsyms.c", "STAPCONF_MOD_KALLSYMS", NULL); output_exportconf(s, o, "get_user_pages_remote", "STAPCONF_GET_USER_PAGES_REMOTE"); output_autoconf(s, o, "autoconf-get_user_pages_remote-flags.c", "STAPCONF_GET_USER_PAGES_REMOTE_FLAGS", NULL); output_autoconf(s, o, "autoconf-get_user_pages_remote-flags_locked.c", "STAPCONF_GET_USER_PAGES_REMOTE_FLAGS_LOCKED", NULL); output_autoconf(s, o, "autoconf-get_user_pages-flags.c", "STAPCONF_GET_USER_PAGES_FLAGS", NULL); output_autoconf(s, o, "autoconf-bio-bi_opf.c", "STAPCONF_BIO_BI_OPF", NULL); output_autoconf(s, o, "autoconf-linux-sched_headers.c", "STAPCONF_LINUX_SCHED_HEADERS", NULL); output_autoconf(s, o, "autoconf-stack-trace-save-regs.c", "STAPCONF_STACK_TRACE_SAVE_REGS", NULL); // used by runtime/linux/netfilter.c output_exportconf(s, o, "nf_register_hook", "STAPCONF_NF_REGISTER_HOOK"); // used by tapset/linux/ioblock.stp output_exportconf(s, o, "disk_get_part", "STAPCONF_DISK_GET_PART"); o << module_cflags << " += -include $(STAPCONF_HEADER)" << endl; for (unsigned i=0; i 3) o << "EXTRA_CFLAGS += -ftime-report -Q" << endl; // XXX: unfortunately, -save-temps can't work since linux kbuild cwd // is not writable. // // if (s.keep_tmpdir) // o << "CFLAGS += -fverbose-asm -save-temps" << endl; // Kernels can be compiled with CONFIG_CC_OPTIMIZE_FOR_SIZE to select // -Os, otherwise -O2 is the default. o << "EXTRA_CFLAGS += -freorder-blocks" << endl; // improve on -Os // Generate eh_frame for self-backtracing o << "EXTRA_CFLAGS += -fasynchronous-unwind-tables" << endl; // We used to allow the user to override default optimization when so // requested by adding a -O[0123s] so they could determine the // time/space/speed tradeoffs themselves, but we cannot guantantee that // the (un)optimized code actually compiles and/or generates functional // code, so we had to remove it. // o << "EXTRA_CFLAGS += " << s.gcc_flags << endl; // Add -O[0123s] // o << "CFLAGS += -fno-unit-at-a-time" << endl; // 256^W512 bytes should be enough for anybody // XXX this doesn't validate varargs, per gcc bug #41633 o << "EXTRA_CFLAGS += $(call cc-option,-Wframe-larger-than=512)" << endl; // gcc 5.0.0-0.13.fc23 ipa-icf seems to consume gigacpu on stap-generated code o << "EXTRA_CFLAGS += $(call cc-option,-fno-ipa-icf)" << endl; // Assumes linux 2.6 kbuild o << "EXTRA_CFLAGS += -Wno-unused $(call cc-option,-Wno-tautological-compare) " << WERROR << endl; #if CHECK_POINTER_ARITH_PR5947 o << "EXTRA_CFLAGS += -Wpointer-arith" << endl; #endif // If we've got a reasonable runtime path from the user, we'll just // do '-IDIR'. If there are any sneaky/odd characters in it, we'll // have to quote it, like '-I"DIR"'. if (s.runtime_path.find_first_not_of(PATH_ALLOWED_CHARS, 0) == string::npos) o << "EXTRA_CFLAGS += -I" << s.runtime_path << endl; else { s.print_warning("quoting runtime path in the module Makefile."); o << "EXTRA_CFLAGS += -I\"" << s.runtime_path << "\"" << endl; } // XXX: this may help ppc toc overflow // o << "CFLAGS := $(subst -Os,-O2,$(CFLAGS)) -fminimal-toc" << endl; o << "obj-m := " << s.module_name << ".o" << endl; // print out all the auxiliary source (->object) file names o << s.module_name << "-y := "; for (unsigned i=0; itrailer_p) continue; string srcname = s.auxiliary_outputs[i]->filename; assert (srcname != "" && srcname.rfind('/') != string::npos); string objname = srcname.substr(srcname.rfind('/')+1); // basename assert (objname != "" && objname[objname.size()-1] == 'c'); objname[objname.size()-1] = 'o'; // now objname o << " " + objname; } // and once again, for the translated_source file. It can't simply // be named MODULENAME.c, since kbuild doesn't allow a foo.ko file // consisting of multiple .o's to have foo.o/foo.c as a source. // (It uses ld -r -o foo.o EACH.o EACH.o). { string srcname = s.translated_source; assert (srcname != "" && srcname.rfind('/') != string::npos); string objname = srcname.substr(srcname.rfind('/')+1); // basename assert (objname != "" && objname[objname.size()-1] == 'c'); objname[objname.size()-1] = 'o'; // now objname o << " " + objname; } // and once again, for the trailer type auxiliary outputs. for (unsigned i=0; itrailer_p) continue; string srcname = s.auxiliary_outputs[i]->filename; assert (srcname != "" && srcname.rfind('/') != string::npos); string objname = srcname.substr(srcname.rfind('/')+1); // basename assert (objname != "" && objname[objname.size()-1] == 'c'); objname[objname.size()-1] = 'o'; // now objname o << " " + objname; } o << endl; // add all stapconf dependencies string translated = s.translated_source; translated[translated.size()-1] = 'o'; o << translated << ": $(STAPCONF_HEADER)" << endl; translated[translated.size()-1] = 'i'; o << translated << ": $(STAPCONF_HEADER)" << endl; for (unsigned i=0; ifilename; translated[translated.size()-1] = 'o'; o << translated << ": $(STAPCONF_HEADER)" << endl; } o.close (); // Generate module directory pathname and make sure it exists. string module_dir = s.kernel_build_tree; string module_dir_makefile = module_dir + "/Makefile"; struct stat st; rc = stat(module_dir_makefile.c_str(), &st); if (rc != 0) { clog << _F("Checking \" %s \" failed with error: %s\nEnsure kernel development headers & makefiles are installed.", module_dir_makefile.c_str(), strerror(errno)) << endl; s.set_try_server (); return rc; } // Run make vector make_cmd = make_make_cmd(s, s.tmpdir); if (s.keep_tmpdir) { string E_source = s.translated_source.substr(s.translated_source.find_last_of("/")+1); E_source.at(E_source.length() - 1) = 'i'; // overwrite the last character make_cmd.push_back(E_source); } rc = run_make_cmd(s, make_cmd); if (rc) s.set_try_server (); return rc; } /* * If uprobes was built as part of the kernel build (either built-in * or as a module), the uprobes exports should show up. This is to be * as distinct from the stap-built uprobes.ko from the runtime. */ static bool kernel_built_uprobes (systemtap_session& s) { if (s.runtime_usermode_p()) return true; // sort of, via dyninst // see also tapsets.cxx:kernel_supports_inode_uprobes() return ((s.kernel_config["CONFIG_ARCH_SUPPORTS_UPROBES"] == "y" && s.kernel_config["CONFIG_UPROBES"] == "y") || (s.kernel_exports.find("unregister_uprobe") != s.kernel_exports.end())); } static int make_uprobes (systemtap_session& s) { if (s.verbose > 1) clog << _("Pass 4, preamble: (re)building SystemTap's version of uprobes.") << endl; // create a subdirectory for the uprobes module string dir(s.tmpdir + "/uprobes"); if (create_dir(dir.c_str()) != 0) { s.print_warning("failed to create directory for build uprobes."); s.set_try_server (); return 1; } // create a simple Makefile string makefile(dir + "/Makefile"); ofstream omf(makefile.c_str()); omf << "obj-m := uprobes.o" << endl; // RHBZ 655231: later rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules omf << "CONFIG_MODULE_SIG := n" << endl; omf.close(); // create a simple #include-chained source file string runtimesourcefile(s.runtime_path + "/linux/uprobes/uprobes.c"); string sourcefile(dir + "/uprobes.c"); ofstream osrc(sourcefile.c_str()); osrc << "#include \"" << runtimesourcefile << "\"" << endl; // pass --modinfo k=v to uprobes build too for (unsigned i = 0; i < s.modinfos.size(); i++) { const string& mi = s.modinfos[i]; size_t loc = mi.find('='); string tag = mi.substr (0, loc); string value = mi.substr (loc+1); osrc << "MODULE_INFO(" << tag << "," << lex_cast_qstring(value) << ");" << endl; } osrc.close(); // make the module vector make_cmd = make_make_cmd(s, dir); int rc = run_make_cmd(s, make_cmd); if (!rc && !copy_file(dir + "/Module.symvers", s.tmpdir + "/Module.symvers")) rc = -1; if (s.verbose > 1) clog << _("uprobes rebuild exit code: ") << rc << endl; if (rc) s.set_try_server (); else s.uprobes_path = dir + "/uprobes.ko"; return rc; } static bool get_cached_uprobes(systemtap_session& s) { s.uprobes_hash = s.use_cache ? find_uprobes_hash(s) : ""; if (!s.uprobes_hash.empty()) { // NB: We always put uprobes.ko in its own directory, especially so // stap-serverd can more easily locate it. string dir(s.tmpdir + "/uprobes"); if (create_dir(dir.c_str()) != 0) return false; string cacheko = s.uprobes_hash + ".ko"; string tmpko = dir + "/uprobes.ko"; // The symvers file still needs to go in the script module's directory. string cachesyms = s.uprobes_hash + ".symvers"; string tmpsyms = s.tmpdir + "/Module.symvers"; if (get_file_size(cacheko) > 0 && copy_file(cacheko, tmpko) && get_file_size(cachesyms) > 0 && copy_file(cachesyms, tmpsyms)) { s.uprobes_path = tmpko; return true; } } return false; } static void set_cached_uprobes(systemtap_session& s) { if (s.use_cache && !s.uprobes_hash.empty()) { string cacheko = s.uprobes_hash + ".ko"; string tmpko = s.tmpdir + "/uprobes/uprobes.ko"; copy_file(tmpko, cacheko); string cachesyms = s.uprobes_hash + ".symvers"; string tmpsyms = s.tmpdir + "/uprobes/Module.symvers"; copy_file(tmpsyms, cachesyms); } } int uprobes_pass (systemtap_session& s) { if (!s.need_uprobes || kernel_built_uprobes(s)) return 0; if (s.kernel_config["CONFIG_UTRACE"] != string("y")) { clog << _("user-space process-tracking facilities not available [man error::process-tracking]") << endl; s.set_try_server (); return 1; } /* * We need to use the version of uprobes that comes with SystemTap. Try to * get it from the cache first. If not found, build it and try to save it to * the cache for future reuse. */ int rc = 0; if (!get_cached_uprobes(s)) { rc = make_uprobes(s); if (!rc) set_cached_uprobes(s); } if (rc) s.set_try_server (); return rc; } static vector make_dyninst_run_command (systemtap_session& s, const string& remotedir, const string&) { vector cmd { getenv("SYSTEMTAP_STAPDYN") ?: BINDIR "/stapdyn" }; // use slightly less verbosity if (s.verbose > 0) cmd.insert(cmd.end(), s.verbose - 1, "-v"); if (s.suppress_warnings) cmd.push_back("-w"); if (!s.cmd.empty()) cmd.insert(cmd.end(), { "-c", s.cmd }); if (s.target_pid) cmd.insert(cmd.end(), { "-x", lex_cast(s.target_pid) }); if (!s.output_file.empty()) cmd.insert(cmd.end(), { "-o", s.output_file }); if (s.color_mode != s.color_auto) { auto mode = s.color_mode == s.color_always ? "always" : "never"; cmd.insert(cmd.end(), { "-C", mode }); } cmd.push_back((remotedir.empty() ? s.tmpdir : remotedir) + "/" + s.module_filename()); // add module arguments cmd.insert(cmd.end(), s.globalopts.begin(), s.globalopts.end()); return cmd; } static vector make_kernel_run_command (systemtap_session& s, const string& remotedir, const string& version) { // for now, just spawn staprun vector cmd { getenv("SYSTEMTAP_STAPRUN") ?: BINDIR "/staprun" }; // use slightly less verbosity if (s.verbose > 0) cmd.insert(cmd.end(), s.verbose - 1, "-v"); if (s.suppress_warnings) cmd.push_back("-w"); if (!s.output_file.empty()) cmd.insert(cmd.end(), { "-o", s.output_file }); if (!s.cmd.empty()) cmd.insert(cmd.end(), { "-c", s.cmd }); if (s.target_pid) cmd.insert(cmd.end(), { "-t", lex_cast(s.target_pid) }); if (s.target_namespaces_pid) cmd.insert(cmd.end(), { "-N", lex_cast(s.target_namespaces_pid) }); if (s.buffer_size) cmd.insert(cmd.end(), { "-b", lex_cast(s.buffer_size) }); if (s.read_stdin) cmd.insert(cmd.end(), "-i"); if (s.need_uprobes && !kernel_built_uprobes(s)) { string opt_u = "-u"; if (!s.uprobes_path.empty() && strverscmp("1.4", version.c_str()) <= 0) { if (remotedir.empty()) opt_u.append(s.uprobes_path); else opt_u.append(remotedir + "/" + basename(s.uprobes_path.c_str())); } cmd.push_back(opt_u); } if (s.load_only) cmd.push_back(s.output_file.empty() ? "-L" : "-D"); // Note that if this system requires signed modules, we can't rename // it after it has been signed. if (!s.modname_given && (strverscmp("1.6", version.c_str()) <= 0) && s.mok_fingerprints.empty()) cmd.push_back("-R"); if (!s.size_option.empty()) cmd.insert(cmd.end(), { "-S", s.size_option }); if (s.color_mode != s.color_auto) { auto mode = s.color_mode == s.color_always ? "always" : "never"; cmd.insert(cmd.end(), { "-C", mode }); } if (s.monitor) cmd.insert(cmd.end(), { "-M", lex_cast(s.monitor_interval) }); cmd.push_back((remotedir.empty() ? s.tmpdir : remotedir) + "/" + s.module_filename()); // add module arguments cmd.insert(cmd.end(), s.globalopts.begin(), s.globalopts.end()); return cmd; } static vector make_bpf_run_command (systemtap_session& s, const string& remotedir, const string&) { vector cmd; cmd.push_back(getenv("SYSTEMTAP_STAPBPF") ?: BINDIR "/stapbpf"); for (unsigned i=1; i make_run_command (systemtap_session& s, const string& remotedir, const string& version) { switch (s.runtime_mode) { case systemtap_session::kernel_runtime: return make_kernel_run_command (s, remotedir, version); case systemtap_session::dyninst_runtime: return make_dyninst_run_command(s, remotedir, version); case systemtap_session::bpf_runtime: return make_bpf_run_command(s, remotedir, version); default: abort(); } } // Build tiny kernel modules to query tracepoints. // Given a (header-file -> test-contents) map, compile them ASAP, and return // a (header-file -> obj-filename) map. map make_tracequeries(systemtap_session& s, const map& contents) { static unsigned tick = 0; string basename("tracequery_kmod_" + lex_cast(++tick)); map objs; // create a subdirectory for the module string dir(s.tmpdir + "/" + basename); if (create_dir(dir.c_str()) != 0) { s.print_warning("failed to create directory for querying tracepoints."); s.set_try_server (); return objs; } // create a simple Makefile string makefile(dir + "/Makefile"); ofstream omf(makefile.c_str()); // force debuginfo generation, and relax implicit functions omf << "EXTRA_CFLAGS := -g -Wno-implicit-function-declaration " << WERROR << endl; // RHBZ 655231: later rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules omf << "CONFIG_MODULE_SIG := n" << endl; // PR23488: need to override this kconfig, else we get no useful struct decls omf << "CONFIG_DEBUG_INFO_REDUCED := " << endl; // PR18389: disable GCC's Identical Code Folding, since the stubs may look identical omf << "EXTRA_CFLAGS += $(call cc-option,-fno-ipa-icf)" << endl; omf << "EXTRA_CFLAGS += -I" + s.kernel_build_tree << endl; if (s.kernel_source_tree != "") omf << "EXTRA_CFLAGS += -I" + s.kernel_source_tree << endl; for (unsigned i = 0; i < s.kernel_extra_cflags.size(); i++) omf << "EXTRA_CFLAGS += " + s.kernel_extra_cflags[i] << endl; omf << "obj-m := " << endl; // write out each header-specific source file into a separate file for (map::const_iterator it = contents.begin(); it != contents.end(); it++) { string sbasename = basename + "_" + lex_cast(++tick); // suffixed // write out source code string srcname = dir + "/" + sbasename + ".c"; string src = it->second; ofstream osrc(srcname.c_str()); osrc << src; osrc.close(); if (s.verbose > 2) clog << _F("Processing tracepoint header %s with query %s", it->first.c_str(), srcname.c_str()) << endl; // arrange to build it omf << "obj-m += " + sbasename + ".o" << endl; // NB: without prefix objs[it->first] = dir + "/" + sbasename + ".o"; } omf.close(); // make the module vector make_cmd = make_make_objs_cmd(s, dir); make_cmd.push_back ("-i"); // ignore errors, give rc 0 even in case of tracepoint header nits bool quiet = (s.verbose < 4); int rc = run_make_cmd(s, make_cmd, quiet, quiet); if (rc) s.set_try_server (); // Sometimes we fail a tracequery due to PR9993 / PR11649 type // kernel trace header problems. In this case, due to PR12729, we // used to get a lovely "Warning: make exited with status: 2" but no // other useful diagnostic. -vvvv would let a user see what's up, // but the user can't fix the problem even with that. return objs; } // Build a tiny kernel module to query type information static int make_typequery_kmod(systemtap_session& s, const vector& headers, string& name) { static unsigned tick = 0; string basename("typequery_kmod_" + lex_cast(++tick)); // create a subdirectory for the module string dir(s.tmpdir + "/" + basename); if (create_dir(dir.c_str()) != 0) { s.print_warning("failed to create directory for querying types."); s.set_try_server (); return 1; } name = dir + "/" + basename + ".ko"; // create a simple Makefile string makefile(dir + "/Makefile"); ofstream omf(makefile.c_str()); omf << "EXTRA_CFLAGS := -g -fno-eliminate-unused-debug-types" << endl; // RHBZ 655231: later rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules omf << "CONFIG_MODULE_SIG := n" << endl; // PR23488: need to override this kconfig, else we get no useful struct decls omf << "CONFIG_DEBUG_INFO_REDUCED := " << endl; // NB: We use -include instead of #include because that gives us more power. // Using #include searches relative to the source's path, which in this case // is /tmp/..., so that's not helpful. Using -include will search relative // to the cwd, which will be the kernel build root. This means if you have a // full kernel build tree, it's possible to get at types that aren't in the // normal include path, e.g.: // @cast(foo, "bsd_acct_struct", "kernel")->... omf << "CFLAGS_" << basename << ".o :="; for (size_t i = 0; i < headers.size(); ++i) omf << " -include " << lex_cast_qstring(headers[i]); // XXX right quoting? omf << endl; omf << "obj-m := " + basename + ".o" << endl; omf.close(); // create our empty source file string source(dir + "/" + basename + ".c"); ofstream osrc(source.c_str()); osrc.close(); // make the module vector make_cmd = make_make_cmd(s, dir); bool quiet = (s.verbose < 4); int rc = run_make_cmd(s, make_cmd, quiet, quiet); if (rc) s.set_try_server (); return rc; } // Build a tiny user module to query type information static int make_typequery_umod(systemtap_session& s, const vector& headers, string& name) { static unsigned tick = 0; name = s.tmpdir + "/typequery_umod_" + lex_cast(++tick) + ".so"; // make the module // // NB: As with kmod, using -include makes relative paths more useful. The // cwd in this case will be the cwd of stap itself though, which may be // trickier to deal with. It might be better to "cd `dirname $script`" // first... vector cmd { "gcc", "-shared", "-g", "-fno-eliminate-unused-debug-types", "-xc", "/dev/null", "-o", name, }; for (size_t i = 0; i < headers.size(); ++i) cmd.insert(cmd.end(), { "-include", headers[i] }); bool quiet = (s.verbose < 4); int rc = stap_system (s.verbose, cmd, quiet, quiet); if (rc) s.set_try_server (); return rc; } int make_typequery(systemtap_session& s, string& module) { int rc; string new_module; vector headers; bool kernel = startswith(module, "kernel"); for (size_t end, i = kernel ? 6 : 0; i < module.size(); i = end + 1) { if (module[i] != '<') return -1; end = module.find('>', ++i); if (end == string::npos) return -1; string header = module.substr(i, end - i); vector matches; if (regexp_match(header, "^[a-zA-Z0-9/_.+-]+$", matches)) s.print_warning("skipping malformed @cast header \""+ header + "\""); else headers.push_back(header); } if (headers.empty()) return -1; if (kernel) rc = make_typequery_kmod(s, headers, new_module); else rc = make_typequery_umod(s, headers, new_module); if (!rc) module = new_module; return rc; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/buildrun.h000066400000000000000000000016251356460210500154130ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2005 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BUILDRUN_H #define BUILDRUN_H #include "elaborate.h" int compile_pass (systemtap_session& s); int uprobes_pass (systemtap_session& s); std::vector make_run_command (systemtap_session& s, const std::string& remotedir="", const std::string& version=VERSION); std::map make_tracequeries(systemtap_session& s, const std::map& contents); int make_typequery(systemtap_session& s, std::string& module); #endif // BUILDRUN_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/cache.cxx000066400000000000000000000316261356460210500152110ustar00rootroot00000000000000// systemtap cache manager // Copyright (C) 2006-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "session.h" #include "cache.h" #include "util.h" #include "stap-probe.h" #include #include #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include } using namespace std; #define SYSTEMTAP_CACHE_MAX_FILENAME "cache_mb_limit" #define SYSTEMTAP_CACHE_DEFAULT_MB 256 #define SYSTEMTAP_CACHE_CLEAN_INTERVAL_FILENAME "cache_clean_interval_s" #define SYSTEMTAP_CACHE_CLEAN_DEFAULT_INTERVAL_S 300 struct cache_ent_info { vector paths; off_t size; // sum across all paths time_t mtime; // newest of all paths cache_ent_info(const vector& paths); bool operator<(const struct cache_ent_info& other) const; void unlink() const; }; void add_stapconf_to_cache(systemtap_session& s) { bool verbose = s.verbose > 1; string stapconf_src_path = s.tmpdir + "/" + s.stapconf_name; if (!copy_file(stapconf_src_path, s.stapconf_path, verbose)) { // NB: this is not so severe as to prevent reuse of the .ko // already copied. // // s.use_script_cache = false; // return; } } void add_script_to_cache(systemtap_session& s) { bool verbose = s.verbose > 1; // PR10543: clean the cache *before* we try putting something new into it. // We don't want to risk having the brand new contents being erased again. clean_cache(s); string module_src_path = s.tmpdir + "/" + s.module_filename(); PROBE2(stap, cache__add__module, module_src_path.c_str(), s.hash_path.c_str()); if (!copy_file(module_src_path, s.hash_path, verbose)) { s.use_script_cache = false; return; } // Copy the signature file, if any. It is not an error if this fails. if (file_exists (module_src_path + ".sgn")) copy_file(module_src_path + ".sgn", s.hash_path + ".sgn", verbose); string c_dest_path = s.hash_path; if (endswith(c_dest_path, ".ko") || endswith(c_dest_path, ".so")) c_dest_path.resize(c_dest_path.size() - 3); c_dest_path += ".c"; PROBE2(stap, cache__add__source, s.translated_source.c_str(), c_dest_path.c_str()); if (!copy_file(s.translated_source, c_dest_path, verbose)) { // NB: this is not so severe as to prevent reuse of the .ko // already copied. // // s.use_script_cache = false; } } bool get_stapconf_from_cache(systemtap_session& s) { if (s.poison_cache) return false; string stapconf_dest_path = s.tmpdir + "/" + s.stapconf_name; int fd_stapconf; // See if stapconf exists fd_stapconf = open(s.stapconf_path.c_str(), O_RDONLY); if (fd_stapconf == -1) { // It isn't in cache. return false; } // Copy the stapconf header file to the destination if (!get_file_size(fd_stapconf) || !copy_file(s.stapconf_path, stapconf_dest_path)) { close(fd_stapconf); return false; } // We're done with this file handle. close(fd_stapconf); if (s.verbose > 1) clog << _("Pass 4: using cached ") << s.stapconf_path << endl; return true; } bool get_script_from_cache(systemtap_session& s) { if (s.poison_cache) return false; string module_dest_path = s.tmpdir + "/" + s.module_filename(); string c_src_path = s.hash_path; int fd_module, fd_c; if (endswith(c_src_path, ".ko") || endswith(c_src_path, ".so")) c_src_path.resize(c_src_path.size() - 3); c_src_path += ".c"; // See if module exists fd_module = open(s.hash_path.c_str(), O_RDONLY); if (fd_module == -1) { // It isn't in cache. return false; } // See if C file exists. fd_c = open(c_src_path.c_str(), O_RDONLY); if (fd_c == -1) { // The module is there, but the C file isn't. Cleanup and // return. close(fd_module); unlink(s.hash_path.c_str()); return false; } // Check that the files aren't empty, and then // copy the cached C file to the destination if (!get_file_size(fd_module) || !get_file_size(fd_c) || !copy_file(c_src_path, s.translated_source)) { close(fd_module); close(fd_c); return false; } // Copy the cached module to the destination (if needed) if (s.last_pass != 3) { if (!copy_file(s.hash_path, module_dest_path)) { unlink(c_src_path.c_str()); close(fd_module); close(fd_c); return false; } // Copy the module signature file, if any. // It is not an error if this fails. if (file_exists (s.hash_path + ".sgn")) copy_file(s.hash_path + ".sgn", module_dest_path + ".sgn"); } // We're done with these file handles. close(fd_module); close(fd_c); // To preserve semantics (since this will happen if we're not // caching), display the C source if the last pass is 3. if (s.last_pass == 3) { ifstream i (s.translated_source.c_str()); cout << i.rdbuf(); } // And similarly, display probe module name for -p4. if (s.last_pass == 4) cout << s.hash_path << endl; // If everything worked, tell the user. We need to do this here, // since if copying the cached C file works, but copying the cached // module fails, we remove the cached C file and let the C file get // regenerated. // NB: don't use s.verbose here, since we're still in pass-2, // i.e., s.verbose = s.perpass_verbose[1]. if (s.perpass_verbose[2]) clog << _("Pass 3: using cached ") << c_src_path << endl; if (s.perpass_verbose[3] && s.last_pass != 3) clog << _("Pass 4: using cached ") << s.hash_path << endl; PROBE2(stap, cache__get, c_src_path.c_str(), s.hash_path.c_str()); return true; } void clean_cache(systemtap_session& s) { if (s.cache_path != "") { /* Get cache size limit from file in the stap cache dir */ string cache_max_filename = s.cache_path + "/"; cache_max_filename += SYSTEMTAP_CACHE_MAX_FILENAME; ifstream cache_max_file(cache_max_filename.c_str(), ios::in); unsigned long cache_mb_max; if (cache_max_file.is_open()) { cache_max_file >> cache_mb_max; cache_max_file.close(); } else { //file doesnt exist, create a default size ofstream default_cache_max(cache_max_filename.c_str(), ios::out); default_cache_max << SYSTEMTAP_CACHE_DEFAULT_MB << endl; cache_mb_max = SYSTEMTAP_CACHE_DEFAULT_MB; if (s.verbose > 1) clog << _F("Cache limit file %s/%s missing, creating default.", s.cache_path.c_str(), SYSTEMTAP_CACHE_MAX_FILENAME) << endl; } /* Get cache clean interval from file in the stap cache dir */ string cache_clean_interval_filename = s.cache_path + "/"; cache_clean_interval_filename += SYSTEMTAP_CACHE_CLEAN_INTERVAL_FILENAME; ifstream cache_clean_interval_file(cache_clean_interval_filename.c_str(), ios::in); unsigned long cache_clean_interval; if (cache_clean_interval_file.is_open()) { cache_clean_interval_file >> cache_clean_interval; cache_clean_interval_file.close(); } else { //file doesnt exist, create a default interval ofstream default_cache_clean_interval(cache_clean_interval_filename.c_str(), ios::out); default_cache_clean_interval << SYSTEMTAP_CACHE_CLEAN_DEFAULT_INTERVAL_S << endl; cache_clean_interval = SYSTEMTAP_CACHE_CLEAN_DEFAULT_INTERVAL_S; if (s.verbose > 1) clog << _F("Cache clean interval file %s missing, creating default.", cache_clean_interval_filename.c_str())<< endl; } /* Check the cache cleaning interval */ struct stat sb; if(stat(cache_clean_interval_filename.c_str(), &sb) < 0) { const char* e = strerror (errno); cerr << _F("clean_cache stat error: %s", e) << endl; return; } struct timeval current_time; gettimeofday(¤t_time, NULL); if(difftime(current_time.tv_sec, sb.st_mtime) < cache_clean_interval) { //interval not passed, don't continue if (s.verbose > 1) clog << _F("Cache cleaning skipped, interval not reached %ld s / %lu s.", (long) (current_time.tv_sec-sb.st_mtime), cache_clean_interval) << endl; return; } else { //interval reached, continue if (s.verbose > 1) clog << _F("Cleaning cache, interval reached %ld s > %lu s.", (long) (current_time.tv_sec-sb.st_mtime), cache_clean_interval) << endl; } // glob for all files that look like hashes glob_t cache_glob; ostringstream glob_pattern; glob_pattern << s.cache_path << "/*/*"; for (unsigned int i = 0; i < 32; i++) glob_pattern << "[[:xdigit:]]"; glob_pattern << "*"; int rc = glob(glob_pattern.str().c_str(), 0, NULL, &cache_glob); if (rc) { cerr << _F("clean_cache glob error rc=%d", rc) << endl; return; } regex_t hash_len_re; rc = regcomp (&hash_len_re, "([[:xdigit:]]{32}_[[:digit:]]+)", REG_EXTENDED); if (rc) { cerr << _F("clean_cache regcomp error rc=%d", rc) << endl; globfree(&cache_glob); return; } // group all files with the same HASH_LEN map > cache_groups; for (size_t i = 0; i < cache_glob.gl_pathc; i++) { const char* path = cache_glob.gl_pathv[i]; regmatch_t hash_len; rc = regexec(&hash_len_re, path, 1, &hash_len, 0); if (rc || hash_len.rm_so == -1 || hash_len.rm_eo == -1) cache_groups[path].push_back(path); // ungrouped else cache_groups[string(path + hash_len.rm_so, hash_len.rm_eo - hash_len.rm_so)] .push_back(path); } regfree(&hash_len_re); globfree(&cache_glob); // create each cache entry and accumulate the sum off_t cache_size_b = 0; set cache_contents; for (map >::const_iterator it = cache_groups.begin(); it != cache_groups.end(); ++it) { cache_ent_info cur_info(it->second); if (cache_contents.insert(cur_info).second) cache_size_b += cur_info.size; } unsigned long r_cache_size = cache_size_b; vector removed; //unlink .ko and .c until the cache size is under the limit for (set::iterator i = cache_contents.begin(); i != cache_contents.end(); ++i) { if (r_cache_size < cache_mb_max * 1024 * 1024) //convert cache_mb_max to bytes break; //remove this (*i) cache_entry, add to removed list for (size_t j = 0; j < i->paths.size(); ++j) PROBE1(stap, cache__clean, i->paths[j].c_str()); i->unlink(); r_cache_size -= i->size; removed.push_back(&*i); } if (s.verbose > 1 && !removed.empty()) { clog << _("Cache cleaning successful, removed entries: ") << endl; for (size_t i = 0; i < removed.size(); ++i) for (size_t j = 0; j < removed[i]->paths.size(); ++j) clog << " " << removed[i]->paths[j] << endl; } if(utime(cache_clean_interval_filename.c_str(), NULL)<0) { const char* e = strerror (errno); cerr << _F("clean_cache utime error: %s", e) << endl; return; } } else { if (s.verbose > 1) clog << _("Cache cleaning skipped, no cache path.") << endl; } } cache_ent_info::cache_ent_info(const vector& paths): paths(paths), size(0), mtime(0) { struct stat file_info; for (size_t i = 0; i < paths.size(); ++i) if (stat(paths[i].c_str(), &file_info) == 0) { size += file_info.st_size; if (file_info.st_mtime > mtime) mtime = file_info.st_mtime; } } // The ordering here determines the order that // files will be removed from the cache. bool cache_ent_info::operator<(const struct cache_ent_info& other) const { if (mtime != other.mtime) return mtime < other.mtime; if (size != other.size) return size < other.size; if (paths.size() != other.paths.size()) return paths.size() < other.paths.size(); for (size_t i = 0; i < paths.size(); ++i) if (paths[i] != other.paths[i]) return paths[i] < other.paths[i]; return false; } void cache_ent_info::unlink() const { for (size_t i = 0; i < paths.size(); ++i) ::unlink(paths[i].c_str()); } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/cache.h000066400000000000000000000004601356460210500146260ustar00rootroot00000000000000void add_script_to_cache(systemtap_session& s); bool get_script_from_cache(systemtap_session& s); void add_stapconf_to_cache(systemtap_session& s); bool get_stapconf_from_cache(systemtap_session& s); void clean_cache(systemtap_session& s); /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/client-http.cxx000066400000000000000000001240011356460210500163670ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2017, 2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #ifdef HAVE_HTTP_SUPPORT #include "session.h" #include "client-http.h" #include "util.h" #include "staptree.h" #include "elaborate.h" #include "nsscommon.h" #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include #include #include #include #include } using namespace std; class http_client { public: http_client (systemtap_session &s): root(0), s(s), curl(0), retry(0), location(nullptr) { } ~http_client () {if (curl) curl_easy_cleanup(curl); remove_file_or_dir (pem_cert_file.c_str());} json_object *root; std::map header_values; std::vector> env_vars; enum download_type {json_type, file_type}; std::string pem_cert_file; std::string host; enum cert_type {signer_trust, ssl_trust}; bool download (const std::string & url, enum download_type type, bool report_errors, bool cleanup); bool download_pem_cert (const std::string & url, std::string & certs); bool post (const string & url, vector> & request_parameters); void add_file (std::string filename); void add_module (std::string module); void get_header_field (const std::string & data, const std::string & field); static size_t get_data_shim (void *ptr, size_t size, size_t nitems, void *client); static size_t get_file (void *ptr, size_t size, size_t nitems, FILE * stream); static size_t get_header_shim (void *ptr, size_t size, size_t nitems, void *client); std::string get_rpmname (std::string & pathname); void get_buildid (string fname); void get_kernel_buildid (void); long get_response_code (void); bool add_server_cert_to_client (std::string & tmpdir, db_init_types db_init_type); static int trace (CURL *, curl_infotype type, unsigned char *data, size_t size, void *); bool delete_op (const std::string & url); bool check_trust (enum cert_type, vector &specified_servers); private: size_t get_header (void *ptr, size_t size, size_t nitems); size_t get_data (void *ptr, size_t size, size_t nitems); static int process_buildid_shim (Dwfl_Module *dwflmod, void **userdata, const char *name, Dwarf_Addr base, void *client); int process_buildid (Dwfl_Module *dwflmod); std::vector files; std::vector modules; std::vector> buildids; systemtap_session &s; CURL *curl; int retry; std::string *location; std::string buildid; }; // TODO is there a better way than making this static? static http_client *http; size_t http_client::get_data_shim (void *ptr, size_t size, size_t nitems, void *client) { http_client *http = static_cast(client); return http->get_data (ptr, size, nitems); } // Parse the json data at PTR having SIZE and NITEMS into root size_t http_client::get_data (void *ptr, size_t size, size_t nitems) { string data ((const char *) ptr, (size_t) size * nitems); // Process the JSON data. if (data.front () == '{') { enum json_tokener_error json_error; root = json_tokener_parse_verbose (data.c_str(), &json_error); if (root == NULL) throw SEMANTIC_ERROR (json_tokener_error_desc (json_error)); } else { clog << "Malformed JSON data: '" << data << "'" << endl; } return size * nitems; } size_t http_client::get_header_shim (void *ptr, size_t size, size_t nitems, void *client) { http_client *http = static_cast(client); return http->get_header (ptr, size, nitems); } // Extract header values at PTR having SIZE and NITEMS into header_values size_t http_client::get_header (void *ptr, size_t size, size_t nitems) { string data ((const char *) ptr, (size_t) size * nitems); unsigned long colon = data.find(':'); if (colon != string::npos) { string key = data.substr (0, colon); string value = data.substr (colon + 2, data.length() - colon - 4); header_values[key] = value; } return size * nitems; } // Put the data, e.g. .ko at PTR having SIZE and NITEMS into STREAM size_t http_client::get_file (void *ptr, size_t size, size_t nitems, std::FILE * stream) { size_t written; written = fwrite (ptr, size, nitems, stream); std::fflush (stream); return written; } // Trace sent and received packets int http_client::trace(CURL *, curl_infotype type, unsigned char *data, size_t size, void *) { string text; switch(type) { case CURLINFO_TEXT: clog << "== Info: " << data; return 0; case CURLINFO_HEADER_OUT: text = "=> Send header"; break; case CURLINFO_DATA_OUT: text = "=> Send data"; break; case CURLINFO_HEADER_IN: text = "<= Recv header"; break; case CURLINFO_DATA_IN: text = "<= Recv data"; break; default: return 0; } size_t i; size_t c; const unsigned int width = 64; // Packet contents exceeding this size are probably downloaded file components const unsigned int max_size = 0x2000; clog << text << " " << size << " bytes (" << showbase << hex << size << ")" << dec << noshowbase << endl; if (size > max_size) return 0; for (i = 0; i < size; i += width) { clog << setw(4) << setfill('0') << hex << i << dec << setfill(' ') << ": "; for (c = 0; (c < width) && (i + c < size); c++) { if ((i + c + 1 < size) && data[i + c] == '\r' && data[i + c + 1] == '\n') { i += (c + 2 - width); break; } clog << (char)(isprint (data[i + c]) ? data[i + c] : '.'); if ((i + c + 2 < size) && data[i + c + 1] == '\r' && data[i + c + 2] == '\n') { i += (c + 3 - width); break; } } clog << endl; } return 0; } // Read the certificate bundle corresponding to 'url into 'certs' bool http_client::download_pem_cert (const std::string & url, string & certs) { CURL *dpc_curl; CURLcode res; bool have_certs = false; struct curl_certinfo *certinfo; struct curl_slist *headers = NULL; // Get the certificate info for the url dpc_curl = curl_easy_init (); curl_easy_setopt(dpc_curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(dpc_curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(dpc_curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(dpc_curl, CURLOPT_VERBOSE, 0L); curl_easy_setopt (dpc_curl, CURLOPT_ACCEPT_ENCODING, "deflate"); headers = curl_slist_append (headers, "Accept: */*"); headers = curl_slist_append (headers, "Content-Type: text/html"); curl_easy_setopt (dpc_curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt (dpc_curl, CURLOPT_HTTPGET, 1); // older versions of curl don't support CURLINFO_CERTINFO reliably // so use server return cert info as a backup curl_easy_setopt (dpc_curl, CURLOPT_WRITEDATA, http); curl_easy_setopt (dpc_curl, CURLOPT_WRITEFUNCTION, http_client::get_data_shim); if (s.verbose > 2) { curl_easy_setopt (dpc_curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (dpc_curl, CURLOPT_DEBUGFUNCTION, trace); } curl_easy_setopt(dpc_curl, CURLOPT_CERTINFO, 1L); res = curl_easy_perform (dpc_curl); if (res) return false; res = curl_easy_getinfo (dpc_curl, CURLINFO_CERTINFO, &certinfo); // Create a certificate bundle from the certificate info if (!res && certinfo->num_of_certs > 0) { for (int i = 0; i < certinfo->num_of_certs; i++) { struct curl_slist *slist; for (slist = certinfo->certinfo[i]; slist; slist = slist->next) { string one_cert; string slist_data = string (slist->data); size_t cert_begin, cert_end; if ((cert_begin = slist_data.find("-----BEGIN CERTIFICATE-----")) == string::npos) continue; if ((cert_end = slist_data.find("-----END CERTIFICATE-----", cert_begin)) == string::npos) continue; certs += string (slist_data.substr(cert_begin, cert_end - cert_begin + 28)); have_certs = true; } } } else if (!res && certinfo->num_of_certs == 0) { json_object *cert_obj; // Get the certificate returned by the server if (json_object_object_get_ex (root, "certificate", &cert_obj)) { certs = string (json_object_get_string(cert_obj)); have_certs = true; } } if (s.verbose >= 2) clog << "Server returned certificate chain with: " << certinfo->num_of_certs << " members" << endl; curl_easy_cleanup(dpc_curl); curl_global_cleanup(); return have_certs; } bool http_client::download (const std::string & url, http_client::download_type type, bool report_errors, bool cleanup) { struct curl_slist *headers = NULL; if (curl) curl_easy_reset (curl); else curl = curl_easy_init (); if (s.verbose > 2) { curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_DEBUGFUNCTION, trace); } curl_easy_setopt (curl, CURLOPT_URL, url.c_str ()); curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1); //Prevent "longjmp causes uninitialized stack frame" bug curl_easy_setopt (curl, CURLOPT_ACCEPT_ENCODING, "deflate"); headers = curl_slist_append (headers, "Accept: */*"); headers = curl_slist_append (headers, "Content-Type: text/html"); curl_easy_setopt (curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt (curl, CURLOPT_HTTPGET, 1); curl_easy_setopt (curl, CURLOPT_SSLCERTTYPE, "PEM"); curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 1L); // Enabling verifyhost causes a mismatch between "hostname" in the // server cert db and "hostname.domain" given as the client url curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt (curl, CURLOPT_CAINFO, pem_cert_file.c_str()); if (type == json_type) { curl_easy_setopt (curl, CURLOPT_WRITEDATA, http); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, http_client::get_data_shim); } else if (type == file_type) { std::string filename = url; std::string filepath; if (filename.back() == '/') filename.erase(filename.length()-1); filepath = s.tmpdir + "/" + filename.substr (filename.rfind ('/')+1); if (s.verbose >= 3) clog << "Downloaded " + filepath << endl; std::FILE *File = std::fopen (filepath.c_str(), "wb"); curl_easy_setopt (curl, CURLOPT_WRITEDATA, File); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, http_client::get_file); } curl_easy_setopt (curl, CURLOPT_HEADERDATA, http); curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, http_client::get_header_shim); CURLcode res = curl_easy_perform (curl); if (cleanup) { curl_easy_cleanup(curl); curl_global_cleanup(); curl = 0; } if (res != CURLE_OK && res != CURLE_GOT_NOTHING) { if (report_errors) clog << curl_easy_strerror (res) << ' ' << url << endl; return false; } else return true; } // Get the rpm corresponding to SEARCH_FILE std::string http_client::get_rpmname (std::string &search_file) { rpmts ts = NULL; Header hdr; rpmdbMatchIterator mi; rpmtd td; td = rpmtdNew (); ts = rpmtsCreate (); rpmReadConfigFiles (NULL, NULL); int metrics[] = { RPMTAG_NAME, RPMTAG_EVR, RPMTAG_ARCH, RPMTAG_FILENAMES, }; struct { string name; string evr; string arch; } rpmhdr; bool found = false; mi = rpmtsInitIterator (ts, RPMDBI_PACKAGES, NULL, 0); while (NULL != (hdr = rpmdbNextIterator (mi))) { hdr = headerLink(hdr); for (unsigned int i = 0; i < (sizeof (metrics) / sizeof (int)); i++) { headerGet (hdr, metrics[i], td, HEADERGET_EXT); switch (td->type) { case RPM_STRING_TYPE: { const char *rpmval = rpmtdGetString (td); switch (metrics[i]) { case RPMTAG_NAME: rpmhdr.name = rpmval; break; case RPMTAG_EVR: rpmhdr.evr = rpmval; break; case RPMTAG_ARCH: rpmhdr.arch = rpmval; break; } break; } case RPM_STRING_ARRAY_TYPE: while (rpmtdNext(td) >= 0) { const char *rpmval = rpmtdGetString (td); if (strcmp (rpmval, search_file.c_str()) == 0) { found = true; break; } } break; } rpmtdFreeData (td); rpmtdReset (td); } headerFree (hdr); if (found) break; } rpmFreeCrypto (); rpmdbFreeIterator (mi); rpmtsFree (ts); rpmtdFree (td); if (found) { return rpmhdr.name + "-" + rpmhdr.evr + "." + rpmhdr.arch; } // There wasn't an rpm that contains SEARCH_FILE. Return the empty // string. return ""; } // Put the buildid for DWFLMOD into buildids int http_client::process_buildid (Dwfl_Module *dwflmod) { const char *fname; dwfl_module_info (dwflmod, NULL, NULL, NULL, NULL, NULL, &fname, NULL); GElf_Addr bias; int build_id_len = 0; unsigned char *build_id_bits; GElf_Addr build_id_vaddr; string build_id; char *result = NULL; int code; dwfl_module_getelf (dwflmod, &bias); build_id_len = dwfl_module_build_id (dwflmod, (const unsigned char **)&build_id_bits, &build_id_vaddr); for (int i = 0; i < build_id_len; i++) { if (result) code = asprintf (&result, "%s%02x", result, *(build_id_bits+i)); else code = asprintf (&result, "%02x", *(build_id_bits+i)); if (code < 0) return 1; } http->buildids.push_back(make_tuple(fname, result)); return DWARF_CB_OK; } int http_client::process_buildid_shim (Dwfl_Module *dwflmod, void **userdata __attribute__ ((unused)), const char *name __attribute__ ((unused)), Dwarf_Addr base __attribute__ ((unused)), void *client) { http_client *http = static_cast(client); return http->process_buildid (dwflmod); } // Do the setup for getting the buildid for FNAME void http_client::get_buildid (string fname) { int fd; if ((fd = open (fname.c_str(), O_RDONLY)) < 0) { clog << "can't open " << fname; return; } static const Dwfl_Callbacks callbacks = { dwfl_build_id_find_elf, dwfl_standard_find_debuginfo, dwfl_offline_section_address, NULL }; Dwfl *dwfl = dwfl_begin (&callbacks); if (dwfl == NULL) return; if (dwfl_report_offline (dwfl, fname.c_str(), fname.c_str(), fd) == NULL) return; else { dwfl_report_end (dwfl, NULL, NULL); dwfl_getmodules (dwfl, process_buildid_shim, http, 0); } dwfl_end (dwfl); close (fd); } void http_client::get_kernel_buildid (void) { const char *notesfile = "/sys/kernel/notes"; int fd = open (notesfile, O_RDONLY); if (fd < 0) return; union { GElf_Nhdr nhdr; unsigned char data[8192]; } buf; ssize_t n = read (fd, buf.data, sizeof buf); close (fd); if (n <= 0) return; unsigned char *p = buf.data; while (p < &buf.data[n]) { /* No translation required since we are reading the native kernel. */ GElf_Nhdr *nhdr = (GElf_Nhdr *) p; p += sizeof *nhdr; unsigned char *name = p; p += (nhdr->n_namesz + 3) & -4U; unsigned char *bits = p; p += (nhdr->n_descsz + 3) & -4U; if (p <= &buf.data[n] && nhdr->n_type == NT_GNU_BUILD_ID && nhdr->n_namesz == sizeof "GNU" && !memcmp (name, "GNU", sizeof "GNU")) { char *result = NULL; int code; for (unsigned int i = 0; i < nhdr->n_descsz; i++) { if (result) code = asprintf (&result, "%s%02x", result, *(bits+i)); else code = asprintf (&result, "%02x", *(bits+i)); if (code < 0) return; } http->buildids.push_back(make_tuple("kernel", result)); break; } } } long http_client::get_response_code (void) { long response_code = 0; curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &response_code); return response_code; } // Post REQUEST_PARAMETERS, files, modules, buildids to URL bool http_client::post (const string & url, vector> & request_parameters) { struct curl_slist *headers = NULL; int still_running = false; struct curl_httppost *formpost = NULL; struct curl_httppost *lastptr = NULL; struct json_object *jobj = json_object_new_object(); // Add parameter info // "cmd_args": ["script\/\/path\/linetimes.stp","-v","-v", // "-c\/path\/bench.x","--","process(\"\/path\/bench.x\")","main"] string previous_parm_type; string previous_json_data; auto it = request_parameters.begin (); while (it != request_parameters.end ()) { string parm_type = get<0>(*it); string parm_data = get<1>(*it); struct json_object *json_data = json_object_new_string(parm_data.c_str()); if (parm_type == previous_parm_type) { // convert original singleton to an array struct json_object *jarr = json_object_new_array(); json_data = json_object_new_string(previous_json_data.c_str()); json_object_array_add(jarr, json_data); while (parm_type == previous_parm_type) { json_data = json_object_new_string(parm_data.c_str()); json_object_array_add(jarr, json_data); previous_parm_type = parm_type; previous_json_data = parm_data; it++; parm_type = get<0>(*it); parm_data = get<1>(*it); } json_object_object_add(jobj, previous_parm_type.c_str(), jarr); continue; } else json_object_object_add(jobj, parm_type.c_str(), json_data); previous_parm_type = parm_type; previous_json_data = parm_data; it++; } // Fill in the file upload field; libcurl will load data from the // given file name. for (auto it = files.begin (); it != files.end (); ++it) { string filename = (*it); string filebase = basename (filename.c_str()); curl_formadd (&formpost, &lastptr, CURLFORM_COPYNAME, filebase.c_str(), CURLFORM_FILE, filename.c_str(), CURLFORM_END); curl_formadd (&formpost, &lastptr, CURLFORM_COPYNAME, "files", CURLFORM_COPYCONTENTS, filename.c_str(), CURLFORM_END); } // Add package info // "file_info": [ { "file_pkg": "kernel-4.14.0-0.rc4.git4.1.fc28.x86_64", // "file_name": "kernel", // "build_id": "ef7210ee3a447c798c3548102b82665f03ef241f" }, // { "file_pkg": "foo-1.1.x86_64", // "file_name": "/usr/bin/foo", // "build_id": "deadbeef" } // ] int bid_idx = 0; struct json_object *jarr = json_object_new_array(); for (auto it = modules.begin (); it != modules.end (); ++it, ++bid_idx) { struct json_object *jfobj = json_object_new_object(); string pkg = (*it); string name = std::get<0>(buildids[bid_idx]); string build_id = std::get<1>(buildids[bid_idx]); json_object_object_add (jfobj, "file_name", json_object_new_string (name.c_str())); json_object_object_add (jfobj, "file_pkg", json_object_new_string (pkg.c_str())); json_object_object_add (jfobj, "build_id", json_object_new_string (build_id.c_str())); json_object_array_add (jarr, jfobj); } json_object_object_add(jobj, "file_info", jarr); // Add environment variables info // "env_vars": {"LANG":"en_US.UTF-8","LC_MESSAGES":"en_US.UTF-8"} if (! http->env_vars.empty()) { struct json_object *jlvobj = json_object_new_object(); for (auto i = http->env_vars.begin(); i != http->env_vars.end(); ++i) { string name = get<0>(*i); string value = get<1>(*i); json_object_object_add (jlvobj, name.c_str(), json_object_new_string(value.c_str())); } if (http->env_vars.size()) json_object_object_add (jobj, "env_vars", jlvobj); } curl_formadd (&formpost, &lastptr, CURLFORM_COPYNAME, "command_environment", CURLFORM_CONTENTTYPE, "application/json", CURLFORM_COPYCONTENTS, json_object_to_json_string_ext (jobj, JSON_C_TO_STRING_PLAIN), CURLFORM_END); json_object_put(jobj); headers = curl_slist_append (headers, "Expect:"); curl_easy_setopt (curl, CURLOPT_URL, url.c_str()); curl_easy_setopt (curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt (curl, CURLOPT_HTTPPOST, formpost); CURLM *multi_handle = curl_multi_init(); curl_multi_add_handle (multi_handle, curl); curl_multi_perform (multi_handle, &still_running); do { struct timeval timeout; int rc; // select() return code CURLMcode mc; // curl_multi_fdset() return code fd_set fdread; fd_set fdwrite; fd_set fdexcep; int maxfd = -1; long curl_timeo = -1; FD_ZERO (&fdread); FD_ZERO (&fdwrite); FD_ZERO (&fdexcep); // set a suitable timeout to play around with timeout.tv_sec = 1; timeout.tv_usec = 0; curl_multi_timeout (multi_handle, &curl_timeo); if (curl_timeo >= 0) { timeout.tv_sec = curl_timeo / 1000; if (timeout.tv_sec > 1) timeout.tv_sec = 1; else timeout.tv_usec = (curl_timeo % 1000) * 1000; } // get file descriptors from the transfers mc = curl_multi_fdset (multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); if (mc != CURLM_OK) { clog << "curl_multi_fdset() failed" << curl_multi_strerror (mc) << endl; return false; } /* On success the value of maxfd is guaranteed to be >= -1. We call select(maxfd + 1, ...); specially in case of (maxfd == -1) there are no fds ready yet so we call select(0, ...)to sleep 100ms, the minimum suggested value */ if (maxfd == -1) { struct timeval wait = { 0, 100 * 1000 }; // 100ms rc = select (0, NULL, NULL, NULL, &wait); } else rc = select (maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); switch (rc) { case -1: /* select error */ break; case 0: default: curl_multi_perform (multi_handle, &still_running); break; } } while (still_running); curl_multi_cleanup (multi_handle); curl_formfree (formpost); curl_slist_free_all (headers); return true; } // Add FILE to files void http_client::add_file (std::string filename) { files.push_back (filename); } // Add MODULE to modules void http_client::add_module (std::string module) { modules.push_back (module); } // Add the server certificate to the client certificate database bool http_client::add_server_cert_to_client (string &tmpdir, db_init_types db_init_type) { const char *certificate; json_object *cert_obj; // Get the certificate returned by the server if (json_object_object_get_ex (root, "certificate", &cert_obj)) certificate = json_object_get_string(cert_obj); else return false; string pem_tmp = tmpdir + "pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << certificate; pem_out.close(); // Add the certificate to the client nss certificate database if (add_client_cert(pem_tmp, local_client_cert_db_path(), db_init_type) == SECSuccess) { remove_file_or_dir (pem_tmp.c_str()); return true; } return false; } // Ask the server to delete a URL. bool http_client::delete_op (const std::string & url) { curl = curl_easy_init (); if (s.verbose > 2) { curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_DEBUGFUNCTION, trace); } curl_easy_setopt (curl, CURLOPT_URL, url.c_str ()); curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1); //Prevent "longjmp causes uninitialized stack frame" bug curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); CURLcode res = curl_easy_perform (curl); if (res != CURLE_OK) { clog << "curl_easy_perform() failed: " << curl_easy_strerror (res) << endl; return false; } return true; } // Can a certificate having trust 'this_cert_trust' be handled by the corresponding host bool http_client::check_trust (enum cert_type this_cert_type, vector &specified_servers) { vector server_list; string cert_db_path; string cert_string; if (this_cert_type == signer_trust) { cert_db_path = signing_cert_db_path (); cert_string = "signing"; } else if (this_cert_type == ssl_trust) { cert_db_path = local_client_cert_db_path (); cert_string = "trusted"; } get_server_info_from_db (s, server_list, cert_db_path); vector::iterator i = specified_servers.begin (); while (i != specified_servers.end ()) { bool have_match = false; for (vector::const_iterator j = server_list.begin (); j != server_list.end (); ++j) { if (j->host_name == i->host_name || j->host_name == i->unresolved_host_name.substr(0,j->host_name.length())) { have_match = true; break; } } if (!have_match) i = specified_servers.erase (i); else ++i; } if (specified_servers.size() == 0) { clog << "No matching " << cert_string << " server"; if (server_list.size() > 0) clog << "; the " << cert_string << " servers are\n" << server_list; clog << endl; return false; } else return true; } http_client_backend::http_client_backend (systemtap_session &s) : client_backend(s), files_seen(false) { server_tmpdir = s.tmpdir; } int http_client_backend::initialize () { if (!http) http = new http_client (s); request_parameters.clear(); return 0; } // Symbolically link the given file or directory into the client's temp // directory under the given subdirectory. // // We need to do this even for the http client/server so that we can // fully handle systemtap's complexity. A tricky example of this // complexity would be something like "stap -I tapset_dir script.stp", // where "tapset_dir" is empty. You can transfer files with a POST, // but you can't really indicate an empty directory. // // So, we'll handle this like the NSS client does - build up a // directory of all the files we need to transfer over to the server // and zip it up and send the one zip file. int http_client_backend::include_file_or_directory (const string &subdir, const string &path, const bool add_arg) { // Must predeclare these because we do use 'goto done' to // exit from error situations. vector components; string name; int rc = 0; // Canonicalize the given path and remove the leading /. string rpath; char *cpath = canonicalize_file_name (path.c_str ()); if (! cpath) { // It can not be canonicalized. Use the name relative to // the current working directory and let the server deal with it. char cwd[PATH_MAX]; if (getcwd (cwd, sizeof (cwd)) == NULL) { rpath = path; rc = 1; goto done; } rpath = string (cwd) + "/" + path; } else { // It can be canonicalized. Use the canonicalized name and add this // file or directory to the request package. rpath = cpath; free (cpath); // Including / would require special handling in the code below and // is a bad idea anyway. Let's not allow it. if (rpath == "/") { if (rpath != path) clog << _F("%s resolves to %s\n", path.c_str (), rpath.c_str ()); clog << _F("Unable to send %s to the server\n", path.c_str ()); return 1; } // First create the requested subdirectory (if there is one). if (! subdir.empty()) { name = client_tmpdir + "/" + subdir; rc = create_dir (name.c_str ()); if (rc) goto done; } else { name = client_tmpdir; } // Now create each component of the path within the sub directory. assert (rpath[0] == '/'); tokenize (rpath.substr (1), components, "/"); assert (components.size () >= 1); unsigned i; for (i = 0; i < components.size() - 1; ++i) { if (components[i].empty ()) continue; // embedded '//' name += "/" + components[i]; rc = create_dir (name.c_str ()); if (rc) goto done; } // Now make a symbolic link to the actual file or directory. assert (i == components.size () - 1); name += "/" + components[i]; rc = symlink (rpath.c_str (), name.c_str ()); if (rc) goto done; } // If the caller asks us, add this file or directory to the arguments. if (add_arg) rc = add_cmd_arg (subdir + "/" + rpath.substr (1)); done: if (rc != 0) { const char* e = strerror (errno); clog << "ERROR: unable to add " << rpath << " to temp directory as " << name << ": " << e << endl; } else { files_seen = true; } return rc; } int http_client_backend::package_request () { int rc = 0; http->add_module ("kernel-" + s.kernel_release); http->get_kernel_buildid (); for (set::const_iterator i = s.unwindsym_modules.begin(); i != s.unwindsym_modules.end(); ++i) { string module = (*i); if (module != "kernel") { string rpmname = http->get_rpmname (module); if (! rpmname.empty()) { http->get_buildid (module); http->add_module (rpmname); } else if (module[0] == '/') { include_file_or_directory ("files", module, false); } } } // Package up the temporary directory into a zip file, if needed. if (files_seen) { string client_zipfile = client_tmpdir + ".zip"; string cmd = "cd " + cmdstr_quoted(client_tmpdir) + " && zip -qr " + cmdstr_quoted(client_zipfile) + " *"; vector sh_cmd { "sh", "-c", cmd }; rc = stap_system (s.verbose, sh_cmd); if (rc == 0) http->add_file(client_zipfile); } return rc; } int http_client_backend::find_and_connect_to_server () { const string cert_db = local_client_cert_db_path (); const string nick = server_cert_nickname (); if (s.verbose >= 2) clog << "connecting to server using cert db " + cert_db << endl; vector specified_servers; nss_get_specified_server_info (s, specified_servers); if (! pr_contains (s.privilege, pr_stapdev)) if (! http->check_trust (http->signer_trust, specified_servers)) return 1; if (! http->check_trust (http->ssl_trust, specified_servers)) return 1; for (vector::iterator i = specified_servers.begin (); i != specified_servers.end (); ++i) { // Try to connect to the server. We'll try to grab the base // directory of the server just to see if we can make a // connection. __label__ TRY_NEXT_SERVER; string pem_cert; bool add_cert = false; string url = "https://" + i->host_specification(); http->host = i->unresolved_host_name; int download_tries; if (get_pem_cert(cert_db, nick, http->host, pem_cert) == true) download_tries = 2; // 1st try cert db 2nd download cert from server else download_tries = 1; // download cert from server while (download_tries) { if (download_tries == 1) { pem_cert = ""; if (http->download_pem_cert (url, pem_cert) == false) goto TRY_NEXT_SERVER; else add_cert = true; } string pem_tmp = client_tmpdir + "/pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << pem_cert; pem_out.close(); http->pem_cert_file = pem_tmp; // Similar to CURLOPT_VERIFYHOST: compare source alternate names to hostname if (have_san_match (url, pem_cert) == false) goto TRY_NEXT_SERVER; // curl invocation for a download must be the same as the preceding post if (http->download (url + "/", http->json_type, true, false) == true) break; remove_file_or_dir (pem_tmp.c_str()); download_tries -= 1; } // FIXME: The server returns its version number. We might // need to check it for compatibility. // Send our build request. if (http->post (url + "/builds", request_parameters)) { s.winning_server = url; http->host = url; if (add_cert) http->add_server_cert_to_client (client_tmpdir, db_nssinitcontext); return 0; } TRY_NEXT_SERVER:; } return 1; } int http_client_backend::unpack_response () { std::string build_uri; std::map::iterator it_loc; it_loc = http->header_values.find("Location"); if (it_loc == http->header_values.end()) { clog << "Cannot get location from server" << endl; return 1; } build_uri = http->host + http->header_values["Location"]; if (s.verbose >= 2) clog << "Initial response code: " << http->get_response_code() << endl; while (true) { auto it = http->header_values.find("Retry-After"); if (it == http->header_values.end()) { clog << "No retry-after?" << endl; break; } int retry = std::stoi(http->header_values["Retry-After"], nullptr, 10); if (s.verbose >= 2) clog << "Waiting " << retry << " seconds" << endl; sleep (retry); if (http->download (http->host + http->header_values["Location"], http->json_type, true, false)) { // We need to wait until we get a 303 (See Other) long response_code = http->get_response_code(); if (s.verbose >= 2) clog << "Response code: " << response_code << endl; if (response_code == 200) continue; else if (response_code == 303) break; else { clog << "Received a unhandled response code " << response_code << endl; return 1; } } } // If we're here, we got a '303' (See Other). Read the "other" // location, which should contain our results. if (! http->download (http->host + http->header_values["Location"], http->json_type, true, false)) { clog << "Couldn't read result information" << endl; return 1; } // Get the server version number. json_object *ver_obj; json_bool jfound = json_object_object_get_ex (http->root, "version", &ver_obj); if (jfound) { server_version = json_object_get_string(ver_obj); } else { clog << "Couldn't find 'version' in JSON results data" << endl; return 1; } // Get the return code information. json_object *rc_obj; jfound = json_object_object_get_ex (http->root, "rc", &rc_obj); if (jfound) { int rc = json_object_get_int(rc_obj); write_to_file(s.tmpdir + "/rc", rc); } else { clog << "Couldn't find 'rc' in JSON results data" << endl; return 1; } // Download each item in the optional 'files' array. This is // optional since not all stap invocations produce an output file // (like a module). json_object *files; json_object_object_get_ex (http->root, "files", &files); if (files) { for (size_t k = 0; k < (size_t)json_object_array_length (files); k++) { json_object *files_element = json_object_array_get_idx (files, k); json_object *loc; jfound = json_object_object_get_ex (files_element, "location", &loc); string location = json_object_get_string (loc); http->download (http->host + location, http->file_type, true, false); } } // Output stdout and stderr. json_object *loc_obj; jfound = json_object_object_get_ex (http->root, "stderr_location", &loc_obj); if (jfound) { string loc_str = json_object_get_string (loc_obj); http->download (http->host + loc_str, http->file_type, true, false); } else { clog << "Couldn't find 'stderr' in JSON results data" << endl; return 1; } jfound = json_object_object_get_ex (http->root, "stdout_location", &loc_obj); if (jfound) { string loc_str = json_object_get_string (loc_obj); http->download (http->host + loc_str, http->file_type, true, false); } else { clog << "Couldn't find 'stdout' in JSON results data" << endl; return 1; } delete http; return 0; } int http_client_backend::add_protocol_version (const std::string &version) { // Add the protocol version (so the server can ensure we're // compatible). request_parameters.push_back(make_tuple("version", version)); return 0; } int http_client_backend::add_sysinfo () { request_parameters.push_back(make_tuple("kver", s.kernel_release)); request_parameters.push_back(make_tuple("arch", s.architecture)); vector distro_info; get_distro_info (distro_info); if (! distro_info.empty()) { std::replace(distro_info[0].begin(), distro_info[0].end(), '\n', ' '); std::replace(distro_info[1].begin(), distro_info[1].end(), '\n', ' '); request_parameters.push_back(make_tuple("distro_name", distro_info[0])); request_parameters.push_back(make_tuple("distro_version", distro_info[1])); } return 0; } int http_client_backend::add_tmpdir_file (const std::string &) { files_seen = true; return 0; } int http_client_backend::add_cmd_arg (const std::string &arg) { request_parameters.push_back(make_tuple("cmd_args", arg)); return 0; } void http_client_backend::add_localization_variable (const std::string &name, const std::string &value) { http->env_vars.push_back(make_tuple(name, value)); return; } void http_client_backend::add_mok_fingerprint (const std::string &) { // FIXME: We'll probably just add to the request_parameters here. return; } void http_client_backend::fill_in_server_info (compile_server_info &info) { const string cert_db = local_client_cert_db_path (); const string nick = server_cert_nickname (); string host = info.unresolved_host_name; if (info.port == 0) // Sync with httpd/main.cxx info.port = 1234; string url = "https://" + host + ":" + std::to_string(info.port); string pem_cert; if (host.empty()) return; if (s.verbose >= 2) { char hostname[NI_MAXHOST]; memset (&hostname, '\0', NI_MAXHOST); PR_NetAddrToString(&info.address, hostname, NI_MAXHOST); clog << "getting server info for " + url + " " + hostname + " using cert db " + cert_db << endl; } // Try to get the server certificate and the base // directory of the server just to see if we can make a // connection. int download_tries; // Obtain server info based on network address instead of host name? if (file_exists (cert_db) == true && get_pem_cert(cert_db, nick, http->host, pem_cert) == true) download_tries = 2; // 1st try cert db 2nd download cert from server else download_tries = 1; // download cert from server while (download_tries) { if (download_tries == 1) { pem_cert = ""; if (http->download_pem_cert (url, pem_cert) == false) return; } string pem_tmp = s.tmpdir + "/pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << pem_cert; pem_out.close(); http->pem_cert_file = pem_tmp; // Similar to CURLOPT_VERIFYHOST: compare source alternate names to hostname if (have_san_match (url, pem_cert) == false) return; // curl invocation for a download must be the same as the preceding post if (http->download (url + "/", http->json_type, false, true) == true) break; remove_file_or_dir (pem_tmp.c_str()); download_tries -= 1; } json_object *ver_obj; json_bool jfound; // Get the server version number. jfound = json_object_object_get_ex (http->root, "version", &ver_obj); if (jfound) info.version = json_object_get_string(ver_obj); // Get the server arch. jfound = json_object_object_get_ex (http->root, "arch", &ver_obj); if (jfound) info.sysinfo = json_object_get_string(ver_obj); // Get the server certificate info. jfound = json_object_object_get_ex (http->root, "cert_info", &ver_obj); if (jfound) info.certinfo = json_object_get_string(ver_obj); // If the download worked, this server is obviously online. nss_add_online_server_info (s, info); } int http_client_backend::trust_server_info (const compile_server_info &info) { const string cert_db = local_client_cert_db_path (); const string nick = server_cert_nickname (); string pem_cert; string host = info.unresolved_host_name; string url = "https://" + host + ":" + std::to_string(info.port); if (s.verbose >= 2) clog << "getting server trust for " + url + " using cert db " + cert_db << endl; if (http->download_pem_cert (url, pem_cert) == false) return 1; string pem_tmp = s.tmpdir + "/pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << pem_cert; pem_out.close(); http->pem_cert_file = pem_tmp; // Similar to CURLOPT_VERIFYHOST: compare source alternate names to hostname if (have_san_match (url, pem_cert) == false) return 1; if (http->download (url + "/", http->json_type, false, true)) http->add_server_cert_to_client (s.tmpdir, db_no_nssinit); return 0; } #endif /* HAVE_HTTP_SUPPORT */ systemtap-4.2/client-http.h000066400000000000000000000034451356460210500160240ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2017-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CLIENT_HTTP_H #define CLIENT_HTTP_H #ifdef HAVE_HTTP_SUPPORT #include "session.h" #include "csclient.h" #include class http_client; class http_client_backend : public client_backend { public: http_client_backend (systemtap_session &s); ~http_client_backend (); friend class http_client; int initialize (); int package_request (); int find_and_connect_to_server (); int unpack_response (); int process_response (); int add_protocol_version (const std::string &version); int add_sysinfo (); int include_file_or_directory (const std::string &subdir, const std::string &path, const bool add_arg = true); int add_tmpdir_file (const std::string &file); int add_cmd_arg (const std::string &arg); void add_localization_variable(const std::string &var, const std::string &value); int finalize_localization_variables() { return 0; }; void add_mok_fingerprint(const std::string &fingerprint); int finalize_mok_fingerprints() { return 0; }; void fill_in_server_info (compile_server_info &info); int trust_server_info (const compile_server_info &info); // FIXME: The 'request_parameters' data item isn't right. This means // we can only add string parameters, not numeric parameters. We // could have 'request_string_parameters' and // 'request_numeric_parameters' - but then we get the ordering // wrong. std::vector> request_parameters; private: bool files_seen; }; #endif // HAVE_HTTP_SUPPORT #endif // CLIENT_HTTP_H systemtap-4.2/client-nss.cxx000066400000000000000000000723571356460210500162330ustar00rootroot00000000000000/* Compile server client functions Copyright (C) 2010-2018 Red Hat Inc. This file is part of systemtap, and is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License (GPL); either version 2, or (at your option) any later version. */ // Completely disable the client if NSS is not available. #include "config.h" #if HAVE_NSS #include "session.h" #include "cscommon.h" #include "csclient.h" #include "client-nss.h" #include "util.h" #include "stap-probe.h" #include #include #include #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include #include } #if HAVE_AVAHI extern "C" { #include #include #include #include #include #include } #endif // HAVE_AVAHI extern "C" { #include #include #include #include #include #include #include #include } #include "nsscommon.h" using namespace std; #define STAP_CSC_01 _("WARNING: The domain name, %s, does not match the DNS name(s) on the server certificate:\n") #define STAP_CSC_02 _("could not find input file %s\n") #define STAP_CSC_03 _("could not open input file %s\n") #define STAP_CSC_04 _("Unable to open output file %s\n") #define STAP_CSC_05 _("could not write to %s\n") extern "C" void nsscommon_error (const char *msg, int logit __attribute ((unused))) { clog << msg << endl << flush; } static void preferred_order (vector &servers) { // Sort the given list of servers into the preferred order for contacting. // Don't bother if there are less than 2 servers in the list. if (servers.size () < 2) return; // Sort the list using compile_server_info::operator< sort (servers.begin (), servers.end ()); } /* Connection state. */ typedef struct connectionState_t { const char *hostName; PRNetAddr addr; const char *infileName; const char *outfileName; const char *trustNewServerMode; } connectionState_t; /* Called when the server certificate verification fails. This gives us the chance to trust the server anyway and add the certificate to the local database. */ static SECStatus badCertHandler(void *arg, PRFileDesc *sslSocket) { SECStatus secStatus; PRErrorCode errorNumber; CERTCertificate *serverCert = NULL; SECItem subAltName; PRArenaPool *tmpArena = NULL; CERTGeneralName *nameList, *current; char *expected = NULL; const connectionState_t *connectionState = (connectionState_t *)arg; errorNumber = PR_GetError (); switch (errorNumber) { case SSL_ERROR_BAD_CERT_DOMAIN: /* Since we administer our own client-side databases of trustworthy certificates, we don't need the domain name(s) on the certificate to match. If the cert is in our database, then we can trust it. If we know the expected domain name, then issue a warning but, in any case, accept the certificate. */ secStatus = SECSuccess; expected = SSL_RevealURL (sslSocket); if (expected == NULL || *expected == '\0') break; fprintf (stderr, STAP_CSC_01, expected); /* List the DNS names from the server cert as part of the warning. First, find the alt-name extension on the certificate. */ subAltName.data = NULL; serverCert = SSL_PeerCertificate (sslSocket); secStatus = CERT_FindCertExtension (serverCert, SEC_OID_X509_SUBJECT_ALT_NAME, & subAltName); if (secStatus != SECSuccess || ! subAltName.data) { fprintf (stderr, _("Unable to find alt name extension on the server certificate\n")); secStatus = SECSuccess; /* Not a fatal error */ break; } // Now, decode the extension. tmpArena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if (! tmpArena) { fprintf (stderr, _("Out of memory\n")); SECITEM_FreeItem(& subAltName, PR_FALSE); secStatus = SECSuccess; /* Not a fatal error here */ break; } nameList = CERT_DecodeAltNameExtension (tmpArena, & subAltName); SECITEM_FreeItem(& subAltName, PR_FALSE); if (! nameList) { fprintf (stderr, _("Unable to decode alt name extension on server certificate\n")); secStatus = SECSuccess; /* Not a fatal error */ break; } /* List the DNS names from the server cert as part of the warning. The names are in a circular list. */ current = nameList; do { /* Make sure this is a DNS name. */ if (current->type == certDNSName) { fprintf (stderr, " %.*s\n", (int)current->name.other.len, current->name.other.data); } current = CERT_GetNextGeneralName (current); } while (current != nameList); break; case SEC_ERROR_CA_CERT_INVALID: /* The server's certificate is not trusted. Should we trust it? */ secStatus = SECFailure; /* Do not trust by default. */ if (! connectionState->trustNewServerMode) break; /* Trust it for this session only? */ if (strcmp (connectionState->trustNewServerMode, "session") == 0) { secStatus = SECSuccess; break; } /* Trust it permanently? */ if (strcmp (connectionState->trustNewServerMode, "permanent") == 0) { /* The user wants to trust this server. Get the server's certificate so and add it to our database. */ serverCert = SSL_PeerCertificate (sslSocket); if (serverCert != NULL) { secStatus = nss_trustNewServer (serverCert); } } break; default: secStatus = SECFailure; /* Do not trust this server */ break; } if (expected) PORT_Free (expected); if (tmpArena) PORT_FreeArena (tmpArena, PR_FALSE); if (serverCert != NULL) { CERT_DestroyCertificate (serverCert); } return secStatus; } static PRFileDesc * setupSSLSocket (connectionState_t *connectionState) { PRFileDesc *tcpSocket; PRFileDesc *sslSocket; PRSocketOptionData socketOption; PRStatus prStatus; SECStatus secStatus; tcpSocket = PR_OpenTCPSocket(connectionState->addr.raw.family); if (tcpSocket == NULL) goto loser; /* Make the socket blocking. */ socketOption.option = PR_SockOpt_Nonblocking; socketOption.value.non_blocking = PR_FALSE; prStatus = PR_SetSocketOption(tcpSocket, &socketOption); if (prStatus != PR_SUCCESS) goto loser; /* Import the socket into the SSL layer. */ sslSocket = SSL_ImportFD(NULL, tcpSocket); if (!sslSocket) goto loser; /* Set configuration options. */ secStatus = SSL_OptionSet(sslSocket, SSL_SECURITY, PR_TRUE); if (secStatus != SECSuccess) goto loser; secStatus = SSL_OptionSet(sslSocket, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE); if (secStatus != SECSuccess) goto loser; /* Set SSL callback routines. */ #if 0 /* no client authentication */ secStatus = SSL_GetClientAuthDataHook(sslSocket, (SSLGetClientAuthData)myGetClientAuthData, (void *)certNickname); if (secStatus != SECSuccess) goto loser; #endif #if 0 /* Use the default */ secStatus = SSL_AuthCertificateHook(sslSocket, (SSLAuthCertificate)myAuthCertificate, (void *)CERT_GetDefaultCertDB()); if (secStatus != SECSuccess) goto loser; #endif secStatus = SSL_BadCertHook(sslSocket, (SSLBadCertHandler)badCertHandler, connectionState); if (secStatus != SECSuccess) goto loser; #if 0 /* No handshake callback */ secStatus = SSL_HandshakeCallback(sslSocket, myHandshakeCallback, NULL); if (secStatus != SECSuccess) goto loser; #endif return sslSocket; loser: if (tcpSocket) PR_Close(tcpSocket); return NULL; } static SECStatus handle_connection (PRFileDesc *sslSocket, connectionState_t *connectionState) { PRInt32 numBytes; char *readBuffer; PRFileInfo info; PRFileDesc *local_file_fd; PRStatus prStatus; SECStatus secStatus = SECSuccess; #define READ_BUFFER_SIZE (60 * 1024) /* If we don't have both the input and output file names, then we're contacting this server only in order to establish trust. In this case send 0 as the file size and exit. */ if (! connectionState->infileName || ! connectionState->outfileName) { numBytes = htonl ((PRInt32)0); numBytes = PR_Write (sslSocket, & numBytes, sizeof (numBytes)); if (numBytes < 0) return SECFailure; return SECSuccess; } /* read and send the data. */ /* Try to open the local file named. * If successful, then write it to the server */ prStatus = PR_GetFileInfo(connectionState->infileName, &info); if (prStatus != PR_SUCCESS || info.type != PR_FILE_FILE || info.size < 0) { fprintf (stderr, STAP_CSC_02, connectionState->infileName); return SECFailure; } local_file_fd = PR_Open(connectionState->infileName, PR_RDONLY, 0); if (local_file_fd == NULL) { fprintf (stderr, STAP_CSC_03, connectionState->infileName); return SECFailure; } /* Send the file size first, so the server knows when it has the entire file. */ numBytes = htonl ((PRInt32)info.size); numBytes = PR_Write(sslSocket, & numBytes, sizeof (numBytes)); if (numBytes < 0) { PR_Close(local_file_fd); return SECFailure; } /* Transmit the local file across the socket. */ numBytes = PR_TransmitFile(sslSocket, local_file_fd, NULL, 0, PR_TRANSMITFILE_KEEP_OPEN, PR_INTERVAL_NO_TIMEOUT); if (numBytes < 0) { PR_Close(local_file_fd); return SECFailure; } PR_Close(local_file_fd); /* read until EOF */ readBuffer = (char *)PORT_Alloc(READ_BUFFER_SIZE); if (! readBuffer) { fprintf (stderr, _("Out of memory\n")); return SECFailure; } local_file_fd = PR_Open(connectionState->outfileName, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, PR_IRUSR | PR_IWUSR | PR_IRGRP | PR_IWGRP | PR_IROTH); if (local_file_fd == NULL) { fprintf (stderr, STAP_CSC_04, connectionState->outfileName); return SECFailure; } while (PR_TRUE) { // No need for PR_Read_Complete here, since we're already managing multiple // reads to a fixed size buffer. numBytes = PR_Read (sslSocket, readBuffer, READ_BUFFER_SIZE); if (numBytes == 0) break; /* EOF */ if (numBytes < 0) { secStatus = SECFailure; break; } /* Write to output file */ numBytes = PR_Write(local_file_fd, readBuffer, numBytes); if (numBytes < 0) { fprintf (stderr, STAP_CSC_05, connectionState->outfileName); secStatus = SECFailure; break; } } PR_Free(readBuffer); PR_Close(local_file_fd); /* Caller closes the socket. */ return secStatus; } /* make the connection. */ static SECStatus do_connect (connectionState_t *connectionState) { PRFileDesc *sslSocket; PRStatus prStatus; SECStatus secStatus; secStatus = SECSuccess; /* Set up SSL secure socket. */ sslSocket = setupSSLSocket (connectionState); if (sslSocket == NULL) return SECFailure; #if 0 /* no client authentication */ secStatus = SSL_SetPKCS11PinArg(sslSocket, password); if (secStatus != SECSuccess) goto done; #endif secStatus = SSL_SetURL(sslSocket, connectionState->hostName); if (secStatus != SECSuccess) goto done; prStatus = PR_Connect(sslSocket, & connectionState->addr, PR_INTERVAL_NO_TIMEOUT); if (prStatus != PR_SUCCESS) { secStatus = SECFailure; goto done; } /* Established SSL connection, ready to send data. */ secStatus = SSL_ResetHandshake(sslSocket, /* asServer */ PR_FALSE); if (secStatus != SECSuccess) goto done; /* This is normally done automatically on the first I/O operation, but doing it here catches any authentication problems early. */ secStatus = SSL_ForceHandshake(sslSocket); if (secStatus != SECSuccess) goto done; // Connect to the server and make the request. secStatus = handle_connection(sslSocket, connectionState); done: prStatus = PR_Close(sslSocket); return secStatus; } static bool isIPv6LinkLocal (const PRNetAddr &address) { // Link-local addresses are members of the address block fe80:: if (address.raw.family == PR_AF_INET6 && address.ipv6.ip.pr_s6_addr[0] == 0xfe && address.ipv6.ip.pr_s6_addr[1] == 0x80) return true; return false; } static int client_connect (const compile_server_info &server, const char* infileName, const char* outfileName, const char* trustNewServer) { SECStatus secStatus; PRErrorCode errorNumber; int attempt; int errCode = NSS_GENERAL_ERROR; struct connectionState_t connectionState; // Set up a connection state for use by NSS error callbacks. memset (& connectionState, 0, sizeof (connectionState)); connectionState.hostName = server.host_name.c_str (); connectionState.addr = server.address; connectionState.infileName = infileName; connectionState.outfileName = outfileName; connectionState.trustNewServerMode = trustNewServer; /* Some errors (see below) represent a situation in which trying again should succeed. However, don't try forever. */ for (attempt = 0; attempt < 5; ++attempt) { secStatus = do_connect (& connectionState); if (secStatus == SECSuccess) return NSS_SUCCESS; errorNumber = PR_GetError (); switch (errorNumber) { case PR_CONNECT_RESET_ERROR: /* Server was not ready. */ sleep (1); break; /* Try again */ case SEC_ERROR_EXPIRED_CERTIFICATE: /* The server's certificate has expired. It should generate a new certificate. Return now and we'll try again. */ errCode = NSS_SERVER_CERT_EXPIRED_ERROR; return errCode; case SEC_ERROR_CA_CERT_INVALID: /* The server's certificate is not trusted. The exit code must reflect this. */ errCode = NSS_CA_CERT_INVALID_ERROR; return errCode; default: /* This error is fatal. */ return errCode; } } return errCode; } nss_client_backend::nss_client_backend (systemtap_session &s) : client_backend(s), argc(0) { server_tmpdir = s.tmpdir + "/server"; } int nss_client_backend::initialize () { // Initialize session state argc = 0; locale_vars.clear(); mok_fingerprints.clear(); // Private location for server certificates. private_ssl_dbs.push_back (local_client_cert_db_path ()); // Additional public location. public_ssl_dbs.push_back (global_client_cert_db_path ()); return 0; } int nss_client_backend::add_protocol_version (const string &version) { // Add the current protocol version. return write_to_file (client_tmpdir + "/version", version); } int nss_client_backend::add_sysinfo () { string sysinfo = "sysinfo: " + s.kernel_release + " " + s.architecture; return write_to_file (client_tmpdir + "/sysinfo", sysinfo); } // Symbolically link the given file or directory into the client's temp // directory under the given subdirectory. int nss_client_backend::include_file_or_directory (const string &subdir, const string &path, const bool add_arg) { // Must predeclare these because we do use 'goto done' to // exit from error situations. vector components; string name; int rc = 0; // Canonicalize the given path and remove the leading /. string rpath; char *cpath = canonicalize_file_name (path.c_str ()); if (! cpath) { // It can not be canonicalized. Use the name relative to // the current working directory and let the server deal with it. char cwd[PATH_MAX]; if (getcwd (cwd, sizeof (cwd)) == NULL) { rpath = path; rc = 1; goto done; } rpath = string (cwd) + "/" + path; } else { // It can be canonicalized. Use the canonicalized name and add this // file or directory to the request package. rpath = cpath; free (cpath); // Including / would require special handling in the code below and // is a bad idea anyway. Let's not allow it. if (rpath == "/") { if (rpath != path) clog << _F("%s resolves to %s\n", path.c_str (), rpath.c_str ()); clog << _F("Unable to send %s to the server\n", path.c_str ()); return 1; } // First create the requested subdirectory (if there is one). if (! subdir.empty()) { name = client_tmpdir + "/" + subdir; rc = create_dir (name.c_str ()); if (rc) goto done; } else { name = client_tmpdir; } // Now create each component of the path within the sub directory. assert (rpath[0] == '/'); tokenize (rpath.substr (1), components, "/"); assert (components.size () >= 1); unsigned i; for (i = 0; i < components.size() - 1; ++i) { if (components[i].empty ()) continue; // embedded '//' name += "/" + components[i]; rc = create_dir (name.c_str ()); if (rc) goto done; } // Now make a symbolic link to the actual file or directory. assert (i == components.size () - 1); name += "/" + components[i]; rc = symlink (rpath.c_str (), name.c_str ()); if (rc) goto done; } // If the caller asks us, add this file or directory to the arguments. if (add_arg) rc = add_cmd_arg (subdir + "/" + rpath.substr (1)); done: if (rc != 0) { const char* e = strerror (errno); clog << "ERROR: unable to add " << rpath << " to temp directory as " << name << ": " << e << endl; } return rc; } int nss_client_backend::add_cmd_arg (const string &cmd_arg) { int rc = 0; ostringstream fname; fname << client_tmpdir << "/argv" << ++argc; write_to_file (fname.str (), cmd_arg); // NB: No terminating newline return rc; } void nss_client_backend::add_localization_variable (const std::string &var, const std::string &value) { locale_vars += var + "=" + value + "\n"; } int nss_client_backend::finalize_localization_variables () { string fname = client_tmpdir + "/locale"; return write_to_file(fname, locale_vars); } void nss_client_backend::add_mok_fingerprint (const std::string &fingerprint) { mok_fingerprints << fingerprint << endl; } int nss_client_backend::finalize_mok_fingerprints () { string fname = client_tmpdir + "/mok_fingerprints"; return write_to_file(fname, mok_fingerprints.str()); } // Package the client's temp directory into a form suitable for sending to the // server. int nss_client_backend::package_request () { // Package up the temporary directory into a zip file. client_zipfile = client_tmpdir + ".zip"; string cmd = "cd " + cmdstr_quoted(client_tmpdir) + " && zip -qr " + cmdstr_quoted(client_zipfile) + " *"; vector sh_cmd { "sh", "-c", cmd }; int rc = stap_system (s.verbose, sh_cmd); return rc; } int nss_client_backend::find_and_connect_to_server () { // Accumulate info on the specified servers. vector specified_servers; nss_get_specified_server_info (s, specified_servers); // Examine the specified servers to make sure that each has been resolved // with a host name, ip address and port. If not, try to obtain this // information by examining online servers. vector server_list; for (vector::const_iterator i = specified_servers.begin (); i != specified_servers.end (); ++i) { // If we have an ip address and were given a port number, then just use the one we've // been given. Otherwise, check for matching compatible online servers and try their // ip addresses and ports. if (i->hasAddress() && i->fully_specified) nss_add_server_info (*i, server_list); else { // Obtain a list of online servers. vector online_servers; nss_get_or_keep_online_server_info (s, online_servers, false/*keep*/); // If no specific server (port) has been specified, // then we'll need the servers to be // compatible and possibly trusted as signers as well. if (! i->fully_specified) { nss_get_or_keep_compatible_server_info (s, online_servers, true/*keep*/); if (! pr_contains (s.privilege, pr_stapdev)) nss_get_or_keep_signing_server_info (s, online_servers, true/*keep*/); } // Keep the ones (if any) which match our server. nss_keep_common_server_info (*i, online_servers); // Add these servers (if any) to the server list. nss_add_server_info (online_servers, server_list); } } // Did we identify any potential servers? unsigned limit = server_list.size (); if (limit == 0) { clog << _("Unable to find a suitable compile server. [man stap-server]") << endl; // Try to explain why. vector online_servers; nss_get_or_keep_online_server_info (s, online_servers, false/*keep*/); if (online_servers.empty ()) clog << _("No servers online to select from.") << endl; else { clog << _("The following servers are online:") << endl; clog << online_servers; if (! specified_servers.empty ()) { clog << _("The following servers were requested:") << endl; clog << specified_servers; } else { string criteria = "online,trusted,compatible"; if (! pr_contains (s.privilege, pr_stapdev)) criteria += ",signer"; clog << _F("No servers matched the selection criteria of %s.", criteria.c_str()) << endl; } } return 1; } // Sort the list of servers into a preferred order. preferred_order (server_list); // Now try each of the identified servers in turn. int rc = compile_using_server (server_list); if (rc == NSS_SUCCESS) return 0; // success! // If the error was that a server's cert was expired, try again. This is because the server // should generate a new cert which may be automatically trusted by us if it is our server. // Give the server a chance to do this before retrying. if (rc == NSS_SERVER_CERT_EXPIRED_ERROR) { if (s.verbose >= 2) clog << _("The server's certificate was expired. Trying again") << endl << flush; sleep (2); rc = compile_using_server (server_list); if (rc == NSS_SUCCESS) return 0; // success! } // We were unable to use any available server clog << _("Unable to connect to a server.") << endl; if (s.verbose == 1) { // This information is redundant at higher verbosity levels. clog << _("The following servers were tried:") << endl; clog << server_list; } return 1; // Failure } int nss_client_backend::compile_using_server ( vector &servers ) { NSSInitContext *context; // Make sure NSPR is initialized. Must be done before NSS is initialized s.NSPR_init (); // Attempt connection using each of the available client certificate // databases. Assume the server certificate is invalid until proven otherwise. PR_SetError (SEC_ERROR_CA_CERT_INVALID, 0); vector dbs = private_ssl_dbs; vector::iterator i = dbs.end(); dbs.insert (i, public_ssl_dbs.begin (), public_ssl_dbs.end ()); int rc = NSS_GENERAL_ERROR; // assume failure bool serverCertExpired = false; for (i = dbs.begin (); i != dbs.end (); ++i) { // Make sure the database directory exists. It is not an error if it // doesn't. if (! file_exists (*i)) continue; #if 0 // no client authentication for now. // Set our password function callback. PK11_SetPasswordFunc (myPasswd); #endif // Initialize the NSS libraries. const char *cert_dir = i->c_str (); context = nssInitContext (cert_dir); if (context == NULL) { // Message already issued. continue; // try next database } // Enable all cipher suites. // SSL_ClearSessionCache is required for the new settings to take effect. /* Some NSS versions don't do this correctly in NSS_SetDomesticPolicy. */ do { const PRUint16 *cipher; for (cipher = SSL_GetImplementedCiphers(); *cipher != 0; ++cipher) SSL_CipherPolicySet(*cipher, SSL_ALLOWED); } while (0); SSL_ClearSessionCache (); server_zipfile = s.tmpdir + "/server.zip"; // Try each server in turn. for (vector::iterator j = servers.begin (); j != servers.end (); ++j) { // At a minimum we need an ip_address along with a port // number in order to contact the server. if (! j->hasAddress() || j->port == 0) continue; // Set the port within the address. j->setAddressPort (j->port); if (s.verbose >= 2) clog << _F("Attempting SSL connection with %s\n" " using certificates from the database in %s\n", lex_cast(*j).c_str(), cert_dir); rc = client_connect (*j, client_zipfile.c_str(), server_zipfile.c_str (), NULL/*trustNewServer_p*/); if (rc == NSS_SUCCESS) { s.winning_server = lex_cast(*j); break; // Success! } // Server cert has expired. Try other servers and/or databases, but take note because // server should generate a new certificate. If no other servers succeed, we'll try again // in case the new cert works. if (rc == NSS_SERVER_CERT_EXPIRED_ERROR) { serverCertExpired = true; continue; } if (s.verbose >= 2) { clog << _(" Unable to connect: "); nssError (); // Additional information: if the address is IPv6 and is link-local, then it must // have a scope_id. if (isIPv6LinkLocal (j->address) && j->address.ipv6.scope_id == 0) { clog << _(" The address is an IPv6 link-local address with no scope specifier.") << endl; } } } // SSL_ClearSessionCache is required before shutdown for client applications. SSL_ClearSessionCache (); nssCleanup (cert_dir, context); if (rc == SECSuccess) break; // Success! } // Indicate whether a server cert was expired, so we can try again, if desired. if (rc != NSS_SUCCESS) { if (serverCertExpired) rc = NSS_SERVER_CERT_EXPIRED_ERROR; } return rc; } int nss_client_backend::unpack_response () { // Unzip the response package. vector cmd { "unzip", "-qd", server_tmpdir, server_zipfile }; int rc = stap_system (s.verbose, cmd); if (rc != 0) { clog << _F("Unable to unzip the server response '%s'\n", server_zipfile.c_str()); return rc; } // Determine the server protocol version. string filename = server_tmpdir + "/version"; if (file_exists (filename)) read_from_file (filename, server_version); // Warn about the shortcomings of this server, if it is down level. show_server_compatibility (); // If the server's response contains a systemtap temp directory, move // its contents to our temp directory. glob_t globbuf; string filespec = server_tmpdir + "/stap??????"; if (s.verbose >= 3) clog << _F("Searching \"%s\"\n", filespec.c_str()); int r = glob(filespec.c_str (), 0, NULL, & globbuf); if (r != GLOB_NOSPACE && r != GLOB_ABORTED && r != GLOB_NOMATCH) { if (globbuf.gl_pathc > 1) { clog << _("Incorrect number of files in server response") << endl; rc = 1; goto done; } assert (globbuf.gl_pathc == 1); string dirname = globbuf.gl_pathv[0]; if (s.verbose >= 3) clog << _(" found ") << dirname << endl; filespec = dirname + "/*"; if (s.verbose >= 3) clog << _F("Searching \"%s\"\n", filespec.c_str()); globfree(&globbuf); int r = glob(filespec.c_str (), GLOB_PERIOD, NULL, & globbuf); if (r != GLOB_NOSPACE && r != GLOB_ABORTED && r != GLOB_NOMATCH) { unsigned prefix_len = dirname.size () + 1; for (unsigned i = 0; i < globbuf.gl_pathc; ++i) { string oldname = globbuf.gl_pathv[i]; if (oldname.substr (oldname.size () - 2) == "/." || oldname.substr (oldname.size () - 3) == "/..") continue; string newname = s.tmpdir + "/" + oldname.substr (prefix_len); if (s.verbose >= 3) clog << _F(" found %s -- linking from %s", oldname.c_str(), newname.c_str()); rc = symlink (oldname.c_str (), newname.c_str ()); if (rc != 0) { clog << _F("Unable to link '%s' to '%s':%s\n", oldname.c_str(), newname.c_str(), strerror(errno)); goto done; } } } } // If the server version is less that 1.6, remove the output line due to the synthetic // server-side -k. Look for a message containing the name of the temporary directory. // We can look for the English message since server versions before 1.6 do not support // localization. if (server_version < "1.6") { cmd = { "sed", "-i", "/^Keeping temporary directory.*/ d", server_tmpdir + "/stderr" }; stap_system (s.verbose, cmd); } // Remove the output line due to the synthetic server-side -p4 cmd = { "sed", "-i", "/^.*\\.ko$/ d", server_tmpdir + "/stdout" }; stap_system (s.verbose, cmd); done: globfree (& globbuf); return rc; } void nss_client_backend::show_server_compatibility () const { // Locale sensitivity was added in version 1.6 if (server_version < "1.6") { clog << _F("Server protocol version is %s\n", server_version.v); clog << _("The server does not use localization information passed by the client\n"); } } int nss_client_backend::trust_server_info (const compile_server_info &server) { return client_connect (server, NULL, NULL, "permanent"); } #endif // HAVE_NSS /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/client-nss.h000066400000000000000000000035401356460210500156440ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2017-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CLIENT_NSS_H #define CLIENT_NSS_H #if HAVE_NSS #include "session.h" #include "csclient.h" #include "cscommon.h" #include "nss-server-info.h" #include #include // Utility functions void nss_client_query_server_status (systemtap_session &s); void nss_client_manage_server_trust (systemtap_session &s); class nss_client_backend : public client_backend { public: nss_client_backend (systemtap_session &s); int initialize (); int add_protocol_version (const std::string &version); int add_sysinfo (); int include_file_or_directory (const std::string &subdir, const std::string &path, const bool add_arg = true); int add_tmpdir_file (const std::string &) { return 0; }; int add_cmd_arg (const std::string &arg); void add_localization_variable(const std::string &var, const std::string &value); int finalize_localization_variables(); void add_mok_fingerprint(const std::string &fingerprint); int finalize_mok_fingerprints(); void fill_in_server_info (compile_server_info &) { return; }; int trust_server_info (const compile_server_info &server); int package_request (); int find_and_connect_to_server (); int unpack_response (); private: unsigned argc; std::string client_zipfile; std::string server_zipfile; std::string locale_vars; std::ostringstream mok_fingerprints; std::vector private_ssl_dbs; std::vector public_ssl_dbs; int compile_using_server (std::vector &servers); void show_server_compatibility () const; }; #endif // HAVE_NSS #endif // CLIENT_NSS_H systemtap-4.2/cmdline.cxx000066400000000000000000000114451356460210500155560ustar00rootroot00000000000000// Shared data for parsing the stap command line // Copyright (C) 2014-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include #include "cmdline.h" // NB: when adding new options, consider very carefully whether they // should be restricted from stap clients (after --client-options)! struct option stap_long_options[] = { { "skip-badvars", no_argument, NULL, LONG_OPT_SKIP_BADVARS }, { "vp", required_argument, NULL, LONG_OPT_VERBOSE_PASS }, { "unprivileged", no_argument, NULL, LONG_OPT_UNPRIVILEGED }, { "client-options", no_argument, NULL, LONG_OPT_CLIENT_OPTIONS }, { "help", no_argument, NULL, LONG_OPT_HELP }, { "disable-cache", no_argument, NULL, LONG_OPT_DISABLE_CACHE }, { "poison-cache", no_argument, NULL, LONG_OPT_POISON_CACHE }, { "clean-cache", no_argument, NULL, LONG_OPT_CLEAN_CACHE }, { "compatible", required_argument, NULL, LONG_OPT_COMPATIBLE }, { "ldd", no_argument, NULL, LONG_OPT_LDD }, { "use-server", optional_argument, NULL, LONG_OPT_USE_SERVER }, { "list-servers", optional_argument, NULL, LONG_OPT_LIST_SERVERS }, { "trust-servers", optional_argument, NULL, LONG_OPT_TRUST_SERVERS }, { "use-server-on-error", optional_argument, NULL, LONG_OPT_USE_SERVER_ON_ERROR }, { "use-http-server", required_argument, NULL, LONG_OPT_USE_HTTP_SERVER }, { "all-modules", no_argument, NULL, LONG_OPT_ALL_MODULES }, { "remote", required_argument, NULL, LONG_OPT_REMOTE }, { "remote-prefix", no_argument, NULL, LONG_OPT_REMOTE_PREFIX }, { "check-version", no_argument, NULL, LONG_OPT_CHECK_VERSION }, { "version", no_argument, NULL, LONG_OPT_VERSION }, { "tmpdir", required_argument, NULL, LONG_OPT_TMPDIR }, { "download-debuginfo", optional_argument, NULL, LONG_OPT_DOWNLOAD_DEBUGINFO }, { "dump-probe-types", no_argument, NULL, LONG_OPT_DUMP_PROBE_TYPES }, { "dump-probe-aliases", no_argument, NULL, LONG_OPT_DUMP_PROBE_ALIASES }, { "dump-functions", no_argument, NULL, LONG_OPT_DUMP_FUNCTIONS }, { "privilege", required_argument, NULL, LONG_OPT_PRIVILEGE }, { "suppress-handler-errors", no_argument, NULL, LONG_OPT_SUPPRESS_HANDLER_ERRORS }, { "modinfo", required_argument, NULL, LONG_OPT_MODINFO }, { "rlimit-as", required_argument, NULL, LONG_OPT_RLIMIT_AS }, { "rlimit-cpu", required_argument, NULL, LONG_OPT_RLIMIT_CPU }, { "rlimit-nproc", required_argument, NULL, LONG_OPT_RLIMIT_NPROC }, { "rlimit-stack", required_argument, NULL, LONG_OPT_RLIMIT_STACK }, { "rlimit-fsize", required_argument, NULL, LONG_OPT_RLIMIT_FSIZE }, { "sysroot", required_argument, NULL, LONG_OPT_SYSROOT }, { "sysenv", required_argument, NULL, LONG_OPT_SYSENV }, { "suppress-time-limits", no_argument, NULL, LONG_OPT_SUPPRESS_TIME_LIMITS }, { "runtime", required_argument, NULL, LONG_OPT_RUNTIME }, { "dyninst", no_argument, NULL, LONG_OPT_RUNTIME_DYNINST }, { "bpf", no_argument, NULL, LONG_OPT_RUNTIME_BPF }, { "benchmark-sdt", no_argument, NULL, LONG_OPT_BENCHMARK_SDT }, { "benchmark-sdt-loops", required_argument, NULL, LONG_OPT_BENCHMARK_SDT_LOOPS }, { "benchmark-sdt-threads", required_argument, NULL, LONG_OPT_BENCHMARK_SDT_THREADS }, { "color", optional_argument, NULL, LONG_OPT_COLOR_ERRS }, { "colour", optional_argument, NULL, LONG_OPT_COLOR_ERRS }, { "prologue-searching", optional_argument, NULL, LONG_OPT_PROLOGUE_SEARCHING }, { "save-uprobes", no_argument, NULL, LONG_OPT_SAVE_UPROBES }, { "target-namespaces", required_argument, NULL, LONG_OPT_TARGET_NAMESPACES }, { "monitor", optional_argument, NULL, LONG_OPT_MONITOR }, { "interactive", no_argument, NULL, LONG_OPT_INTERACTIVE}, { "example", no_argument, NULL, LONG_OPT_RUN_EXAMPLE}, { "no-global-var-display", no_argument, NULL, LONG_OPT_NO_GLOBAL_VAR_DISPLAY}, { NULL, 0, NULL, 0 } }; systemtap-4.2/cmdline.h000066400000000000000000000042541356460210500152030ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2014-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CMDLINE_H #define CMDLINE_H 1 extern "C" { #include } // NB: when adding new options, consider very carefully whether they // should be restricted from stap clients (after --client-options)! // NB: The values of these enumerators must not conflict with the values of ordinary // characters, since those are returned by getopt_long for short options. enum { LONG_OPT_VERBOSE_PASS = 256, LONG_OPT_SKIP_BADVARS, LONG_OPT_UNPRIVILEGED, LONG_OPT_CLIENT_OPTIONS, LONG_OPT_HELP, LONG_OPT_DISABLE_CACHE, LONG_OPT_POISON_CACHE, LONG_OPT_CLEAN_CACHE, LONG_OPT_COMPATIBLE, LONG_OPT_LDD, LONG_OPT_USE_SERVER, LONG_OPT_LIST_SERVERS, LONG_OPT_TRUST_SERVERS, LONG_OPT_USE_HTTP_SERVER, LONG_OPT_ALL_MODULES, LONG_OPT_REMOTE, LONG_OPT_CHECK_VERSION, LONG_OPT_USE_SERVER_ON_ERROR, LONG_OPT_VERSION, LONG_OPT_REMOTE_PREFIX, LONG_OPT_TMPDIR, LONG_OPT_DOWNLOAD_DEBUGINFO, LONG_OPT_DUMP_PROBE_TYPES, LONG_OPT_DUMP_PROBE_ALIASES, LONG_OPT_DUMP_FUNCTIONS, LONG_OPT_PRIVILEGE, LONG_OPT_SUPPRESS_HANDLER_ERRORS, LONG_OPT_MODINFO, LONG_OPT_RLIMIT_AS, LONG_OPT_RLIMIT_CPU, LONG_OPT_RLIMIT_NPROC, LONG_OPT_RLIMIT_STACK, LONG_OPT_RLIMIT_FSIZE, LONG_OPT_SYSROOT, LONG_OPT_SYSENV, LONG_OPT_SUPPRESS_TIME_LIMITS, LONG_OPT_RUNTIME, LONG_OPT_RUNTIME_DYNINST, LONG_OPT_RUNTIME_BPF, LONG_OPT_BENCHMARK_SDT, LONG_OPT_BENCHMARK_SDT_LOOPS, LONG_OPT_BENCHMARK_SDT_THREADS, LONG_OPT_COLOR_ERRS, LONG_OPT_PROLOGUE_SEARCHING, LONG_OPT_SAVE_UPROBES, LONG_OPT_TARGET_NAMESPACES, LONG_OPT_MONITOR, LONG_OPT_INTERACTIVE, LONG_OPT_RUN_EXAMPLE, LONG_OPT_NO_GLOBAL_VAR_DISPLAY, }; // NB: when adding new options, consider very carefully whether they // should be restricted from stap clients (after --client-options)! #define STAP_SHORT_OPTIONS "hVvtp:I:e:E:o:R:r:a:m:kgPc:x:D:bs:uqiwl:d:L:FS:B:J:jWG:T:" extern struct option stap_long_options[]; #endif // CMDLINE_H systemtap-4.2/compile000077500000000000000000000162451356460210500150000ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can 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, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemtap-4.2/config.guess000077500000000000000000001236721356460210500157450ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: systemtap-4.2/config.in000066400000000000000000000144421356460210500152140ustar00rootroot00000000000000/* config.in. Generated from configure.ac by autoheader. */ /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* make -P prologue-searching default */ #undef ENABLE_PROLOGUES /* Define to 1 to enable process.mark probes in stap, staprun, stapio. */ #undef ENABLE_SDT_PROBES /* Define to 1 if you have the avahi libraries. */ #undef HAVE_AVAHI /* Define to 1 if you have the header file. */ #undef HAVE_BOOST_UTILITY_STRING_REF_HPP /* Define to 1 if you have the header file. */ #undef HAVE_BPATCH_OBJECT_H /* Define to 1 if you have the necessary declarations in bpf.h */ #undef HAVE_BPF_DECLS /* Define to 1 if you have the necessary declarations in bpf.h */ #undef HAVE_BPF_PROG_TYPE_RAW_TRACEPOINT /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the header file. */ #undef HAVE_CRASH_DEFS_H /* define if the compiler supports basic C++11 syntax */ #undef HAVE_CXX11 /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `BPF_PROG_TYPE_PERF_EVENT', and to 0 if you don't. */ #undef HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT /* Define to 1 if you have the declaration of `BPF_PROG_TYPE_RAW_TRACEPOINT', and to 0 if you don't. */ #undef HAVE_DECL_BPF_PROG_TYPE_RAW_TRACEPOINT /* Define to 1 if Dyninst is enabled */ #undef HAVE_DYNINST /* Define to 1 if F_SETPIPE_SZ is available. */ #undef HAVE_F_SETPIPE_SZ /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 to enable http web service support in systemtap. */ #undef HAVE_HTTP_SUPPORT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Flag indicating that libHelperSDT.so is available (can be found in PKGLIBDIR) */ #undef HAVE_JAVA /* Define to 1 if you have the `dw' library (-ldw). */ #undef HAVE_LIBDW /* Define to 1 if you have the `elf' library (-lelf). */ #undef HAVE_LIBELF /* Define if you have the readline library (-lreadline). */ #undef HAVE_LIBREADLINE /* have librpm */ #undef HAVE_LIBRPM /* have librpmio */ #undef HAVE_LIBRPMIO /* Define to 1 if you have the 'sqlite3' library (-lsqlite3). */ #undef HAVE_LIBSQLITE3 /* Define to 1 if libvirt development libraries are installed */ #undef HAVE_LIBVIRT /* Define to 1 if libxml2 development libraries are installed */ #undef HAVE_LIBXML2 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if json-c and ncurses libraries are installed */ #undef HAVE_MONITOR_LIBS /* Define to 1 if you have the nss libraries. */ #undef HAVE_NSS /* Define to 1 if you have the `openat' function. */ #undef HAVE_OPENAT /* Define to 1 if you have the openssl libraries. */ #undef HAVE_OPENSSL /* Define to 1 if you have the `ppoll' function. */ #undef HAVE_PPOLL /* Define to 1 to enable python version 2 probe support in systemtap. */ #undef HAVE_PYTHON2_PROBES /* Define to 1 to enable python version 3 probe support in systemtap. */ #undef HAVE_PYTHON3_PROBES /* Define to 1 if you have the header file. */ #undef HAVE_PYTHON_H /* Define to 1 if you have the SELinux libraries. */ #undef HAVE_SELINUX /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the base client code is needed. */ #undef NEED_BASE_CLIENT_CODE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Base name of the python3 interpreter binary. */ #undef PYTHON3_BASENAME /* The python3 interpreter binary exists. */ #undef PYTHON3_EXISTS /* Base name of the python2 interpreter binary. */ #undef PYTHON_BASENAME /* The python2 interpreter binary exists. */ #undef PYTHON_EXISTS /* extra stap version code */ #undef STAP_EXTRA_VERSION /* configure prefix location */ #undef STAP_PREFIX /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE systemtap-4.2/config.rpath000077500000000000000000000442161356460210500157310ustar00rootroot00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2014 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: systemtap-4.2/configure000077500000000000000000015752051356460210500153400ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for systemtap 4.2. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: systemtap@sourceware.org about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='systemtap' PACKAGE_TARNAME='systemtap' PACKAGE_VERSION='4.2' PACKAGE_STRING='systemtap 4.2' PACKAGE_BUGREPORT='systemtap@sourceware.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gt_needs= enable_option_checking=no ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS subdirs STAP_PREFIX NEED_BASE_CLIENT_CODE_FALSE NEED_BASE_CLIENT_CODE_TRUE HAVE_HTTP_SUPPORT_FALSE HAVE_HTTP_SUPPORT_TRUE libcurl_LIBS libcurl_CFLAGS uuid_LIBS uuid_CFLAGS libmicrohttpd_LIBS libmicrohttpd_CFLAGS STAP_EXTRA_VERSION LOCALEDIR ENABLE_NLS HAVE_JAVA_FALSE HAVE_JAVA_TRUE JAVADIR have_jar have_javac HAVE_SELINUX_FALSE HAVE_SELINUX_TRUE selinux_LIBS selinux_CFLAGS HAVE_BPF_DECLS_FALSE HAVE_BPF_DECLS_TRUE support_section_question HAVE_MONITOR_LIBS_FALSE HAVE_MONITOR_LIBS_TRUE ncurses_LIBS ncurses_CFLAGS jsonc_LIBS jsonc_CFLAGS HAVE_PYTHON_PROBES_FALSE HAVE_PYTHON_PROBES_TRUE HAVE_PYTHON3_PROBES_FALSE HAVE_PYTHON3_PROBES_TRUE PYTHON3_CPPFLAGS PYTHON3_CONFIG HAVE_PYTHON2_PROBES_FALSE HAVE_PYTHON2_PROBES_TRUE PYTHON_CPPFLAGS PYTHON_CONFIG BUILD_VIRT_FALSE BUILD_VIRT_TRUE HAVE_LIBXML2_FALSE HAVE_LIBXML2_TRUE libxml2_LIBS libxml2_CFLAGS HAVE_LIBVIRT_FALSE HAVE_LIBVIRT_TRUE libvirt_LIBS libvirt_CFLAGS HAVE_DYNINST_FALSE HAVE_DYNINST_TRUE DYNINST_LDFLAGS DYNINST_CXXFLAGS BOOST_SYSTEM_LIB CXXCPP stapbpf_LIBS staprun_LIBS stap_LIBS elfutils_abs_srcdir BUILD_ELFUTILS_FALSE BUILD_ELFUTILS_TRUE preferred_python HAVE_LIBREADLINE_FALSE HAVE_LIBREADLINE_TRUE READLINE_LIBS HAVE_AVAHI_FALSE HAVE_AVAHI_TRUE avahi_LIBS avahi_CFLAGS BUILD_SERVER_FALSE BUILD_SERVER_TRUE dracutbindir dracutstap HAVE_OPENSSL_FALSE HAVE_OPENSSL_TRUE openssl_LIBS openssl_CFLAGS HAVE_NSS_FALSE HAVE_NSS_TRUE nss_LIBS nss_CFLAGS XMLTO_STRINGPARAM_FALSE XMLTO_STRINGPARAM_TRUE BUILD_HTMLDOCS_FALSE BUILD_HTMLDOCS_TRUE HAVE_XMLTO_FALSE HAVE_XMLTO_TRUE HAVE_FOP_FALSE HAVE_FOP_TRUE have_fop have_xmlto BUILD_REFDOCS_FALSE BUILD_REFDOCS_TRUE INSTALL_PREBUILT_DOCS_FALSE INSTALL_PREBUILT_DOCS_TRUE BUILD_DOCS_FALSE BUILD_DOCS_TRUE have_ps2pdf have_dvips have_latex BUILD_CRASHMOD_FALSE BUILD_CRASHMOD_TRUE staplog_CPPFLAGS BUILD_TRANSLATOR_FALSE BUILD_TRANSLATOR_TRUE sqlite3_LIBS sqlite3_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG PIECXXFLAGS PIECFLAGS PIELDFLAGS HAVE_CXX11 py3execdir python3dir PYTHON3_PLATFORM PYTHON3_EXEC_PREFIX PYTHON3_PREFIX PYTHON3_VERSION PYTHON3 pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON PYTHON_UNKNOWN POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS SED RANLIB am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX LN_S EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_largefile enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix enable_prologues enable_sdt_probes enable_ssp enable_pie enable_sqlite enable_translator enable_crash enable_docs enable_refdocs enable_htmldocs with_nss with_openssl with_dracutstap with_dracutbindir enable_server with_avahi with_rpm with_python3 with_elfutils with_dyninst enable_virt enable_libvirt with_python2_probes with_python3_probes enable_monitor with_bpf with_selinux with_java with_extra_version enable_http ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC PYTHON PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR sqlite3_CFLAGS sqlite3_LIBS nss_CFLAGS nss_LIBS openssl_CFLAGS openssl_LIBS avahi_CFLAGS avahi_LIBS CXXCPP libvirt_CFLAGS libvirt_LIBS libxml2_CFLAGS libxml2_LIBS jsonc_CFLAGS jsonc_LIBS ncurses_CFLAGS ncurses_LIBS selinux_CFLAGS selinux_LIBS libmicrohttpd_CFLAGS libmicrohttpd_LIBS uuid_CFLAGS uuid_LIBS libcurl_CFLAGS libcurl_LIBS' ac_subdirs_all='testsuite' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures systemtap 4.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/systemtap] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of systemtap 4.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-largefile omit support for large files --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --enable-prologues make -P prologue-searching default --disable-sdt-probes disable process.mark probes in stap, staprun, stapio --disable-ssp disable gcc stack-protector --enable-pie enable position-independent-executable --enable-sqlite build with sqlite support --disable-translator build only runtime utilities --enable-crash[=DIRECTORY] enable crash extension (default is disabled). Optional DIRECTORY is the path to the crash header file (needed if installed in a non-standard location). --enable-docs enable building documentation (default to only installing prebuilt docs). --enable-refdocs enable building reference documentation (default on if other documentation built). --enable-htmldocs enable building html documentation (default off). --enable-server enable building of stap-server (default on if nss etc. found). --enable-virt enable building of stapvirt support (default on if libvirt etc. found). --disable-libvirt Do not use libvirt even if present --disable-monitor Disable monitor --enable-http Enable building http web compilation service, if possible Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --without-nss Do not use NSS even if present --without-openssl Do not use OPENSSL even if present --with-dracutstap=DIR Install dracut module files in DIR --with-dracutbindir=DIR Use the dracut binary located in DIR --without-avahi Do not use Avahi even if present --with-rpm query rpm database for missing debuginfos --with-python3 prefer python version 3 --with-elfutils=DIRECTORY find elfutils source code in DIRECTORY --with-dyninst=DIRECTORY find dyninst headers/libraries in DIRECTORY --without-python2-probes Disable building python version 2 probe support, even if it is available --without-python3-probes Disable building python version 3 probe support, even if it is available --without-bpf Do not try to build BPF components --without-selinux Do not use libselinux even if present --with-java=DIRECTORY Specify JDK directory to compile libHelperSDT.so against (default is /usr/lib/jvm/java) --with-extra-version=STRING Add STRING to stap -V version Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags PYTHON the Python interpreter PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path sqlite3_CFLAGS C compiler flags for sqlite3, overriding pkg-config sqlite3_LIBS linker flags for sqlite3, overriding pkg-config nss_CFLAGS C compiler flags for nss, overriding pkg-config nss_LIBS linker flags for nss, overriding pkg-config openssl_CFLAGS C compiler flags for openssl, overriding pkg-config openssl_LIBS linker flags for openssl, overriding pkg-config avahi_CFLAGS C compiler flags for avahi, overriding pkg-config avahi_LIBS linker flags for avahi, overriding pkg-config CXXCPP C++ preprocessor libvirt_CFLAGS C compiler flags for libvirt, overriding pkg-config libvirt_LIBS linker flags for libvirt, overriding pkg-config libxml2_CFLAGS C compiler flags for libxml2, overriding pkg-config libxml2_LIBS linker flags for libxml2, overriding pkg-config jsonc_CFLAGS C compiler flags for jsonc, overriding pkg-config jsonc_LIBS linker flags for jsonc, overriding pkg-config ncurses_CFLAGS C compiler flags for ncurses, overriding pkg-config ncurses_LIBS linker flags for ncurses, overriding pkg-config selinux_CFLAGS C compiler flags for selinux, overriding pkg-config selinux_LIBS linker flags for selinux, overriding pkg-config libmicrohttpd_CFLAGS C compiler flags for libmicrohttpd, overriding pkg-config libmicrohttpd_LIBS linker flags for libmicrohttpd, overriding pkg-config uuid_CFLAGS C compiler flags for uuid, overriding pkg-config uuid_LIBS linker flags for uuid, overriding pkg-config libcurl_CFLAGS C compiler flags for libcurl, overriding pkg-config libcurl_LIBS linker flags for libcurl, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF systemtap configure 4.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------------- ## ## Report this to systemtap@sourceware.org ## ## --------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------------- ## ## Report this to systemtap@sourceware.org ## ## --------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by systemtap $as_me 4.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='systemtap' VERSION='4.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi for ac_func in ppoll do : ac_fn_c_check_func "$LINENO" "ppoll" "ac_cv_func_ppoll" if test "x$ac_cv_func_ppoll" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PPOLL 1 _ACEOF fi done for ac_func in openat do : ac_fn_c_check_func "$LINENO" "openat" "ac_cv_func_openat" if test "x$ac_cv_func_openat" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENAT 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" # We want the 'PYTHON' varible to be python version 2. We also want # our custom 'PYTHON3' varible to be python version 3. # # Note that the python2/python3 code was inspired by code in the # 'abrt' configure: # # # First, figure out what version of python is in the executable named # 'python'. On most systems that is python version 2, but on arch # linux that is python version 3. # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON_UNKNOWN+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON_UNKNOWN in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_UNKNOWN="$PYTHON_UNKNOWN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON_UNKNOWN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PYTHON_UNKNOWN" && ac_cv_path_PYTHON_UNKNOWN="no" ;; esac fi PYTHON_UNKNOWN=$ac_cv_path_PYTHON_UNKNOWN if test -n "$PYTHON_UNKNOWN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_UNKNOWN" >&5 $as_echo "$PYTHON_UNKNOWN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PYTHON_UNKNOWN" != "xno"; then # OK, we found 'python'. What version is it? { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON_UNKNOWN is version 2 or 3" >&5 $as_echo_n "checking whether $PYTHON_UNKNOWN is version 2 or 3... " >&6; } if ${ac_cv_python_unknown_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python_unknown_version=`$PYTHON_UNKNOWN -c "import sys; sys.stdout.write(sys.version[:3][0])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_unknown_version" >&5 $as_echo "$ac_cv_python_unknown_version" >&6; } fi # Now we'll update the _AM_PYTHON_INTERPRETER_LIST variable (which # AM_PATH_PYTHON uses) to only be version 2 versions of python. Note # that the m4_define happens when autoconf is run, but the # PLAIN_PYTHON_INTERPRETER variable expansion will happen when the # user runs configure. # # Note that for python2, we prefer an executable named 'python2' over # one just named 'python'. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x2"; then PLAIN_PYTHON_INTERPRETER=python else PLAIN_PYTHON_INTERPRETER=python2 fi # Now we can call AM_PATH_PYTHON to find python version 2.6+ (and # version 2 only). if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.6" >&5 $as_echo_n "checking whether $PYTHON version is >= 2.6... " >&6; } prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 ($PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Python interpreter is too old" "$LINENO" 5 fi am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.6" >&5 $as_echo_n "checking for a Python interpreter with version >= 2.6... " >&6; } if ${am_cv_pathless_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else for am_cv_pathless_PYTHON in python2 $PLAIN_PYTHON_INTERPRETER python2.7 python2.6 none; do test "$am_cv_pathless_PYTHON" = none && break prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 $as_echo "$am_cv_pathless_PYTHON" >&6; } # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. set dummy $am_cv_pathless_PYTHON; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi am_display_PYTHON=$am_cv_pathless_PYTHON fi if test "$PYTHON" = :; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if ${am_cv_python_version+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if ${am_cv_python_platform+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[:3] == '2.7': can_use_sysconfig = 0 except ImportError: pass" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi python_basename=$(basename "$PYTHON") cat >>confdefs.h <<_ACEOF #define PYTHON_BASENAME "${python_basename}" _ACEOF if test "x$PYTHON" != "x:"; then $as_echo "#define PYTHON_EXISTS /**/" >>confdefs.h fi # AM_PATH_PYTHON defines 'pyexecdir'. Make sure the python and # pyexecdir variables get sent down to the subconfigure in the # testsuite directory. as_fn_append ac_configure_args " python='$PYTHON' pyexecdir='$pyexecdir'" # Now let's try to find python version 3. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x3"; then # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON3+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON3 in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON3="$PYTHON3" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON3="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON3=$ac_cv_path_PYTHON3 if test -n "$PYTHON3"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3" >&5 $as_echo "$PYTHON3" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else for ac_prog in python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON3+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON3 in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON3="$PYTHON3" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON3="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON3=$ac_cv_path_PYTHON3 if test -n "$PYTHON3"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3" >&5 $as_echo "$PYTHON3" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON3" && break done test -n "$PYTHON3" || PYTHON3=":" fi python3_basename=$(basename "$PYTHON3") cat >>confdefs.h <<_ACEOF #define PYTHON3_BASENAME "${python3_basename}" _ACEOF # If we found python version 3, set up the other variables for python # version 3 that AM_PATH_PYTHON sets up for python version 2. if test "x$PYTHON3" != "x:"; then $as_echo "#define PYTHON3_EXISTS /**/" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 version" >&5 $as_echo_n "checking for python3 version... " >&6; } if ${ac_cv_python3_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python3_version=`$PYTHON3 -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_version" >&5 $as_echo "$ac_cv_python3_version" >&6; } PYTHON3_VERSION=$ac_cv_python3_version PYTHON3_PREFIX='${prefix}' PYTHON3_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 platform" >&5 $as_echo_n "checking for python3 platform... " >&6; } if ${ac_cv_python3_platform+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python3_platform=`$PYTHON3 -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_platform" >&5 $as_echo "$ac_cv_python3_platform" >&6; } PYTHON3_PLATFORM=$ac_cv_python3_platform { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 script directory" >&5 $as_echo_n "checking for python3 script directory... " >&6; } if ${ac_cv_python3_dir+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python3_dir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(0,0,prefix='$PYTHON3_PREFIX'))"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_dir" >&5 $as_echo "$ac_cv_python3_dir" >&6; } python3dir=$ac_cv_python3_dir { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 extension module directory" >&5 $as_echo_n "checking for python3 extension module directory... " >&6; } if ${ac_cv_py3execdir+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_py3execdir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='$PYTHON3_EXEC_PREFIX'))"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_py3execdir" >&5 $as_echo "$ac_cv_py3execdir" >&6; } py3execdir=$ac_cv_py3execdir fi # Make sure the python3 and py3execdir variables get sent down to # the subconfigure in the testsuite directory. as_fn_append ac_configure_args " python3='$PYTHON3' py3execdir='$ac_cv_py3execdir'" if test "${enable_prologues+set}" != set; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if prologue searching should be the default" >&5 $as_echo_n "checking to see if prologue searching should be the default... " >&6; } if { echo '#if __i386__ == 1 && __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_prologues=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi # Check whether --enable-prologues was given. if test "${enable_prologues+set}" = set; then : enableval=$enable_prologues; if test "$enable_prologues" = yes; then $as_echo "#define ENABLE_PROLOGUES /**/" >>confdefs.h fi fi if test "${enable_sdt_probes+set}" != set; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if sdt probes should be the default" >&5 $as_echo_n "checking to see if sdt probes should be the default... " >&6; } if { echo '#if __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_sdt_probes=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # Check whether --enable-sdt-probes was given. if test "${enable_sdt_probes+set}" = set; then : enableval=$enable_sdt_probes; fi if test "x$enable_sdt_probes" != xno; then : $as_echo "#define ENABLE_SDT_PROBES 1" >>confdefs.h fi ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 $as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } if ${ax_cv_cxx_compile_cxx11+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_cxx_compile_cxx11=yes else ax_cv_cxx_compile_cxx11=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 $as_echo "$ax_cv_cxx_compile_cxx11" >&6; } if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 $as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval \${$cachevar+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes else eval $cachevar=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then CXXCPP="$CXXCPP $switch" fi ac_success=yes break fi done if test x$ac_success = xyes; then break fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 fi fi if test x$ac_success = xno; then HAVE_CXX11=0 { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 $as_echo "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi have_cxx0x="no" if test "x$HAVE_CXX11" != x1; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -std=c++0x" >&5 $as_echo_n "checking whether C++ compiler accepts -std=c++0x... " >&6; } if ${ax_cv_check_cxxflags___std_cpp0x+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -std=c++0x" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_check_cxxflags___std_cpp0x=yes else ax_cv_check_cxxflags___std_cpp0x=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXXFLAGS=$ax_check_save_flags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___std_cpp0x" >&5 $as_echo "$ax_cv_check_cxxflags___std_cpp0x" >&6; } if test "x$ax_cv_check_cxxflags___std_cpp0x" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling with -std=c++0x" >&5 $as_echo "$as_me: Compiling with -std=c++0x" >&6;} CXX="$CXX -std=c++0x" HAVE_CXX11=1 have_cxx0x="yes" else as_fn_error $? "A compiler with C++11 support is required." "$LINENO" 5 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi # Check whether --enable-ssp was given. if test "${enable_ssp+set}" = set; then : enableval=$enable_ssp; fi if test "x$enable_ssp" != xno; then : save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="-Werror -fstack-protector-all -D_FORTIFY_SOURCE=2 $CXXFLAGS" CFLAGS="-Werror -fstack-protector-all -D_FORTIFY_SOURCE=2 $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int something (); _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling with gcc -fstack-protector-all et al." >&5 $as_echo "$as_me: Compiling with gcc -fstack-protector-all et al." >&6;} CFLAGS="-fstack-protector-all -D_FORTIFY_SOURCE=2 $save_CFLAGS" CXXFLAGS="-fstack-protector-all -D_FORTIFY_SOURCE=2 $save_CXXFLAGS" else { $as_echo "$as_me:${as_lineno-$LINENO}: Compiler does not support -fstack-protector-all et al." >&5 $as_echo "$as_me: Compiler does not support -fstack-protector-all et al." >&6;} CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi # Compiling with fPIE by default (but see PR 9922) # Check whether --enable-pie was given. if test "${enable_pie+set}" = set; then : enableval=$enable_pie; fi if test "x$enable_pie" != xno; then : PIECFLAGS='-fPIE' PIECXXFLAGS='-fPIE' PIELDFLAGS='-pie -Wl,-z,relro -Wl,-z,now' save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS $PIECFLAGS" CXXFLAGS="$CXXFLAGS $PIECXXFLAGS" LDFLAGS="$LDFLAGS $PIELDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ void main () {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling with gcc pie et al." >&5 $as_echo "$as_me: Compiling with gcc pie et al." >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Compiler does not support -pie et al." >&5 $as_echo "$as_me: Compiler does not support -pie et al." >&6;} PIECFLAGS="" PIECXXFLAGS="" PIELDFLAGS="" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" LDFLAGS="$save_LDFLAGS" fi # Check whether --enable-sqlite was given. if test "${enable_sqlite+set}" = set; then : enableval=$enable_sqlite; else enable_sqlite=check fi sqlite3_LIBS= if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi if test "x$enable_sqlite" != xno; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3" >&5 $as_echo_n "checking for sqlite3... " >&6; } if test -n "$sqlite3_CFLAGS"; then pkg_cv_sqlite3_CFLAGS="$sqlite3_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3 > 3.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3 > 3.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite3_CFLAGS=`$PKG_CONFIG --cflags "sqlite3 > 3.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sqlite3_LIBS"; then pkg_cv_sqlite3_LIBS="$sqlite3_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3 > 3.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3 > 3.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite3_LIBS=`$PKG_CONFIG --libs "sqlite3 > 3.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sqlite3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sqlite3 > 3.7" 2>&1` else sqlite3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sqlite3 > 3.7" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sqlite3_PKG_ERRORS" >&5 if test "x$enable_sqlite" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--enable-sqlite was given, but test for sqlite > 3.7 failed See \`config.log' for more details" "$LINENO" 5; } fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "x$enable_sqlite" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--enable-sqlite was given, but test for sqlite > 3.7 failed See \`config.log' for more details" "$LINENO" 5; } fi else sqlite3_CFLAGS=$pkg_cv_sqlite3_CFLAGS sqlite3_LIBS=$pkg_cv_sqlite3_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBSQLITE3 1" >>confdefs.h fi fi # Check whether --enable-translator was given. if test "${enable_translator+set}" = set; then : enableval=$enable_translator; else enable_translator="yes" fi if test "$enable_translator" == "yes"; then BUILD_TRANSLATOR_TRUE= BUILD_TRANSLATOR_FALSE='#' else BUILD_TRANSLATOR_TRUE='#' BUILD_TRANSLATOR_FALSE= fi # Check whether --enable-crash was given. if test "${enable_crash+set}" = set; then : enableval=$enable_crash; if test "$enable_crash" != "no"; then save_CPPFLAGS="$CPPFLAGS" if test "$enable_crash" != "yes"; then staplog_CPPFLAGS=-I$enable_crash CPPFLAGS="${staplog_CPPFLAGS} $CPPFLAGS" fi for ac_header in crash/defs.h do : ac_fn_c_check_header_compile "$LINENO" "crash/defs.h" "ac_cv_header_crash_defs_h" " #define NR_CPUS 256 " if test "x$ac_cv_header_crash_defs_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CRASH_DEFS_H 1 _ACEOF else as_fn_error $? "cannot find required crash header (crash-devel may need to be installed)" "$LINENO" 5 fi done CPPFLAGS="$save_CPPFLAGS" fi else enable_crash="no" fi if test "$enable_crash" != "no"; then BUILD_CRASHMOD_TRUE= BUILD_CRASHMOD_FALSE='#' else BUILD_CRASHMOD_TRUE='#' BUILD_CRASHMOD_FALSE= fi building_docs="no" installing_prebuilt_docs="yes" # Check whether --enable-docs was given. if test "${enable_docs+set}" = set; then : enableval=$enable_docs; enable_docs=$enableval else enable_docs="prebuilt" fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_latex+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_latex"; then ac_cv_prog_have_latex="$have_latex" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_latex="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_latex" && ac_cv_prog_have_latex="no" fi fi have_latex=$ac_cv_prog_have_latex if test -n "$have_latex"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_latex" >&5 $as_echo "$have_latex" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_dvips+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_dvips"; then ac_cv_prog_have_dvips="$have_dvips" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_dvips="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_dvips" && ac_cv_prog_have_dvips="no" fi fi have_dvips=$ac_cv_prog_have_dvips if test -n "$have_dvips"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_dvips" >&5 $as_echo "$have_dvips" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ps2pdf", so it can be a program name with args. set dummy ps2pdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_ps2pdf+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_ps2pdf"; then ac_cv_prog_have_ps2pdf="$have_ps2pdf" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_ps2pdf="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_ps2pdf" && ac_cv_prog_have_ps2pdf="no" fi fi have_ps2pdf=$ac_cv_prog_have_ps2pdf if test -n "$have_ps2pdf"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ps2pdf" >&5 $as_echo "$have_ps2pdf" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x${have_latex}${have_dvips}${have_ps2pdf}" != "xyesyesyes"; then if test "$enable_docs" == "yes"; then as_fn_error $? "cannot find all tools for building documentation" "$LINENO" 5 fi if test "$enable_docs" == "check"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build documentation, cannot find all tools" >&5 $as_echo "$as_me: WARNING: will not build documentation, cannot find all tools" >&2;} fi fi if test "$enable_docs" == "prebuilt"; then { $as_echo "$as_me:${as_lineno-$LINENO}: will only install prebuilt documentation" >&5 $as_echo "$as_me: will only install prebuilt documentation" >&6;} fi if test "x${have_latex}${have_dvips}${have_ps2pdf}" == "xyesyesyes" -a "$enable_docs" != "no" -a "$enable_docs" != "prebuilt"; then building_docs="yes" installing_prebuilt_docs="yes" fi if test "$enable_docs" == "no"; then installing_prebuilt_docs="no" fi if test "$building_docs" == "yes"; then BUILD_DOCS_TRUE= BUILD_DOCS_FALSE='#' else BUILD_DOCS_TRUE='#' BUILD_DOCS_FALSE= fi if test "$installing_prebuilt_docs" == "yes"; then INSTALL_PREBUILT_DOCS_TRUE= INSTALL_PREBUILT_DOCS_FALSE='#' else INSTALL_PREBUILT_DOCS_TRUE='#' INSTALL_PREBUILT_DOCS_FALSE= fi building_refdocs="no" # Check whether --enable-refdocs was given. if test "${enable_refdocs+set}" = set; then : enableval=$enable_refdocs; enable_refdocs=$enableval else enable_refdocs="check" fi if test "$building_docs" == "no" -a "$enable_refdocs" == "yes" ; then as_fn_error $? "must use --enable-docs with --enable-refdocs" "$LINENO" 5 fi if test "$enable_refdocs" != "no" -a "${building_docs}" == "yes"; then building_refdocs="yes" fi if test "$building_refdocs" == "yes"; then BUILD_REFDOCS_TRUE= BUILD_REFDOCS_FALSE='#' else BUILD_REFDOCS_TRUE='#' BUILD_REFDOCS_FALSE= fi # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_xmlto+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_xmlto"; then ac_cv_prog_have_xmlto="$have_xmlto" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_xmlto="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_xmlto" && ac_cv_prog_have_xmlto="no" fi fi have_xmlto=$ac_cv_prog_have_xmlto if test -n "$have_xmlto"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_xmlto" >&5 $as_echo "$have_xmlto" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_fop+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_fop"; then ac_cv_prog_have_fop="$have_fop" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_fop="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_fop" && ac_cv_prog_have_fop="no" fi fi have_fop=$ac_cv_prog_have_fop if test -n "$have_fop"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_fop" >&5 $as_echo "$have_fop" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x${have_fop}" == "xyes"; then # Due to rhbz505364 / 830266, we must actually test-run fop, not just # hope that it works. { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if xmlto --with-fop actually works" >&5 $as_echo_n "checking to see if xmlto --with-fop actually works... " >&6; } if xmlto --with-fop pdf ${srcdir}/doc/SystemTap_Tapset_Reference/dummy-tapsets.xml >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: it's dead, Jim" >&5 $as_echo "it's dead, Jim" >&6; } have_fop="broken" fi rm -f dummy-tapsets.pdf fi if test "$have_fop" == "yes"; then HAVE_FOP_TRUE= HAVE_FOP_FALSE='#' else HAVE_FOP_TRUE='#' HAVE_FOP_FALSE= fi if test "$have_xmlto" == "yes"; then HAVE_XMLTO_TRUE= HAVE_XMLTO_FALSE='#' else HAVE_XMLTO_TRUE='#' HAVE_XMLTO_FALSE= fi building_htmldocs="no" # Check whether --enable-htmldocs was given. if test "${enable_htmldocs+set}" = set; then : enableval=$enable_htmldocs; building_htmldocs=$enableval else building_htmldocs="no" fi if test "$have_xmlto" == "no" -a "$building_htmldocs" == "yes"; then as_fn_error $? "xmlto required for building html documentation" "$LINENO" 5 fi if test "$building_htmldocs" == "yes"; then BUILD_HTMLDOCS_TRUE= BUILD_HTMLDOCS_FALSE='#' else BUILD_HTMLDOCS_TRUE='#' BUILD_HTMLDOCS_FALSE= fi cat > conftest.xml << 'EOF' foo Logging Tapset log logging Description baz EOF if test "x${have_xmlto}" == "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlto --stringparam support" >&5 $as_echo_n "checking for xmlto --stringparam support... " >&6; } xmlto --stringparam man.authors.section.enabled=0 html-nochunks conftest.xml >/dev/null 2>&1 if test $? == 0; then have_xmlto_stringparam="yes" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest.html fi if test "$have_xmlto_stringparam" == "yes"; then XMLTO_STRINGPARAM_TRUE= XMLTO_STRINGPARAM_FALSE='#' else XMLTO_STRINGPARAM_TRUE='#' XMLTO_STRINGPARAM_FALSE= fi rm -f conftest.xml # Check whether --with-nss was given. if test "${with_nss+set}" = set; then : withval=$with_nss; fi if test "x$with_nss" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nss" >&5 $as_echo_n "checking for nss... " >&6; } if test -n "$nss_CFLAGS"; then pkg_cv_nss_CFLAGS="$nss_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss >= 3\""; } >&5 ($PKG_CONFIG --exists --print-errors "nss >= 3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_nss_CFLAGS=`$PKG_CONFIG --cflags "nss >= 3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$nss_LIBS"; then pkg_cv_nss_LIBS="$nss_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss >= 3\""; } >&5 ($PKG_CONFIG --exists --print-errors "nss >= 3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_nss_LIBS=`$PKG_CONFIG --libs "nss >= 3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then nss_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "nss >= 3" 2>&1` else nss_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "nss >= 3" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$nss_PKG_ERRORS" >&5 have_nss=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_nss=no else nss_CFLAGS=$pkg_cv_nss_CFLAGS nss_LIBS=$pkg_cv_nss_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_nss=yes $as_echo "#define HAVE_NSS 1" >>confdefs.h fi else have_nss=no fi if test "${have_nss}" = "yes"; then HAVE_NSS_TRUE= HAVE_NSS_FALSE='#' else HAVE_NSS_TRUE='#' HAVE_NSS_FALSE= fi # Check whether --with-openssl was given. if test "${with_openssl+set}" = set; then : withval=$with_openssl; fi if test "x$with_openssl" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl" >&5 $as_echo_n "checking for openssl... " >&6; } if test -n "$openssl_CFLAGS"; then pkg_cv_openssl_CFLAGS="$openssl_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_openssl_CFLAGS=`$PKG_CONFIG --cflags "openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$openssl_LIBS"; then pkg_cv_openssl_LIBS="$openssl_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_openssl_LIBS=`$PKG_CONFIG --libs "openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then openssl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openssl" 2>&1` else openssl_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openssl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$openssl_PKG_ERRORS" >&5 have_openssl=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_openssl=no else openssl_CFLAGS=$pkg_cv_openssl_CFLAGS openssl_LIBS=$pkg_cv_openssl_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_openssl=yes $as_echo "#define HAVE_OPENSSL 1" >>confdefs.h fi else have_openssl=no fi if test "${have_openssl}" = "yes"; then HAVE_OPENSSL_TRUE= HAVE_OPENSSL_FALSE='#' else HAVE_OPENSSL_TRUE='#' HAVE_OPENSSL_FALSE= fi # Check whether --with-dracutstap was given. if test "${with_dracutstap+set}" = set; then : withval=$with_dracutstap; fi if test "x$with_dracutstap" != "x"; then : dracutstap="$with_dracutstap" else dracutstap=/usr/lib/dracut/modules.d/99stap fi { $as_echo "$as_me:${as_lineno-$LINENO}: using dracut module directory $dracutstap" >&5 $as_echo "$as_me: using dracut module directory $dracutstap" >&6;} # Check whether --with-dracutbindir was given. if test "${with_dracutbindir+set}" = set; then : withval=$with_dracutbindir; fi if test "x$with_dracutbindir" != "x"; then : dracutbindir="$with_dracutbindir" else dracutbindir=/sbin fi { $as_echo "$as_me:${as_lineno-$LINENO}: using dracut binary $dracutbindir" >&5 $as_echo "$as_me: using dracut binary $dracutbindir" >&6;} # Check whether --enable-server was given. if test "${enable_server+set}" = set; then : enableval=$enable_server; enable_server=$enableval else enable_server="check" fi if test "$enable_server" != "no"; then if test "x${have_nss}" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap compile server, cannot find nss headers" >&5 $as_echo "$as_me: WARNING: will not build systemtap compile server, cannot find nss headers" >&2;} fi fi if test "${have_nss}" == "yes" -a "$enable_server" != "no"; then BUILD_SERVER_TRUE= BUILD_SERVER_FALSE='#' else BUILD_SERVER_TRUE='#' BUILD_SERVER_FALSE= fi if test "${have_nss}" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compile-server client functionality will be disabled, cannot find nss development files" >&5 $as_echo "$as_me: WARNING: compile-server client functionality will be disabled, cannot find nss development files" >&2;} fi # Check whether --with-avahi was given. if test "${with_avahi+set}" = set; then : withval=$with_avahi; fi if test "x$with_avahi" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for avahi" >&5 $as_echo_n "checking for avahi... " >&6; } if test -n "$avahi_CFLAGS"; then pkg_cv_avahi_CFLAGS="$avahi_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_avahi_CFLAGS=`$PKG_CONFIG --cflags "avahi-client" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$avahi_LIBS"; then pkg_cv_avahi_LIBS="$avahi_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_avahi_LIBS=`$PKG_CONFIG --libs "avahi-client" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then avahi_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "avahi-client" 2>&1` else avahi_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "avahi-client" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$avahi_PKG_ERRORS" >&5 have_avahi=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_avahi=no else avahi_CFLAGS=$pkg_cv_avahi_CFLAGS avahi_LIBS=$pkg_cv_avahi_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_avahi=yes $as_echo "#define HAVE_AVAHI 1" >>confdefs.h fi else have_avahi=no fi if test "${have_avahi}" = "yes"; then HAVE_AVAHI_TRUE= HAVE_AVAHI_FALSE='#' else HAVE_AVAHI_TRUE='#' HAVE_AVAHI_FALSE= fi if test "${have_avahi}" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: some compile-server functionality will be restricted, cannot find avahi development files" >&5 $as_echo "$as_me: WARNING: some compile-server functionality will be restricted, cannot find avahi development files" >&2;} fi # Check whether --with-rpm was given. if test "${with_rpm+set}" = set; then : withval=$with_rpm; else with_rpm="auto" fi if test "$with_rpm" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rpmtsInitIterator in -lrpm" >&5 $as_echo_n "checking for rpmtsInitIterator in -lrpm... " >&6; } if ${ac_cv_lib_rpm_rpmtsInitIterator+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrpm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rpmtsInitIterator (); int main () { return rpmtsInitIterator (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rpm_rpmtsInitIterator=yes else ac_cv_lib_rpm_rpmtsInitIterator=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpm_rpmtsInitIterator" >&5 $as_echo "$ac_cv_lib_rpm_rpmtsInitIterator" >&6; } if test "x$ac_cv_lib_rpm_rpmtsInitIterator" = xyes; then : $as_echo "#define HAVE_LIBRPM 1" >>confdefs.h stap_LIBS="$stap_LIBS -lc -lrpm" have_librpm="yes" else have_librpm="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rpmdbNextIterator in -lrpmdb" >&5 $as_echo_n "checking for rpmdbNextIterator in -lrpmdb... " >&6; } if ${ac_cv_lib_rpmdb_rpmdbNextIterator+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrpmdb $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rpmdbNextIterator (); int main () { return rpmdbNextIterator (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rpmdb_rpmdbNextIterator=yes else ac_cv_lib_rpmdb_rpmdbNextIterator=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpmdb_rpmdbNextIterator" >&5 $as_echo "$ac_cv_lib_rpmdb_rpmdbNextIterator" >&6; } if test "x$ac_cv_lib_rpmdb_rpmdbNextIterator" = xyes; then : stap_LIBS="$stap_LIBS -lrpmdb" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rpmFreeCrypto in -lrpmio" >&5 $as_echo_n "checking for rpmFreeCrypto in -lrpmio... " >&6; } if ${ac_cv_lib_rpmio_rpmFreeCrypto+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrpmio $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rpmFreeCrypto (); int main () { return rpmFreeCrypto (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rpmio_rpmFreeCrypto=yes else ac_cv_lib_rpmio_rpmFreeCrypto=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpmio_rpmFreeCrypto" >&5 $as_echo "$ac_cv_lib_rpmio_rpmFreeCrypto" >&6; } if test "x$ac_cv_lib_rpmio_rpmFreeCrypto" = xyes; then : $as_echo "#define HAVE_LIBRPMIO 1" >>confdefs.h stap_LIBS="$stap_LIBS -lc -lrpmio" have_librpmio="yes" else have_librpmio="no" fi if test "x$have_librpm" != "xyes" -a "$with_rpm" == "yes"; then as_fn_error $? "cannot find librpm" "$LINENO" 5 fi if test "x$have_librpmio" != "xyes" -a "$with_rpm" == "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find librpmio" >&5 $as_echo "$as_me: WARNING: cannot find librpmio" >&2;} fi fi LIBS_no_readline=$LIBS have_libreadline="no" { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link readline libs" >&5 $as_echo_n "checking how to link readline libs... " >&6; } for libtermcap in "" tinfo ncursesw ncurses curses termcap; do if test -z "$libtermcap"; then READLINE_LIBS="-lreadline" else READLINE_LIBS="-lreadline -l$libtermcap" fi LIBS="$READLINE_LIBS $LIBS_no_readline" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_libreadline="yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$have_libreadline" = "yes"; then break fi done if test "$have_libreadline" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } READLINE_LIBS="" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINE_LIBS" >&5 $as_echo "$READLINE_LIBS" >&6; } $as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h fi if test "$have_libreadline" == "yes"; then HAVE_LIBREADLINE_TRUE= HAVE_LIBREADLINE_FALSE='#' else HAVE_LIBREADLINE_TRUE='#' HAVE_LIBREADLINE_FALSE= fi LIBS=$LIBS_no_readline # Check whether --with-python3 was given. if test "${with_python3+set}" = set; then : withval=$with_python3; else with_python3="auto" fi if test "x$with_python3" = "xyes"; then : if test "x$PYTHON3" = "x:"; then : as_fn_error $? "python version 3 is required" "$LINENO" 5 else preferred_python=$PYTHON3 fi elif test "x$with_python3" = "xno"; then : if test "x$PYTHON" = "x:"; then : as_fn_error $? "python version 2 is required" "$LINENO" 5 else preferred_python=$PYTHON fi elif test "x$PYTHON3" != "x:"; then : preferred_python=$PYTHON3 elif test "x$PYTHON" != "x:"; then : preferred_python=$PYTHON else as_fn_error $? "neither python version 2 nor 3 found" "$LINENO" 5 fi build_elfutils=no # Check whether --with-elfutils was given. if test "${with_elfutils+set}" = set; then : withval=$with_elfutils; case "$with_elfutils" in yes) as_fn_error $? "--with-elfutils requires an argument" "$LINENO" 5 ;; ''|no) ;; *) build_elfutils=yes ;; esac fi if test $build_elfutils = yes; then BUILD_ELFUTILS_TRUE= BUILD_ELFUTILS_FALSE='#' else BUILD_ELFUTILS_TRUE='#' BUILD_ELFUTILS_FALSE= fi elfutils_abs_srcdir=`if test $build_elfutils = yes; then : cd $with_elfutils && pwd fi` if test $enable_translator = yes; then if test $build_elfutils = no; then # Need libdwfl-capable recent elfutils http://elfutils.org/ # On modern debian/ubuntu, libebl has been merged into libdw # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=457543 save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ebl_get_elfmachine in -lebl" >&5 $as_echo_n "checking for ebl_get_elfmachine in -lebl... " >&6; } if ${ac_cv_lib_ebl_ebl_get_elfmachine+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lebl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ebl_get_elfmachine (); int main () { return ebl_get_elfmachine (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ebl_ebl_get_elfmachine=yes else ac_cv_lib_ebl_ebl_get_elfmachine=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ebl_ebl_get_elfmachine" >&5 $as_echo "$ac_cv_lib_ebl_ebl_get_elfmachine" >&6; } if test "x$ac_cv_lib_ebl_ebl_get_elfmachine" = xyes; then : ebl_LIBS=-lebl else ebl_LIBS= fi LIBS="$save_LIBS" save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dwfl_module_getsym in -ldw" >&5 $as_echo_n "checking for dwfl_module_getsym in -ldw... " >&6; } if ${ac_cv_lib_dw_dwfl_module_getsym+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldw -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dwfl_module_getsym (); int main () { return dwfl_module_getsym (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dw_dwfl_module_getsym=yes else ac_cv_lib_dw_dwfl_module_getsym=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dw_dwfl_module_getsym" >&5 $as_echo "$ac_cv_lib_dw_dwfl_module_getsym" >&6; } if test "x$ac_cv_lib_dw_dwfl_module_getsym" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDW 1 _ACEOF LIBS="-ldw $LIBS" else as_fn_error $? "missing elfutils development headers/libraries (install elfutils-devel, libebl-dev, libdw-dev and/or libebl-devel)" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dwarf_next_unit in -ldw" >&5 $as_echo_n "checking for dwarf_next_unit in -ldw... " >&6; } if ${ac_cv_lib_dw_dwarf_next_unit+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldw -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dwarf_next_unit (); int main () { return dwarf_next_unit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dw_dwarf_next_unit=yes else ac_cv_lib_dw_dwarf_next_unit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dw_dwarf_next_unit" >&5 $as_echo "$ac_cv_lib_dw_dwarf_next_unit" >&6; } if test "x$ac_cv_lib_dw_dwarf_next_unit" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDW 1 _ACEOF LIBS="-ldw $LIBS" else as_fn_error $? "elfutils, libdw too old, need 0.148+" "$LINENO" 5 fi stap_LIBS="$stap_LIBS -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf" LIBS="$save_LIBS" else # We built our own and stap_LDFLAGS points at the install. stap_LIBS="$stap_LIBS -Wl,--start-group -ldw -lebl -Wl,--end-group -lelf" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: stap will link $stap_LIBS" >&5 $as_echo "$as_me: stap will link $stap_LIBS" >&6;} # staprun has more modest libelf needs if test $build_elfutils = no; then save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_getshdrstrndx in -lelf" >&5 $as_echo_n "checking for elf_getshdrstrndx in -lelf... " >&6; } if ${ac_cv_lib_elf_elf_getshdrstrndx+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lelf $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char elf_getshdrstrndx (); int main () { return elf_getshdrstrndx (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_elf_elf_getshdrstrndx=yes else ac_cv_lib_elf_elf_getshdrstrndx=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_elf_getshdrstrndx" >&5 $as_echo "$ac_cv_lib_elf_elf_getshdrstrndx" >&6; } if test "x$ac_cv_lib_elf_elf_getshdrstrndx" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBELF 1 _ACEOF LIBS="-lelf $LIBS" else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "libelf too old, need 0.142+ See \`config.log' for more details" "$LINENO" 5; } fi staprun_LIBS="$staprun_LIBS -lelf" stapbpf_LIBS="$stapbpf_LIBS -lelf" LIBS="$save_LIBS" else # We built our own and staprun_LDFLAGS points at the install. staprun_LIBS="$staprun_LIBS -lelf" stapbpf_LIBS="$stapbpf_LIBS -lelf" fi { $as_echo "$as_me:${as_lineno-$LINENO}: staprun will link $staprun_LIBS" >&5 $as_echo "$as_me: staprun will link $staprun_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: stapbpf will link $stapbpf_LIBS" >&5 $as_echo "$as_me: stapbpf will link $stapbpf_LIBS" >&6;} # Before PR4037, we used to arrange to pass CFLAGS+=-m64 for a staprun # being compiled on 32-bit userspace but running against 64-bit kernels. # This is no longer necessary. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Use boost::string_ref if available ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu for ac_header in boost/utility/string_ref.hpp do : ac_fn_cxx_check_header_mongrel "$LINENO" "boost/utility/string_ref.hpp" "ac_cv_header_boost_utility_string_ref_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_utility_string_ref_hpp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BOOST_UTILITY_STRING_REF_HPP 1 _ACEOF fi done # add boost_system bits for stapdyn with dyninst 10+ saved_LIBS="$LIBS" LIBS="-lboost_system $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking need for -lboost_system library" >&5 $as_echo_n "checking need for -lboost_system library... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main() { boost::system::error_condition e(); } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yup" >&5 $as_echo "yup" >&6; } BOOST_SYSTEM_LIB="-lboost_system" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: nope" >&5 $as_echo "nope" >&6; } BOOST_SYSTEM_LIB="" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$saved_LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Check for Dyninst headers and libraries # Check whether --with-dyninst was given. if test "${with_dyninst+set}" = set; then : withval=$with_dyninst; fi case "$with_dyninst" in no) ;; ''|yes) # Try a simple-minded distro search DYNINST_CXXFLAGS="-I/usr/include/dyninst" DYNINST_LDFLAGS="-L/usr/lib64/dyninst -L/usr/lib/dyninst" # XXX both lib paths!?! ;; *) # Use paths in the user-specified prefix DYNINST_CXXFLAGS="-I$with_dyninst/include" DYNINST_LDFLAGS="-L$with_dyninst/lib/" # XXX need lib64 too? ;; esac if test "$with_dyninst" != "no"; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $DYNINST_CXXFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking dyninst support" >&5 $as_echo "$as_me: checking dyninst support" >&6;} for ac_header in BPatch_object.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "BPatch_object.h" "ac_cv_header_BPatch_object_h" "$ac_includes_default" if test "x$ac_cv_header_BPatch_object_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BPATCH_OBJECT_H 1 _ACEOF $as_echo "#define HAVE_DYNINST 1" >>confdefs.h have_dyninst=yes { $as_echo "$as_me:${as_lineno-$LINENO}: dyninst support available" >&5 $as_echo "$as_me: dyninst support available" >&6;} fi done if test -n "$with_dyninst" -a "$have_dyninst" != "yes"; then as_fn_error $? "Dyninst does not appear to be usable" "$LINENO" 5 fi CPPFLAGS="$old_CPPFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi if test "${have_dyninst}" = "yes"; then HAVE_DYNINST_TRUE= HAVE_DYNINST_FALSE='#' else HAVE_DYNINST_TRUE='#' HAVE_DYNINST_FALSE= fi # Check whether --enable-virt was given. if test "${enable_virt+set}" = set; then : enableval=$enable_virt; enable_virt=$enableval else enable_virt="check" fi # Check whether --enable-libvirt was given. if test "${enable_libvirt+set}" = set; then : enableval=$enable_libvirt; fi if test "$enable_libvirt" != no; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libvirt" >&5 $as_echo_n "checking for libvirt... " >&6; } if test -n "$libvirt_CFLAGS"; then pkg_cv_libvirt_CFLAGS="$libvirt_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libvirt >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libvirt >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libvirt_CFLAGS=`$PKG_CONFIG --cflags "libvirt >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libvirt_LIBS"; then pkg_cv_libvirt_LIBS="$libvirt_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libvirt >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libvirt >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libvirt_LIBS=`$PKG_CONFIG --libs "libvirt >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libvirt_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libvirt >= 1.0.2" 2>&1` else libvirt_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libvirt >= 1.0.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libvirt_PKG_ERRORS" >&5 have_libvirt=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libvirt=no else libvirt_CFLAGS=$pkg_cv_libvirt_CFLAGS libvirt_LIBS=$pkg_cv_libvirt_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libvirt=yes $as_echo "#define HAVE_LIBVIRT 1" >>confdefs.h fi fi if test "${have_libvirt}" = "yes"; then HAVE_LIBVIRT_TRUE= HAVE_LIBVIRT_FALSE='#' else HAVE_LIBVIRT_TRUE='#' HAVE_LIBVIRT_FALSE= fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 $as_echo_n "checking for libxml2... " >&6; } if test -n "$libxml2_CFLAGS"; then pkg_cv_libxml2_CFLAGS="$libxml2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libxml2_LIBS"; then pkg_cv_libxml2_LIBS="$libxml2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libxml2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1` else libxml2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libxml2_PKG_ERRORS" >&5 have_libxml2=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libxml2=no else libxml2_CFLAGS=$pkg_cv_libxml2_CFLAGS libxml2_LIBS=$pkg_cv_libxml2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libxml2=yes $as_echo "#define HAVE_LIBXML2 1" >>confdefs.h fi if test "${have_libxml2}" = "yes"; then HAVE_LIBXML2_TRUE= HAVE_LIBXML2_FALSE='#' else HAVE_LIBXML2_TRUE='#' HAVE_LIBXML2_FALSE= fi if test "$enable_virt" != "no"; then if test "x${have_libvirt}" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap virt support, cannot find libvirt headers" >&5 $as_echo "$as_me: WARNING: will not build systemtap virt support, cannot find libvirt headers" >&2;} fi if test "x${have_libxml2}" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap virt support, cannot find xml2 headers" >&5 $as_echo "$as_me: WARNING: will not build systemtap virt support, cannot find xml2 headers" >&2;} fi fi if test "${have_libvirt}" == "yes" -a "${have_libxml2}" == "yes" -a "$enable_virt" != "no"; then BUILD_VIRT_TRUE= BUILD_VIRT_FALSE='#' else BUILD_VIRT_TRUE='#' BUILD_VIRT_FALSE= fi # Check whether --with-python2-probes was given. if test "${with_python2_probes+set}" = set; then : withval=$with_python2_probes; fi have_python2_support=no if test "x$with_python2_probes" != "xno"; then : if test "x$PYTHON" != "x:"; then : for ac_prog in ${python_basename}-config python2-config python-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON_CONFIG=$ac_cv_path_PYTHON_CONFIG if test -n "$PYTHON_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CONFIG" >&5 $as_echo "$PYTHON_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON_CONFIG" && break done fi if test "x$PYTHON_CONFIG" != "x"; then : PYTHON_CPPFLAGS=`$PYTHON_CONFIG --includes 2> /dev/null` PYTHON_CPPFLAGS=$PYTHON_CPPFLAGS save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON_CPPFLAGS $CPPFLAGS" { ac_cv_header_Python_h=; unset ac_cv_header_Python_h;} for ac_header in Python.h do : ac_fn_c_check_header_mongrel "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" if test "x$ac_cv_header_Python_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PYTHON_H 1 _ACEOF have_python2_support=yes fi done CPPFLAGS="$save_CPPFLAGS" fi fi if test "x$have_python2_support" = "xyes"; then : $as_echo "#define HAVE_PYTHON2_PROBES 1" >>confdefs.h else if test "x$with_python2_probes" = "xyes"; then : as_fn_error $? "python version 2 probe support requested but not found" "$LINENO" 5 fi fi if test "x$have_python2_support" = "xyes"; then HAVE_PYTHON2_PROBES_TRUE= HAVE_PYTHON2_PROBES_FALSE='#' else HAVE_PYTHON2_PROBES_TRUE='#' HAVE_PYTHON2_PROBES_FALSE= fi # Check whether --with-python3-probes was given. if test "${with_python3_probes+set}" = set; then : withval=$with_python3_probes; fi have_python3_support=no if test "x$with_python3_probes" != "xno"; then : if test "x$PYTHON3" != "x:" ; then : # Extract the first word of "${python3_basename}-config", so it can be a program name with args. set dummy ${python3_basename}-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON3_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON3_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON3_CONFIG="$PYTHON3_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON3_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON3_CONFIG=$ac_cv_path_PYTHON3_CONFIG if test -n "$PYTHON3_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3_CONFIG" >&5 $as_echo "$PYTHON3_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$PYTHON3_CONFIG" != "x"; then : PYTHON3_CPPFLAGS=`$PYTHON3_CONFIG --includes 2> /dev/null` PYTHON3_CPPFLAGS=$PYTHON3_CPPFLAGS save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON3_CPPFLAGS $CPPFLAGS" { ac_cv_header_Python_h=; unset ac_cv_header_Python_h;} for ac_header in Python.h do : ac_fn_c_check_header_mongrel "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" if test "x$ac_cv_header_Python_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PYTHON_H 1 _ACEOF have_python3_support=yes fi done CPPFLAGS="$save_CPPFLAGS" fi fi if test "x$have_python3_support" = "xyes"; then : $as_echo "#define HAVE_PYTHON3_PROBES 1" >>confdefs.h else if test "x$with_python3_probes" = "xyes"; then : as_fn_error $? "python version 3 probe support requested but not found" "$LINENO" 5 fi fi if test "x$have_python3_support" = "xyes"; then HAVE_PYTHON3_PROBES_TRUE= HAVE_PYTHON3_PROBES_FALSE='#' else HAVE_PYTHON3_PROBES_TRUE='#' HAVE_PYTHON3_PROBES_FALSE= fi if test "x$have_python2_support" = "xyes" -o "x$have_python3_support" = "xyes"; then HAVE_PYTHON_PROBES_TRUE= HAVE_PYTHON_PROBES_FALSE='#' else HAVE_PYTHON_PROBES_TRUE='#' HAVE_PYTHON_PROBES_FALSE= fi # Check whether --enable-monitor was given. if test "${enable_monitor+set}" = set; then : enableval=$enable_monitor; fi if test "$enable_monitor" != "no"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jsonc" >&5 $as_echo_n "checking for jsonc... " >&6; } if test -n "$jsonc_CFLAGS"; then pkg_cv_jsonc_CFLAGS="$jsonc_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c >= 0.11\""; } >&5 ($PKG_CONFIG --exists --print-errors "json-c >= 0.11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jsonc_CFLAGS=`$PKG_CONFIG --cflags "json-c >= 0.11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$jsonc_LIBS"; then pkg_cv_jsonc_LIBS="$jsonc_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c >= 0.11\""; } >&5 ($PKG_CONFIG --exists --print-errors "json-c >= 0.11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jsonc_LIBS=`$PKG_CONFIG --libs "json-c >= 0.11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then jsonc_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "json-c >= 0.11" 2>&1` else jsonc_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "json-c >= 0.11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$jsonc_PKG_ERRORS" >&5 have_jsonc=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_jsonc=no else jsonc_CFLAGS=$pkg_cv_jsonc_CFLAGS jsonc_LIBS=$pkg_cv_jsonc_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_jsonc=yes fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncurses" >&5 $as_echo_n "checking for ncurses... " >&6; } if test -n "$ncurses_CFLAGS"; then pkg_cv_ncurses_CFLAGS="$ncurses_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncurses_CFLAGS=`$PKG_CONFIG --cflags "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncurses_LIBS"; then pkg_cv_ncurses_LIBS="$ncurses_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncurses_LIBS=`$PKG_CONFIG --libs "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncurses_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncurses" 2>&1` else ncurses_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncurses" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncurses_PKG_ERRORS" >&5 have_ncurses=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_ncurses=no else ncurses_CFLAGS=$pkg_cv_ncurses_CFLAGS ncurses_LIBS=$pkg_cv_ncurses_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_ncurses=yes fi if test "${have_jsonc}" == "yes" -a "${have_ncurses}" == yes; then $as_echo "#define HAVE_MONITOR_LIBS 1" >>confdefs.h fi fi if test "${have_jsonc}" == "yes" -a "${have_ncurses}" == "yes" -a "$enable_monitor" != "no"; then HAVE_MONITOR_LIBS_TRUE= HAVE_MONITOR_LIBS_FALSE='#' else HAVE_MONITOR_LIBS_TRUE='#' HAVE_MONITOR_LIBS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler .section \"?\" flags support" >&5 $as_echo_n "checking for assembler .section \"?\" flags support... " >&6; } if ${stap_cv_sectionq+:} false; then : $as_echo_n "(cached) " >&6 else old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wa,--fatal-warnings" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm(".section .note.foo,\"?\",\"note\"\n" ".byte 1, 2, 3\n" ".previous\n" ".section .text,\"axG\",\"progbits\",foogroup,comdat\n" ".byte 1\n" ".pushsection .note.foo,\"?\",\"note\"\n" ".byte 4, 5, 6\n" ".popsection\n" ".byte 2\n"); _ACEOF if ac_fn_c_try_compile "$LINENO"; then : stap_cv_sectionq=yes else stap_cv_sectionq=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$old_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $stap_cv_sectionq" >&5 $as_echo "$stap_cv_sectionq" >&6; } support_section_question=0 if test $stap_cv_sectionq = yes; then support_section_question=1 fi # Check whether --with-bpf was given. if test "${with_bpf+set}" = set; then : withval=$with_bpf; fi if test "x$with_bpf" != "xno"; then : ac_fn_c_check_decl "$LINENO" "BPF_PROG_TYPE_PERF_EVENT" "ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" "#include " if test "x$ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : $as_echo "#define HAVE_BPF_DECLS 1" >>confdefs.h fi fi if test "x$ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" == "xyes"; then HAVE_BPF_DECLS_TRUE= HAVE_BPF_DECLS_FALSE='#' else HAVE_BPF_DECLS_TRUE='#' HAVE_BPF_DECLS_FALSE= fi ac_config_files="$ac_config_files includes/sys/sdt-config.h po/Makefile.in" ac_fn_c_check_decl "$LINENO" "BPF_PROG_TYPE_RAW_TRACEPOINT" "ac_cv_have_decl_BPF_PROG_TYPE_RAW_TRACEPOINT" "#include " if test "x$ac_cv_have_decl_BPF_PROG_TYPE_RAW_TRACEPOINT" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BPF_PROG_TYPE_RAW_TRACEPOINT $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : $as_echo "#define HAVE_BPF_PROG_TYPE_RAW_TRACEPOINT 1" >>confdefs.h fi if test $build_elfutils = yes -a $enable_translator = yes; then here=`pwd` case "$with_elfutils" in /*) elfutils_srcdir="$with_elfutils" ;; *) elfutils_srcdir="${here}/$with_elfutils" ;; esac if ! test -f ${elfutils_srcdir}/configure; then as_fn_error $? "No ${elfutils_srcdir}/configure, forgot to run autoreconf -i?" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: running ${elfutils_srcdir}/configure" >&5 $as_echo "$as_me: running ${elfutils_srcdir}/configure" >&6;} save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -fgnu89-inline" CFLAGS="$CFLAGS -fgnu89-inline" gnu89_inline_flag="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int something (); _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling elfutils with gcc -fgnu89-inline" >&5 $as_echo "$as_me: Compiling elfutils with gcc -fgnu89-inline" >&6;} gnu89_inline_flag="-fgnu89-inline" else { $as_echo "$as_me:${as_lineno-$LINENO}: Compiler does not support -fgnu89-inline" >&5 $as_echo "$as_me: Compiler does not support -fgnu89-inline" >&6;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" # Our libdw.so's libebl will look in $ORIGIN/../lib/... but that # $ORIGIN is where libdw.so resides, which is not where there is a ../lib. # Note that $libdir might be using a quoted use of $exec_prefix or $prefix. # So we must make sure to pass those settings to elfutils configure. elfutils_rpath="-Wl,--enable-new-dtags,-rpath,${libdir}/${PACKAGE_NAME}" # Check whether this is a source release, or a source checkout. # We need --enable-maintainer-mode if it isn't a source release. # elfutils.spec is only distributed in source releases. if test -f ${elfutils_srcdir}/elfutils.spec; then need_maintainer_option="" else need_maintainer_option="--enable-maintainer-mode" fi (mkdir -p build-elfutils && cd build-elfutils && bash ${elfutils_srcdir}/configure --enable-libebl-subdir=${PACKAGE_NAME} \ --includedir="${here}/include-elfutils" \ --libdir="${here}/lib-elfutils" \ --exec-prefix="$exec_prefix" \ --prefix="$prefix" \ --enable-dwz \ ${need_maintainer_option} \ CFLAGS="${CFLAGS/-Wall/} $gnu89_inline_flag -fexceptions" \ LDFLAGS="$LDFLAGS $elfutils_rpath" && if test -f ${elfutils_srcdir}/config/version.h.in; then echo Found elfutils/version.h header... else echo elfutils/version.h header not found, need elfutils 0.142+... exit -1 fi ) if test $? != 0; then exit -1; fi fi # Check whether --with-selinux was given. if test "${with_selinux+set}" = set; then : withval=$with_selinux; fi if test "x$with_selinux" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for selinux" >&5 $as_echo_n "checking for selinux... " >&6; } if test -n "$selinux_CFLAGS"; then pkg_cv_selinux_CFLAGS="$selinux_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5 ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_selinux_CFLAGS=`$PKG_CONFIG --cflags "libselinux" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$selinux_LIBS"; then pkg_cv_selinux_LIBS="$selinux_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5 ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_selinux_LIBS=`$PKG_CONFIG --libs "libselinux" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then selinux_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libselinux" 2>&1` else selinux_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libselinux" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$selinux_PKG_ERRORS" >&5 have_selinux=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_selinux=no else selinux_CFLAGS=$pkg_cv_selinux_CFLAGS selinux_LIBS=$pkg_cv_selinux_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_selinux=yes $as_echo "#define HAVE_SELINUX 1" >>confdefs.h fi else have_selinux=no fi if test "${have_selinux}" = "yes"; then HAVE_SELINUX_TRUE= HAVE_SELINUX_FALSE='#' else HAVE_SELINUX_TRUE='#' HAVE_SELINUX_FALSE= fi ac_fn_c_check_decl "$LINENO" "F_SETPIPE_SZ" "ac_cv_have_decl_F_SETPIPE_SZ" "#include " if test "x$ac_cv_have_decl_F_SETPIPE_SZ" = xyes; then : $as_echo "#define HAVE_F_SETPIPE_SZ 1" >>confdefs.h fi # Extract the first word of "javac", so it can be a program name with args. set dummy javac; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_javac+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_javac"; then ac_cv_prog_have_javac="$have_javac" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_javac="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_javac" && ac_cv_prog_have_javac="no" fi fi have_javac=$ac_cv_prog_have_javac if test -n "$have_javac"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_javac" >&5 $as_echo "$have_javac" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "jar", so it can be a program name with args. set dummy jar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_jar+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_jar"; then ac_cv_prog_have_jar="$have_jar" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_jar="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_jar" && ac_cv_prog_have_jar="no" fi fi have_jar=$ac_cv_prog_have_jar if test -n "$have_jar"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_jar" >&5 $as_echo "$have_jar" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$have_javac" != no -a "$have_jar" != no; then echo java found, will try to configure Byteman support # Check whether --with-java was given. if test "${with_java+set}" = set; then : withval=$with_java; else with_java=/usr/lib/jvm/java fi if test ! -d "$with_java"; then with_java=no fi JAVADIR="${with_java}" # always needed to compile if test "$with_java" != "no"; then cat >>confdefs.h <<_ACEOF #define HAVE_JAVA "1" _ACEOF fi if test "$with_java" != "no"; then HAVE_JAVA_TRUE= HAVE_JAVA_FALSE='#' else HAVE_JAVA_TRUE='#' HAVE_JAVA_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not run per-method java probing, missing byteman or java requirements" >&5 $as_echo "$as_me: WARNING: will not run per-method java probing, missing byteman or java requirements" >&2;} if false; then HAVE_JAVA_TRUE= HAVE_JAVA_FALSE='#' else HAVE_JAVA_TRUE='#' HAVE_JAVA_FALSE= fi fi # java+byteman support ENABLE_NLS="$USE_NLS" localedir="$localedir" LOCALEDIR="$localedir" # Check whether --with-extra-version was given. if test "${with_extra_version+set}" = set; then : withval=$with_extra_version; fi if test "x$with_extra_version" != "xno"; then : stap_extra_version="$with_extra_version" { $as_echo "$as_me:${as_lineno-$LINENO}: Adding extra version $stap_extra_version" >&5 $as_echo "$as_me: Adding extra version $stap_extra_version" >&6;} else stap_extra_version="" fi cat >>confdefs.h <<_ACEOF #define STAP_EXTRA_VERSION "$stap_extra_version" _ACEOF STAP_EXTRA_VERSION="$stap_extra_version" # Check whether --enable-http was given. if test "${enable_http+set}" = set; then : enableval=$enable_http; fi have_http_support=no if test "x$enable_http" = "xyes"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmicrohttpd" >&5 $as_echo_n "checking for libmicrohttpd... " >&6; } if test -n "$libmicrohttpd_CFLAGS"; then pkg_cv_libmicrohttpd_CFLAGS="$libmicrohttpd_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmicrohttpd > 0.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libmicrohttpd > 0.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libmicrohttpd_CFLAGS=`$PKG_CONFIG --cflags "libmicrohttpd > 0.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libmicrohttpd_LIBS"; then pkg_cv_libmicrohttpd_LIBS="$libmicrohttpd_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmicrohttpd > 0.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libmicrohttpd > 0.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libmicrohttpd_LIBS=`$PKG_CONFIG --libs "libmicrohttpd > 0.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libmicrohttpd_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmicrohttpd > 0.9.0" 2>&1` else libmicrohttpd_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmicrohttpd > 0.9.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libmicrohttpd_PKG_ERRORS" >&5 have_libmicrohttpd=false elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libmicrohttpd=false else libmicrohttpd_CFLAGS=$pkg_cv_libmicrohttpd_CFLAGS libmicrohttpd_LIBS=$pkg_cv_libmicrohttpd_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libmicrohttpd=true fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid" >&5 $as_echo_n "checking for uuid... " >&6; } if test -n "$uuid_CFLAGS"; then pkg_cv_uuid_CFLAGS="$uuid_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uuid >= 2.17.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "uuid >= 2.17.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_uuid_CFLAGS=`$PKG_CONFIG --cflags "uuid >= 2.17.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$uuid_LIBS"; then pkg_cv_uuid_LIBS="$uuid_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uuid >= 2.17.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "uuid >= 2.17.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_uuid_LIBS=`$PKG_CONFIG --libs "uuid >= 2.17.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then uuid_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "uuid >= 2.17.0" 2>&1` else uuid_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "uuid >= 2.17.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$uuid_PKG_ERRORS" >&5 have_libuuid=false elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libuuid=false else uuid_CFLAGS=$pkg_cv_uuid_CFLAGS uuid_LIBS=$pkg_cv_uuid_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libuuid=true fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcurl" >&5 $as_echo_n "checking for libcurl... " >&6; } if test -n "$libcurl_CFLAGS"; then pkg_cv_libcurl_CFLAGS="$libcurl_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.19.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl >= 7.19.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libcurl_CFLAGS=`$PKG_CONFIG --cflags "libcurl >= 7.19.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libcurl_LIBS"; then pkg_cv_libcurl_LIBS="$libcurl_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.19.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl >= 7.19.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libcurl_LIBS=`$PKG_CONFIG --libs "libcurl >= 7.19.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libcurl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcurl >= 7.19.7" 2>&1` else libcurl_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcurl >= 7.19.7" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libcurl_PKG_ERRORS" >&5 have_libcurl=false elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libcurl=false else libcurl_CFLAGS=$pkg_cv_libcurl_CFLAGS libcurl_LIBS=$pkg_cv_libcurl_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libcurl=true fi if test "x$have_libmicrohttpd" == "xtrue" -a "x$have_libuuid" == "xtrue" -a "x$have_libcurl" == "xtrue" -a "x$have_jsonc" == "xyes" -a "x$have_nss" == "xyes" -a "x$have_openssl" == "xyes" -a "x$have_cxx0x" == "xno"; then : have_http_support=yes fi fi if test "x$have_http_support" = "xyes"; then : $as_echo "#define HAVE_HTTP_SUPPORT 1" >>confdefs.h else if test "x$enable_http" = "xyes"; then : as_fn_error $? "http service support requested but not found" "$LINENO" 5 fi fi if test "x$have_http_support" = "xyes"; then HAVE_HTTP_SUPPORT_TRUE= HAVE_HTTP_SUPPORT_FALSE='#' else HAVE_HTTP_SUPPORT_TRUE='#' HAVE_HTTP_SUPPORT_FALSE= fi if test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"; then NEED_BASE_CLIENT_CODE_TRUE= NEED_BASE_CLIENT_CODE_FALSE='#' else NEED_BASE_CLIENT_CODE_TRUE='#' NEED_BASE_CLIENT_CODE_FALSE= fi if test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"; then : $as_echo "#define NEED_BASE_CLIENT_CODE 1" >>confdefs.h fi stap_prefix=$prefix test "$stap_prefix" = NONE && stap_prefix=$ac_default_prefix cat >>confdefs.h <<_ACEOF #define STAP_PREFIX "$stap_prefix" _ACEOF STAP_PREFIX="$stap_prefix" ac_config_headers="$ac_config_headers config.h:config.in" ac_config_files="$ac_config_files Makefile doc/Makefile man/Makefile man/cs/Makefile doc/beginners/Makefile doc/SystemTap_Tapset_Reference/Makefile man/stap.1 man/stappaths.7 man/systemtap-service.8 man/cs/stap.1 man/cs/stappaths.7 man/cs/systemtap.8 initscript/config.systemtap initscript/config.stap-server initscript/systemtap initscript/stap-server initscript/99stap/module-setup.sh initscript/99stap/install initscript/99stap/check" subdirs="$subdirs testsuite" if test $enable_translator == "yes"; then ac_config_files="$ac_config_files run-stap" fi ac_config_files="$ac_config_files dtrace" ac_config_files="$ac_config_files stapdyn/Makefile" ac_config_files="$ac_config_files java/Makefile" ac_config_files="$ac_config_files java/stapbm" ac_config_files="$ac_config_files python/Makefile" ac_config_files="$ac_config_files staprun/Makefile" ac_config_files="$ac_config_files stapbpf/Makefile" ac_config_files="$ac_config_files httpd/Makefile httpd/docker/Makefile" ac_config_files="$ac_config_files staprun/run-staprun" ac_config_files="$ac_config_files staprun/guest/stapshd" ac_config_files="$ac_config_files staprun/guest/stapsh-daemon" ac_config_files="$ac_config_files staprun/guest/stapsh@.service" ac_config_files="$ac_config_files stap-exporter/Makefile" # Setup "shadow" directory doc/beginners that has the basic directories setup for # xmlto in one directory (through directory links if necessary). # It would be nice to use AC_CONFIG_LINKS, but automake complains when # the src is a directory and not a file. ac_config_commands="$ac_config_commands doc/beginners" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_TRANSLATOR_TRUE}" && test -z "${BUILD_TRANSLATOR_FALSE}"; then as_fn_error $? "conditional \"BUILD_TRANSLATOR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_CRASHMOD_TRUE}" && test -z "${BUILD_CRASHMOD_FALSE}"; then as_fn_error $? "conditional \"BUILD_CRASHMOD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INSTALL_PREBUILT_DOCS_TRUE}" && test -z "${INSTALL_PREBUILT_DOCS_FALSE}"; then as_fn_error $? "conditional \"INSTALL_PREBUILT_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_REFDOCS_TRUE}" && test -z "${BUILD_REFDOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_REFDOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FOP_TRUE}" && test -z "${HAVE_FOP_FALSE}"; then as_fn_error $? "conditional \"HAVE_FOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XMLTO_TRUE}" && test -z "${HAVE_XMLTO_FALSE}"; then as_fn_error $? "conditional \"HAVE_XMLTO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_HTMLDOCS_TRUE}" && test -z "${BUILD_HTMLDOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_HTMLDOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XMLTO_STRINGPARAM_TRUE}" && test -z "${XMLTO_STRINGPARAM_FALSE}"; then as_fn_error $? "conditional \"XMLTO_STRINGPARAM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_NSS_TRUE}" && test -z "${HAVE_NSS_FALSE}"; then as_fn_error $? "conditional \"HAVE_NSS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_OPENSSL_TRUE}" && test -z "${HAVE_OPENSSL_FALSE}"; then as_fn_error $? "conditional \"HAVE_OPENSSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_SERVER_TRUE}" && test -z "${BUILD_SERVER_FALSE}"; then as_fn_error $? "conditional \"BUILD_SERVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_AVAHI_TRUE}" && test -z "${HAVE_AVAHI_FALSE}"; then as_fn_error $? "conditional \"HAVE_AVAHI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBREADLINE_TRUE}" && test -z "${HAVE_LIBREADLINE_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBREADLINE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_ELFUTILS_TRUE}" && test -z "${BUILD_ELFUTILS_FALSE}"; then as_fn_error $? "conditional \"BUILD_ELFUTILS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DYNINST_TRUE}" && test -z "${HAVE_DYNINST_FALSE}"; then as_fn_error $? "conditional \"HAVE_DYNINST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBVIRT_TRUE}" && test -z "${HAVE_LIBVIRT_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBVIRT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBXML2_TRUE}" && test -z "${HAVE_LIBXML2_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBXML2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_VIRT_TRUE}" && test -z "${BUILD_VIRT_FALSE}"; then as_fn_error $? "conditional \"BUILD_VIRT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON2_PROBES_TRUE}" && test -z "${HAVE_PYTHON2_PROBES_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON2_PROBES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON3_PROBES_TRUE}" && test -z "${HAVE_PYTHON3_PROBES_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON3_PROBES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON_PROBES_TRUE}" && test -z "${HAVE_PYTHON_PROBES_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON_PROBES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MONITOR_LIBS_TRUE}" && test -z "${HAVE_MONITOR_LIBS_FALSE}"; then as_fn_error $? "conditional \"HAVE_MONITOR_LIBS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_BPF_DECLS_TRUE}" && test -z "${HAVE_BPF_DECLS_FALSE}"; then as_fn_error $? "conditional \"HAVE_BPF_DECLS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SELINUX_TRUE}" && test -z "${HAVE_SELINUX_FALSE}"; then as_fn_error $? "conditional \"HAVE_SELINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_JAVA_TRUE}" && test -z "${HAVE_JAVA_FALSE}"; then as_fn_error $? "conditional \"HAVE_JAVA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_JAVA_TRUE}" && test -z "${HAVE_JAVA_FALSE}"; then as_fn_error $? "conditional \"HAVE_JAVA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_HTTP_SUPPORT_TRUE}" && test -z "${HAVE_HTTP_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"HAVE_HTTP_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEED_BASE_CLIENT_CODE_TRUE}" && test -z "${NEED_BASE_CLIENT_CODE_FALSE}"; then as_fn_error $? "conditional \"NEED_BASE_CLIENT_CODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by systemtap $as_me 4.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ systemtap config.status 4.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "includes/sys/sdt-config.h") CONFIG_FILES="$CONFIG_FILES includes/sys/sdt-config.h" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "man/cs/Makefile") CONFIG_FILES="$CONFIG_FILES man/cs/Makefile" ;; "doc/beginners/Makefile") CONFIG_FILES="$CONFIG_FILES doc/beginners/Makefile" ;; "doc/SystemTap_Tapset_Reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/SystemTap_Tapset_Reference/Makefile" ;; "man/stap.1") CONFIG_FILES="$CONFIG_FILES man/stap.1" ;; "man/stappaths.7") CONFIG_FILES="$CONFIG_FILES man/stappaths.7" ;; "man/systemtap-service.8") CONFIG_FILES="$CONFIG_FILES man/systemtap-service.8" ;; "man/cs/stap.1") CONFIG_FILES="$CONFIG_FILES man/cs/stap.1" ;; "man/cs/stappaths.7") CONFIG_FILES="$CONFIG_FILES man/cs/stappaths.7" ;; "man/cs/systemtap.8") CONFIG_FILES="$CONFIG_FILES man/cs/systemtap.8" ;; "initscript/config.systemtap") CONFIG_FILES="$CONFIG_FILES initscript/config.systemtap" ;; "initscript/config.stap-server") CONFIG_FILES="$CONFIG_FILES initscript/config.stap-server" ;; "initscript/systemtap") CONFIG_FILES="$CONFIG_FILES initscript/systemtap" ;; "initscript/stap-server") CONFIG_FILES="$CONFIG_FILES initscript/stap-server" ;; "initscript/99stap/module-setup.sh") CONFIG_FILES="$CONFIG_FILES initscript/99stap/module-setup.sh" ;; "initscript/99stap/install") CONFIG_FILES="$CONFIG_FILES initscript/99stap/install" ;; "initscript/99stap/check") CONFIG_FILES="$CONFIG_FILES initscript/99stap/check" ;; "run-stap") CONFIG_FILES="$CONFIG_FILES run-stap" ;; "dtrace") CONFIG_FILES="$CONFIG_FILES dtrace" ;; "stapdyn/Makefile") CONFIG_FILES="$CONFIG_FILES stapdyn/Makefile" ;; "java/Makefile") CONFIG_FILES="$CONFIG_FILES java/Makefile" ;; "java/stapbm") CONFIG_FILES="$CONFIG_FILES java/stapbm" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; "staprun/Makefile") CONFIG_FILES="$CONFIG_FILES staprun/Makefile" ;; "stapbpf/Makefile") CONFIG_FILES="$CONFIG_FILES stapbpf/Makefile" ;; "httpd/Makefile") CONFIG_FILES="$CONFIG_FILES httpd/Makefile" ;; "httpd/docker/Makefile") CONFIG_FILES="$CONFIG_FILES httpd/docker/Makefile" ;; "staprun/run-staprun") CONFIG_FILES="$CONFIG_FILES staprun/run-staprun" ;; "staprun/guest/stapshd") CONFIG_FILES="$CONFIG_FILES staprun/guest/stapshd" ;; "staprun/guest/stapsh-daemon") CONFIG_FILES="$CONFIG_FILES staprun/guest/stapsh-daemon" ;; "staprun/guest/stapsh@.service") CONFIG_FILES="$CONFIG_FILES staprun/guest/stapsh@.service" ;; "stap-exporter/Makefile") CONFIG_FILES="$CONFIG_FILES stap-exporter/Makefile" ;; "doc/beginners") CONFIG_COMMANDS="$CONFIG_COMMANDS doc/beginners" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; "run-stap":F) chmod +x run-stap ;; "dtrace":F) chmod +x dtrace ;; "java/stapbm":F) chmod +x java/stapbm ;; "staprun/run-staprun":F) chmod +x staprun/run-staprun ;; "staprun/guest/stapshd":F) chmod +x staprun/guest/stapshd ;; "staprun/guest/stapsh-daemon":F) chmod +x staprun/guest/stapsh-daemon ;; "doc/beginners":C) rm -f $ac_abs_top_builddir/doc/beginners/en-US $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite && mkdir -p $ac_abs_top_builddir/doc/beginners/build/en-US && ln -s $ac_abs_top_srcdir/doc/SystemTap_Beginners_Guide/en-US $ac_abs_top_builddir/doc/beginners/en-US && ln -s $ac_abs_top_srcdir/testsuite $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test "${prefix}" = "/usr/local"; then { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: For a private or temporary build of systemtap, we recommend" >&5 $as_echo "$as_me: For a private or temporary build of systemtap, we recommend" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: configuring with a prefix. For example, try" >&5 $as_echo "$as_me: configuring with a prefix. For example, try" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: $0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$" >&5 $as_echo "$as_me: $0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Running systemtap uninstalled, entirely out of the build tree," >&5 $as_echo "$as_me: Running systemtap uninstalled, entirely out of the build tree," >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: is not supported." >&5 $as_echo "$as_me: is not supported." >&6;} fi systemtap-4.2/configure.ac000066400000000000000000001223301356460210500157010ustar00rootroot00000000000000dnl configure.ac --- autoconf input file for systemtap dnl Process this file with autoconf to produce a configure script. AC_INIT([systemtap], 4.2, systemtap@sourceware.org, systemtap) dnl ^^^ see also NEWS, systemtap.spec, testsuite/configure.ac dnl doc/SystemTap_Beginners_Guide/en-US/Book_Info.xml dnl Get the target arch for libHelperSDT.so AC_CANONICAL_TARGET AC_PREREQ(2.63) dnl We don't maintain a ChangeLog, which makes us non-GNU -> foreign. AM_INIT_AUTOMAKE([no-dist foreign]) AM_MAINTAINER_MODE m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) AC_USE_SYSTEM_EXTENSIONS AC_PROG_MKDIR_P AC_SUBST(MKDIR_P) AC_PROG_LN_S AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AM_PROG_CC_C_O AC_PROG_RANLIB AC_OBJEXT AC_EXEEXT AC_PROG_INSTALL AC_PROG_MAKE_SET AC_SUBST(CFLAGS) AC_SUBST(CXXFLAGS) AC_SYS_LARGEFILE AC_CHECK_FUNCS(ppoll) AC_CHECK_FUNCS(openat) AM_GNU_GETTEXT(external) AM_GNU_GETTEXT_VERSION([0.19.4]) # We want the 'PYTHON' varible to be python version 2. We also want # our custom 'PYTHON3' varible to be python version 3. # # Note that the python2/python3 code was inspired by code in the # 'abrt' configure: # # # First, figure out what version of python is in the executable named # 'python'. On most systems that is python version 2, but on arch # linux that is python version 3. AC_PATH_PROG([PYTHON_UNKNOWN], [python], [no]) if test "x$PYTHON_UNKNOWN" != "xno"; then # OK, we found 'python'. What version is it? AC_CACHE_CHECK([whether $PYTHON_UNKNOWN is version 2 or 3], [ac_cv_python_unknown_version], [ac_cv_python_unknown_version=`$PYTHON_UNKNOWN -c "import sys; sys.stdout.write(sys.version[[:3]][[0]])"`]) fi # Now we'll update the _AM_PYTHON_INTERPRETER_LIST variable (which # AM_PATH_PYTHON uses) to only be version 2 versions of python. Note # that the m4_define happens when autoconf is run, but the # PLAIN_PYTHON_INTERPRETER variable expansion will happen when the # user runs configure. # # Note that for python2, we prefer an executable named 'python2' over # one just named 'python'. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x2"; then PLAIN_PYTHON_INTERPRETER=python else PLAIN_PYTHON_INTERPRETER=python2 fi m4_define([_AM_PYTHON_INTERPRETER_LIST], [python2 $PLAIN_PYTHON_INTERPRETER python2.7 python2.6]) # Now we can call AM_PATH_PYTHON to find python version 2.6+ (and # version 2 only). AM_PATH_PYTHON([2.6], [], [:]) python_basename=$(basename "$PYTHON") AC_DEFINE_UNQUOTED([PYTHON_BASENAME], "${python_basename}", [Base name of the python2 interpreter binary.]) if test "x$PYTHON" != "x:"; then AC_DEFINE([PYTHON_EXISTS], [], [The python2 interpreter binary exists.]) fi # AM_PATH_PYTHON defines 'pyexecdir'. Make sure the python and # pyexecdir variables get sent down to the subconfigure in the # testsuite directory. AS_VAR_APPEND([ac_configure_args], [" python='$PYTHON' pyexecdir='$pyexecdir'"]) # Now let's try to find python version 3. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x3"; then AC_PATH_PROG([PYTHON3], [python]) else AC_PATH_PROGS([PYTHON3], [python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0], [:]) fi python3_basename=$(basename "$PYTHON3") AC_DEFINE_UNQUOTED([PYTHON3_BASENAME], "${python3_basename}", [Base name of the python3 interpreter binary.]) # If we found python version 3, set up the other variables for python # version 3 that AM_PATH_PYTHON sets up for python version 2. if test "x$PYTHON3" != "x:"; then AC_DEFINE([PYTHON3_EXISTS], [], [The python3 interpreter binary exists.]) AC_CACHE_CHECK([for python3 version], [ac_cv_python3_version], [ac_cv_python3_version=`$PYTHON3 -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON3_VERSION], [$ac_cv_python3_version]) AC_SUBST([PYTHON3_PREFIX], ['${prefix}']) AC_SUBST([PYTHON3_EXEC_PREFIX], ['${exec_prefix}']) AC_CACHE_CHECK([for python3 platform], [ac_cv_python3_platform], [ac_cv_python3_platform=`$PYTHON3 -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON3_PLATFORM], [$ac_cv_python3_platform]) AC_CACHE_CHECK([for python3 script directory], [ac_cv_python3_dir], [ac_cv_python3_dir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(0,0,prefix='$PYTHON3_PREFIX'))"`]) AC_SUBST([python3dir], [$ac_cv_python3_dir]) AC_CACHE_CHECK([for python3 extension module directory], [ac_cv_py3execdir], [ac_cv_py3execdir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='$PYTHON3_EXEC_PREFIX'))"`]) AC_SUBST([py3execdir], [$ac_cv_py3execdir]) fi # Make sure the python3 and py3execdir variables get sent down to # the subconfigure in the testsuite directory. AS_VAR_APPEND([ac_configure_args], [" python3='$PYTHON3' py3execdir='$ac_cv_py3execdir'"]) dnl Handle the prologues option. dnl dnl If the user didn't specify --enable-prologues/--disable-prologues dnl and the x86 system has a version of gcc less than version 4, dnl automatically enable prologues. if test "${enable_prologues+set}" != set; then AC_MSG_CHECKING([to see if prologue searching should be the default]) if { echo '#if __i386__ == 1 && __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_prologues=yes AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi AC_ARG_ENABLE([prologues], AS_HELP_STRING([--enable-prologues], [make -P prologue-searching default]), [ if test "$enable_prologues" = yes; then AC_DEFINE([ENABLE_PROLOGUES],[],[make -P prologue-searching default]) fi]) dnl Handle the disable-sdt-probes option. dnl dnl Default to --disable-sdt-probes if --enable-sdt-probes/--disable-prologues dnl was not specified and the gcc version is less than version 4, if test "${enable_sdt_probes+set}" != set; then AC_MSG_CHECKING([to see if sdt probes should be the default]) if { echo '#if __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_sdt_probes=no AC_MSG_RESULT([no]) else AC_MSG_RESULT([yes]) fi fi AC_ARG_ENABLE([sdt-probes], [AS_HELP_STRING([--disable-sdt-probes], [disable process.mark probes in stap, staprun, stapio])]) AS_IF([test "x$enable_sdt_probes" != xno], [ AC_DEFINE([ENABLE_SDT_PROBES], [1], [Define to 1 to enable process.mark probes in stap, staprun, stapio.]) ]) dnl We're now requiring *some* C++11, using RHEL6 (gcc 4.4.7) as a baseline. dnl This is too strict about __cplusplus for gcc < 4.7, so we have a manual fallback. AX_CXX_COMPILE_STDCXX(11, noext, optional) have_cxx0x="no" AS_IF([test "x$HAVE_CXX11" != x1],[ AC_LANG_PUSH(C++) AX_CHECK_COMPILE_FLAG([-std=c++0x], [ AC_MSG_NOTICE([Compiling with -std=c++0x]) CXX="$CXX -std=c++0x" HAVE_CXX11=1 have_cxx0x="yes" ], [ AC_MSG_ERROR([A compiler with C++11 support is required.]) ]) AC_LANG_POP(C++) ]) AC_ARG_ENABLE([ssp], [AS_HELP_STRING([--disable-ssp], [disable gcc stack-protector])]) AS_IF([test "x$enable_ssp" != xno],[ save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="-Werror -fstack-protector-all -D_FORTIFY_SOURCE=2 $CXXFLAGS" CFLAGS="-Werror -fstack-protector-all -D_FORTIFY_SOURCE=2 $CFLAGS" AC_COMPILE_IFELSE([AC_LANG_SOURCE([int something ();])], [ AC_MSG_NOTICE([Compiling with gcc -fstack-protector-all et al.]) CFLAGS="-fstack-protector-all -D_FORTIFY_SOURCE=2 $save_CFLAGS" CXXFLAGS="-fstack-protector-all -D_FORTIFY_SOURCE=2 $save_CXXFLAGS"],[ AC_MSG_NOTICE([Compiler does not support -fstack-protector-all et al.]) CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS"])]) dnl Link with gold if possible dnl but: https://bugzilla.redhat.com/show_bug.cgi?id=636603 dnl dnl AC_PATH_PROG(GOLD, [ld.gold], [no]) dnl if test "x$GOLD" != "xno" dnl then dnl mkdir -p Bdir dnl ln -sf $GOLD Bdir/ld dnl LDFLAGS="$LDFLAGS -B`pwd`/Bdir/" dnl AC_MSG_NOTICE([using ld.gold to link]) dnl fi # Compiling with fPIE by default (but see PR 9922) AC_ARG_ENABLE([pie], [AS_HELP_STRING([--enable-pie], [enable position-independent-executable])]) AS_IF([test "x$enable_pie" != xno],[ PIECFLAGS='-fPIE' PIECXXFLAGS='-fPIE' PIELDFLAGS='-pie -Wl,-z,relro -Wl,-z,now' save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS $PIECFLAGS" CXXFLAGS="$CXXFLAGS $PIECXXFLAGS" LDFLAGS="$LDFLAGS $PIELDFLAGS" AC_LINK_IFELSE([AC_LANG_SOURCE([void main () {}])], [ AC_MSG_NOTICE([Compiling with gcc pie et al.]) ], [ AC_MSG_NOTICE([Compiler does not support -pie et al.]) PIECFLAGS="" PIECXXFLAGS="" PIELDFLAGS="" ]) CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" LDFLAGS="$save_LDFLAGS" ]) AC_SUBST(PIELDFLAGS) AC_SUBST(PIECFLAGS) AC_SUBST(PIECXXFLAGS) dnl Handle optional sqlite support. If enabled/disabled by the user, dnl do the right thing. If not specified by the user, use it if dnl present. AC_ARG_ENABLE([sqlite], AS_HELP_STRING([--enable-sqlite], [build with sqlite support]), [], dnl ACTION-IF-GIVEN [enable_sqlite=check]) dnl ACTION-IF-NOT-GIVEN sqlite3_LIBS= AS_IF([test "x$enable_sqlite" != xno], [PKG_CHECK_MODULES([sqlite3], [sqlite3 > 3.7], [AC_DEFINE([HAVE_LIBSQLITE3], [1], [Define to 1 if you have the 'sqlite3' library (-lsqlite3).])], [if test "x$enable_sqlite" != xcheck; then AC_MSG_FAILURE([--enable-sqlite was given, but test for sqlite > 3.7 failed]) fi])]) dnl Handle the option to only build runtime AC_ARG_ENABLE([translator], AS_HELP_STRING([--disable-translator], [build only runtime utilities]), [], [enable_translator="yes"]) AM_CONDITIONAL([BUILD_TRANSLATOR], [test "$enable_translator" == "yes"]) dnl Handle the option to build the crash extension AC_ARG_ENABLE([crash], AS_HELP_STRING([--enable-crash@<:@=DIRECTORY@:>@], [enable crash extension (default is disabled). Optional DIRECTORY is the path to the crash header file (needed if installed in a non-standard location).]), [if test "$enable_crash" != "no"; then dnl Handle custom install dir (if needed) save_CPPFLAGS="$CPPFLAGS" if test "$enable_crash" != "yes"; then staplog_CPPFLAGS=-I$enable_crash CPPFLAGS="${staplog_CPPFLAGS} $CPPFLAGS" AC_SUBST([staplog_CPPFLAGS]) fi AC_CHECK_HEADERS([crash/defs.h], [], [AC_MSG_ERROR([cannot find required crash header (crash-devel may need to be installed)])], [ #define NR_CPUS 256 ]) CPPFLAGS="$save_CPPFLAGS" fi], [enable_crash="no"]) AM_CONDITIONAL([BUILD_CRASHMOD], [test "$enable_crash" != "no"]) dnl Handle the option to build the documentation dnl --enable-docs=check checks for LaTeX et al. and decides accordingly building_docs="no" dnl Handle the option to install the prebuilt PDFs and man pages. dnl Automatically turned on if --enable-docs is on or if --enable-docs=prebuilt. installing_prebuilt_docs="yes" AC_ARG_ENABLE([docs], AS_HELP_STRING([--enable-docs], [enable building documentation (default to only installing prebuilt docs).]), [enable_docs=$enableval], [enable_docs="prebuilt"]) AC_CHECK_PROG(have_latex, latex, yes, no) AC_CHECK_PROG(have_dvips, dvips, yes, no) AC_CHECK_PROG(have_ps2pdf, ps2pdf, yes, no) if test "x${have_latex}${have_dvips}${have_ps2pdf}" != "xyesyesyes"; then if test "$enable_docs" == "yes"; then AC_MSG_ERROR([cannot find all tools for building documentation]) fi if test "$enable_docs" == "check"; then AC_MSG_WARN([will not build documentation, cannot find all tools]) fi fi if test "$enable_docs" == "prebuilt"; then AC_MSG_NOTICE([will only install prebuilt documentation]) fi if test "x${have_latex}${have_dvips}${have_ps2pdf}" == "xyesyesyes" -a "$enable_docs" != "no" -a "$enable_docs" != "prebuilt"; then building_docs="yes" installing_prebuilt_docs="yes" fi if test "$enable_docs" == "no"; then installing_prebuilt_docs="no" fi AM_CONDITIONAL([BUILD_DOCS], [test "$building_docs" == "yes"]) AM_CONDITIONAL([INSTALL_PREBUILT_DOCS], [test "$installing_prebuilt_docs" == "yes"]) dnl Handle the option to build the reference documentation building_refdocs="no" AC_ARG_ENABLE([refdocs], AS_HELP_STRING([--enable-refdocs], [enable building reference documentation (default on if other documentation built).]), [enable_refdocs=$enableval], [enable_refdocs="check"]) if test "$building_docs" == "no" -a "$enable_refdocs" == "yes" ; then AC_MSG_ERROR([must use --enable-docs with --enable-refdocs]) fi if test "$enable_refdocs" != "no" -a "${building_docs}" == "yes"; then building_refdocs="yes" fi AM_CONDITIONAL([BUILD_REFDOCS], [test "$building_refdocs" == "yes"]) AC_CHECK_PROG(have_xmlto, xmlto, yes, no) AC_CHECK_PROG(have_fop, fop, yes, no) if test "x${have_fop}" == "xyes"; then # Due to rhbz505364 / 830266, we must actually test-run fop, not just # hope that it works. AC_MSG_CHECKING([to see if xmlto --with-fop actually works]) if xmlto --with-fop pdf ${srcdir}/doc/SystemTap_Tapset_Reference/dummy-tapsets.xml >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([it's dead, Jim]) have_fop="broken" fi rm -f dummy-tapsets.pdf fi AM_CONDITIONAL([HAVE_FOP], [test "$have_fop" == "yes"]) AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" == "yes"]) dnl Handle the option to build the html documentation building_htmldocs="no" AC_ARG_ENABLE([htmldocs], AS_HELP_STRING([--enable-htmldocs], [enable building html documentation (default off).]), [building_htmldocs=$enableval], [building_htmldocs="no"]) if test "$have_xmlto" == "no" -a "$building_htmldocs" == "yes"; then AC_MSG_ERROR([xmlto required for building html documentation]) fi AM_CONDITIONAL([BUILD_HTMLDOCS], [test "$building_htmldocs" == "yes"]) dnl There is a strange bug in older versions of xmlto when generating pdf. dnl https://bugzilla.redhat.com/show_bug.cgi?id=526273 dnl So make sure to have a chapter title starting with L plus an refentry. dnl This will make sure the xmlto pdf support test fails on buggy versions. cat > conftest.xml << 'EOF' foo Logging Tapset log logging Description baz EOF if test "x${have_xmlto}" == "xyes"; then AC_MSG_CHECKING([for xmlto --stringparam support]) xmlto --stringparam man.authors.section.enabled=0 html-nochunks conftest.xml >/dev/null 2>&1 if test $? == 0; then have_xmlto_stringparam="yes" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi rm -f conftest.html fi AM_CONDITIONAL([XMLTO_STRINGPARAM], [test "$have_xmlto_stringparam" == "yes"]) rm -f conftest.xml dnl See if we have the nss/nspr headers and libraries AC_ARG_WITH([nss], AS_HELP_STRING([--without-nss], [Do not use NSS even if present])) AS_IF([test "x$with_nss" != "xno"], [ PKG_CHECK_MODULES([nss], [nss >= 3], [have_nss=yes AC_DEFINE([HAVE_NSS], [1], [Define to 1 if you have the nss libraries.]) ], [have_nss=no]) ], [have_nss=no]) AM_CONDITIONAL([HAVE_NSS], [test "${have_nss}" = "yes"]) dnl See if we have the openssl headers and libraries AC_ARG_WITH([openssl], AS_HELP_STRING([--without-openssl], [Do not use OPENSSL even if present])) AS_IF([test "x$with_openssl" != "xno"], [ PKG_CHECK_MODULES([openssl], [openssl], [have_openssl=yes AC_DEFINE([HAVE_OPENSSL], [1], [Define to 1 if you have the openssl libraries.]) ], [have_openssl=no]) ], [have_openssl=no]) AM_CONDITIONAL([HAVE_OPENSSL], [test "${have_openssl}" = "yes"]) dnl Handle dracut directory configuration. Note we hard-code /usr by default, dnl instead of $prefix, because dracut is a system service that doesn't listen dnl at relocatable directories. AC_ARG_WITH([dracutstap], AS_HELP_STRING([--with-dracutstap=DIR], [Install dracut module files in DIR])) AS_IF([test "x$with_dracutstap" != "x"],[dracutstap="$with_dracutstap"], [dracutstap=/usr/lib/dracut/modules.d/99stap]) AC_MSG_NOTICE([using dracut module directory $dracutstap]) AC_SUBST(dracutstap) dnl PR20850 Fix the boot time probing feature for fedora too. Typical rhel dnl location is /sbin, typical fedora location is /usr/bin. AC_ARG_WITH([dracutbindir], AS_HELP_STRING([--with-dracutbindir=DIR], [Use the dracut binary located in DIR])) AS_IF([test "x$with_dracutbindir" != "x"],[dracutbindir="$with_dracutbindir"], [dracutbindir=/sbin]) AC_MSG_NOTICE([using dracut binary $dracutbindir]) AC_SUBST(dracutbindir) dnl Handle the option to build the compile server. AC_ARG_ENABLE([server], AS_HELP_STRING([--enable-server], [enable building of stap-server (default on if nss etc. found).]), [enable_server=$enableval], [enable_server="check"]) if test "$enable_server" != "no"; then dnl See if we have enough libraries and tools to build the compile server if test "x${have_nss}" != "xyes"; then AC_MSG_WARN([will not build systemtap compile server, cannot find nss headers]) fi fi AM_CONDITIONAL([BUILD_SERVER], [test "${have_nss}" == "yes" -a "$enable_server" != "no"]) if test "${have_nss}" != "yes"; then AC_MSG_WARN([compile-server client functionality will be disabled, cannot find nss development files]) fi dnl See if we have the avahi libraries and headers AC_ARG_WITH([avahi], AS_HELP_STRING([--without-avahi], [Do not use Avahi even if present])) AS_IF([test "x$with_avahi" != "xno"], [ PKG_CHECK_MODULES([avahi], [avahi-client], [have_avahi=yes AC_DEFINE([HAVE_AVAHI], [1], [Define to 1 if you have the avahi libraries.]) ], [have_avahi=no]) ], [have_avahi=no]) AM_CONDITIONAL([HAVE_AVAHI], [test "${have_avahi}" = "yes"]) if test "${have_avahi}" != "yes"; then AC_MSG_WARN([some compile-server functionality will be restricted, cannot find avahi development files]) fi dnl Look for librpm. AC_ARG_WITH([rpm], [AS_HELP_STRING([--with-rpm], [query rpm database for missing debuginfos])], [], [with_rpm="auto"]) if test "$with_rpm" != "no"; then AC_CHECK_LIB(rpm, rpmtsInitIterator, [ AC_DEFINE([HAVE_LIBRPM],[1],[have librpm]) stap_LIBS="$stap_LIBS -lc -lrpm" have_librpm="yes"], [have_librpm="no"]) dnl explicit -lrpmdb is a separate requirement on some older librpms AC_CHECK_LIB(rpmdb, rpmdbNextIterator, [ stap_LIBS="$stap_LIBS -lrpmdb"]) AC_CHECK_LIB(rpmio, rpmFreeCrypto, [ AC_DEFINE([HAVE_LIBRPMIO],[1],[have librpmio]) stap_LIBS="$stap_LIBS -lc -lrpmio" have_librpmio="yes"], [have_librpmio="no"]) if test "x$have_librpm" != "xyes" -a "$with_rpm" == "yes"; then AC_MSG_ERROR([cannot find librpm]) fi if test "x$have_librpmio" != "xyes" -a "$with_rpm" == "yes"; then AC_MSG_WARN([cannot find librpmio]) fi fi dnl Look for readline. dnl dnl First save the orignal value of LIBS. LIBS_no_readline=$LIBS dnl Check how for readline presence and how to link with it. On some dnl systems you need to add a termcap compatible library. have_libreadline="no" AC_MSG_CHECKING([how to link readline libs]) for libtermcap in "" tinfo ncursesw ncurses curses termcap; do if test -z "$libtermcap"; then READLINE_LIBS="-lreadline" else READLINE_LIBS="-lreadline -l$libtermcap" fi LIBS="$READLINE_LIBS $LIBS_no_readline" AC_LINK_IFELSE( [AC_LANG_CALL([],[readline])], [have_libreadline="yes"]) if test "$have_libreadline" = "yes"; then break fi done if test "$have_libreadline" = "no"; then AC_MSG_RESULT([none]) READLINE_LIBS="" else AC_MSG_RESULT([$READLINE_LIBS]) AC_DEFINE(HAVE_LIBREADLINE, [1], [Define if you have the readline library (-lreadline).]) fi AC_SUBST([READLINE_LIBS]) AM_CONDITIONAL([HAVE_LIBREADLINE], [test "$have_libreadline" == "yes"]) dnl End of readline checks: restore LIBS LIBS=$LIBS_no_readline dnl Allow user to choose python3 for /usr/bin/dtrace AC_ARG_WITH([python3], AS_HELP_STRING([--with-python3],[prefer python version 3]), [], [with_python3="auto"]) AS_IF([test "x$with_python3" = "xyes"], [AS_IF([test "x$PYTHON3" = "x:"], [AC_MSG_ERROR([python version 3 is required])], [AC_SUBST(preferred_python,[$PYTHON3])])], [test "x$with_python3" = "xno"], [AS_IF([test "x$PYTHON" = "x:"], [AC_MSG_ERROR([python version 2 is required])], [AC_SUBST(preferred_python,[$PYTHON])])], [test "x$PYTHON3" != "x:"], [AC_SUBST(preferred_python,[$PYTHON3])], [test "x$PYTHON" != "x:"], [AC_SUBST(preferred_python,[$PYTHON])], [AC_MSG_ERROR([neither python version 2 nor 3 found])]) dnl Handle elfutils. If '--with-elfutils=DIR' wasn't specified, used dnl the system's elfutils. build_elfutils=no AC_ARG_WITH([elfutils], AS_HELP_STRING([--with-elfutils=DIRECTORY], [find elfutils source code in DIRECTORY]), [ case "$with_elfutils" in yes) AC_MSG_ERROR([--with-elfutils requires an argument]) ;; ''|no) ;; *) build_elfutils=yes ;; esac]) AM_CONDITIONAL(BUILD_ELFUTILS, test $build_elfutils = yes) AC_SUBST(elfutils_abs_srcdir, `AS_IF([test $build_elfutils = yes], [cd $with_elfutils && pwd])`) if test $enable_translator = yes; then if test $build_elfutils = no; then # Need libdwfl-capable recent elfutils http://elfutils.org/ # On modern debian/ubuntu, libebl has been merged into libdw # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=457543 save_LIBS="$LIBS" AC_CHECK_LIB(ebl, ebl_get_elfmachine,[ebl_LIBS=-lebl],[ebl_LIBS=]) LIBS="$save_LIBS" save_LIBS="$LIBS" AC_CHECK_LIB(dw, dwfl_module_getsym,[],[ AC_MSG_ERROR([missing elfutils development headers/libraries (install elfutils-devel, libebl-dev, libdw-dev and/or libebl-devel)])], [-Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf]) AC_CHECK_LIB(dw, dwarf_next_unit,[],[ AC_MSG_ERROR([elfutils, libdw too old, need 0.148+])], [-Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf]) stap_LIBS="$stap_LIBS -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf" LIBS="$save_LIBS" else # We built our own and stap_LDFLAGS points at the install. stap_LIBS="$stap_LIBS -Wl,--start-group -ldw -lebl -Wl,--end-group -lelf" fi fi AC_SUBST(stap_LIBS) AC_MSG_NOTICE([stap will link $stap_LIBS]) # staprun has more modest libelf needs if test $build_elfutils = no; then save_LIBS="$LIBS" dnl this will only succeed with elfutils 0.142+ AC_CHECK_LIB(elf,elf_getshdrstrndx,[],[ AC_MSG_FAILURE([libelf too old, need 0.142+])]) staprun_LIBS="$staprun_LIBS -lelf" stapbpf_LIBS="$stapbpf_LIBS -lelf" LIBS="$save_LIBS" else # We built our own and staprun_LDFLAGS points at the install. staprun_LIBS="$staprun_LIBS -lelf" stapbpf_LIBS="$stapbpf_LIBS -lelf" fi AC_SUBST(staprun_LIBS) AC_SUBST(stapbpf_LIBS) AC_MSG_NOTICE([staprun will link $staprun_LIBS]) AC_MSG_NOTICE([stapbpf will link $stapbpf_LIBS]) # Before PR4037, we used to arrange to pass CFLAGS+=-m64 for a staprun # being compiled on 32-bit userspace but running against 64-bit kernels. # This is no longer necessary. AC_LANG_PUSH(C++) # Use boost::string_ref if available AC_CHECK_HEADERS([boost/utility/string_ref.hpp]) # add boost_system bits for stapdyn with dyninst 10+ saved_LIBS="$LIBS" LIBS="-lboost_system $LIBS" AC_MSG_CHECKING([need for -lboost_system library]) AC_LINK_IFELSE([AC_LANG_SOURCE([ #include int main() { boost::system::error_condition e(); } ])],[AC_MSG_RESULT([yup]) BOOST_SYSTEM_LIB="-lboost_system" ],[AC_MSG_RESULT([nope]) BOOST_SYSTEM_LIB="" ]) LIBS="$saved_LIBS" AC_SUBST(BOOST_SYSTEM_LIB) AC_LANG_POP(C++) # Check for Dyninst headers and libraries AC_ARG_WITH([dyninst], AS_HELP_STRING([--with-dyninst=DIRECTORY], [find dyninst headers/libraries in DIRECTORY])) case "$with_dyninst" in no) ;; ''|yes) # Try a simple-minded distro search DYNINST_CXXFLAGS="-I/usr/include/dyninst" DYNINST_LDFLAGS="-L/usr/lib64/dyninst -L/usr/lib/dyninst" # XXX both lib paths!?! ;; *) # Use paths in the user-specified prefix DYNINST_CXXFLAGS="-I$with_dyninst/include" DYNINST_LDFLAGS="-L$with_dyninst/lib/" # XXX need lib64 too? ;; esac if test "$with_dyninst" != "no"; then AC_LANG_PUSH(C++) old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $DYNINST_CXXFLAGS" AC_MSG_NOTICE([checking dyninst support]) AC_CHECK_HEADERS([BPatch_object.h], [ AC_SUBST(DYNINST_CXXFLAGS) AC_SUBST(DYNINST_LDFLAGS) AC_DEFINE([HAVE_DYNINST],[1],[Define to 1 if Dyninst is enabled]) have_dyninst=yes AC_MSG_NOTICE([dyninst support available])]) if test -n "$with_dyninst" -a "$have_dyninst" != "yes"; then AC_MSG_ERROR([Dyninst does not appear to be usable]) fi CPPFLAGS="$old_CPPFLAGS" AC_LANG_POP(C++) fi AM_CONDITIONAL([HAVE_DYNINST], [test "${have_dyninst}" = "yes"]) dnl Check for the libvirt and libxml2 devel packages AC_ARG_ENABLE([virt], AS_HELP_STRING([--enable-virt], [enable building of stapvirt support (default on if libvirt etc. found).]), [enable_virt=$enableval], [enable_virt="check"]) dnl We require libvirt >= 1.0.2 because stapvirt relies on the dnl virDomainOpenChannel function, which was implemented in 1.0.2. AC_ARG_ENABLE([libvirt], AS_HELP_STRING([--disable-libvirt], [Do not use libvirt even if present])) if test "$enable_libvirt" != no; then PKG_CHECK_MODULES([libvirt], [libvirt >= 1.0.2], [ have_libvirt=yes AC_DEFINE([HAVE_LIBVIRT],[1],[Define to 1 if libvirt development libraries are installed]) ], [have_libvirt=no]) fi AM_CONDITIONAL([HAVE_LIBVIRT], [test "${have_libvirt}" = "yes"]) PKG_CHECK_MODULES([libxml2], [libxml-2.0], [ have_libxml2=yes AC_DEFINE([HAVE_LIBXML2],[1],[Define to 1 if libxml2 development libraries are installed]) ], [have_libxml2=no]) AM_CONDITIONAL([HAVE_LIBXML2], [test "${have_libxml2}" = "yes"]) if test "$enable_virt" != "no"; then dnl See if we have enough libraries and tools to build the virt server if test "x${have_libvirt}" != "xyes"; then AC_MSG_WARN([will not build systemtap virt support, cannot find libvirt headers]) fi if test "x${have_libxml2}" != "xyes"; then AC_MSG_WARN([will not build systemtap virt support, cannot find xml2 headers]) fi fi AM_CONDITIONAL([BUILD_VIRT], [test "${have_libvirt}" == "yes" -a "${have_libxml2}" == "yes" -a "$enable_virt" != "no"]) dnl Handle the option to build python2 probe support AC_ARG_WITH([python2-probes], AS_HELP_STRING([--without-python2-probes], [Disable building python version 2 probe support, even if it is available])) have_python2_support=no AS_IF([test "x$with_python2_probes" != "xno"], [dnl First, check to make sure we have the 'python-config' script. AS_IF([test "x$PYTHON" != "x:"], [AC_PATH_PROGS([PYTHON_CONFIG], [${python_basename}-config python2-config python-config])]) AS_IF([test "x$PYTHON_CONFIG" != "x"], [dnl Use the 'python-config' script to find the python dnl include directories. PYTHON_CPPFLAGS=`$PYTHON_CONFIG --includes 2> /dev/null` AC_SUBST([PYTHON_CPPFLAGS], [$PYTHON_CPPFLAGS]) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON_CPPFLAGS $CPPFLAGS" dnl Now make sure we can find the python 2 Python.h file. We dnl need to clear the cached result, since this might be a dnl cached result from the python 3 header file (since they dnl share the same name). AS_UNSET([ac_cv_header_Python_h]) AC_CHECK_HEADERS([Python.h], [have_python2_support=yes]) CPPFLAGS="$save_CPPFLAGS"])]) AS_IF([test "x$have_python2_support" = "xyes"], [AC_DEFINE([HAVE_PYTHON2_PROBES], [1], [Define to 1 to enable python version 2 probe support in systemtap.])], [AS_IF([test "x$with_python2_probes" = "xyes"], [AC_MSG_ERROR([python version 2 probe support requested but not found])]) ]) AM_CONDITIONAL([HAVE_PYTHON2_PROBES], [test "x$have_python2_support" = "xyes"]) dnl Handle the option to build python3 probe support AC_ARG_WITH([python3-probes], AS_HELP_STRING([--without-python3-probes], [Disable building python version 3 probe support, even if it is available])) have_python3_support=no AS_IF([test "x$with_python3_probes" != "xno"], [dnl First, check to make sure we have the 'python3-config' script. AS_IF([test "x$PYTHON3" != "x:" ], [AC_PATH_PROG([PYTHON3_CONFIG], [${python3_basename}-config])]) AS_IF([test "x$PYTHON3_CONFIG" != "x"], [dnl Use the 'python3-config' script to find the python dnl include directories. PYTHON3_CPPFLAGS=`$PYTHON3_CONFIG --includes 2> /dev/null` AC_SUBST([PYTHON3_CPPFLAGS], [$PYTHON3_CPPFLAGS]) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON3_CPPFLAGS $CPPFLAGS" dnl Now make sure we can find the python 3 Python.h dnl file. However, we've got a problem. AC_CHECK_HEADERS dnl was called above for the python 2 version of dnl Python.h. But, autoconf doesn't really know the dnl difference between the two files, since they both have dnl the same name. So, we'll unset the cache variable. AS_UNSET([ac_cv_header_Python_h]) AC_CHECK_HEADERS([Python.h], [have_python3_support=yes]) CPPFLAGS="$save_CPPFLAGS"])]) AS_IF([test "x$have_python3_support" = "xyes"], [AC_DEFINE([HAVE_PYTHON3_PROBES], [1], [Define to 1 to enable python version 3 probe support in systemtap.])], [AS_IF([test "x$with_python3_probes" = "xyes"], [AC_MSG_ERROR([python version 3 probe support requested but not found])]) ]) AM_CONDITIONAL([HAVE_PYTHON3_PROBES], [test "x$have_python3_support" = "xyes"]) dnl We want either (or both) python probe support. AM_CONDITIONAL([HAVE_PYTHON_PROBES], [test "x$have_python2_support" = "xyes" -o "x$have_python3_support" = "xyes"]) AC_ARG_ENABLE([monitor], AS_HELP_STRING([--disable-monitor],[Disable monitor])) if test "$enable_monitor" != "no"; then dnl Check for presence of json-c and ncurses for use in monitor mode PKG_CHECK_MODULES([jsonc], [json-c >= 0.11], [have_jsonc=yes], [have_jsonc=no]) PKG_CHECK_MODULES([ncurses], [ncurses], [have_ncurses=yes], [have_ncurses=no]) if test "${have_jsonc}" == "yes" -a "${have_ncurses}" == yes; then AC_DEFINE([HAVE_MONITOR_LIBS],[1],[Define to 1 if json-c and ncurses libraries are installed]) fi fi AM_CONDITIONAL([HAVE_MONITOR_LIBS], [test "${have_jsonc}" == "yes" -a "${have_ncurses}" == "yes" -a "$enable_monitor" != "no"]) AC_CACHE_CHECK([for assembler .section "?" flags support], stap_cv_sectionq, [ old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wa,--fatal-warnings" AC_COMPILE_IFELSE([AC_LANG_SOURCE([asm(".section .note.foo,\"?\",\"note\"\n" ".byte 1, 2, 3\n" ".previous\n" ".section .text,\"axG\",\"progbits\",foogroup,comdat\n" ".byte 1\n" ".pushsection .note.foo,\"?\",\"note\"\n" ".byte 4, 5, 6\n" ".popsection\n" ".byte 2\n");])], stap_cv_sectionq=yes, stap_cv_sectionq=no) CFLAGS="$old_CFLAGS"]) AC_SUBST(support_section_question) support_section_question=0 if test $stap_cv_sectionq = yes; then support_section_question=1 fi AC_ARG_WITH([bpf], AS_HELP_STRING([--without-bpf],[Do not try to build BPF components])) dnl Allow --without-bpf to disable this autodetection, as some kernels dnl have some headers but missing some decls like __NR_bpf. Too hard dnl to detect all the prereqs here. AS_IF([test "x$with_bpf" != "xno"], [ AC_CHECK_DECLS([BPF_PROG_TYPE_PERF_EVENT], [AC_DEFINE([HAVE_BPF_DECLS], [1], [Define to 1 if you have the necessary declarations in bpf.h])], [], [#include ]) ]) AM_CONDITIONAL(HAVE_BPF_DECLS, [test "x$ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" == "xyes"]) AC_CONFIG_FILES([includes/sys/sdt-config.h po/Makefile.in]) dnl determine whether BPF raw tracepoints are available AC_CHECK_DECLS([BPF_PROG_TYPE_RAW_TRACEPOINT], [AC_DEFINE([HAVE_BPF_PROG_TYPE_RAW_TRACEPOINT], [1], [Define to 1 if you have the necessary declarations in bpf.h])], [], [#include ]) if test $build_elfutils = yes -a $enable_translator = yes; then here=`pwd` case "$with_elfutils" in /*) elfutils_srcdir="$with_elfutils" ;; *) elfutils_srcdir="${here}/$with_elfutils" ;; esac if ! test -f ${elfutils_srcdir}/configure; then AC_MSG_ERROR([No ${elfutils_srcdir}/configure, forgot to run autoreconf -i?]) fi AC_MSG_NOTICE([running ${elfutils_srcdir}/configure]) save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -fgnu89-inline" CFLAGS="$CFLAGS -fgnu89-inline" gnu89_inline_flag="" AC_COMPILE_IFELSE([AC_LANG_SOURCE([int something ();])], [ AC_MSG_NOTICE([Compiling elfutils with gcc -fgnu89-inline]) gnu89_inline_flag="-fgnu89-inline"],[ AC_MSG_NOTICE([Compiler does not support -fgnu89-inline])]) CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" # Our libdw.so's libebl will look in $ORIGIN/../lib/... but that # $ORIGIN is where libdw.so resides, which is not where there is a ../lib. # Note that $libdir might be using a quoted use of $exec_prefix or $prefix. # So we must make sure to pass those settings to elfutils configure. elfutils_rpath="-Wl,--enable-new-dtags,-rpath,${libdir}/${PACKAGE_NAME}" # Check whether this is a source release, or a source checkout. # We need --enable-maintainer-mode if it isn't a source release. # elfutils.spec is only distributed in source releases. if test -f ${elfutils_srcdir}/elfutils.spec; then need_maintainer_option="" else need_maintainer_option="--enable-maintainer-mode" fi (mkdir -p build-elfutils && cd build-elfutils && bash ${elfutils_srcdir}/configure --enable-libebl-subdir=${PACKAGE_NAME} \ --includedir="${here}/include-elfutils" \ --libdir="${here}/lib-elfutils" \ --exec-prefix="$exec_prefix" \ --prefix="$prefix" \ --enable-dwz \ ${need_maintainer_option} \ CFLAGS="${CFLAGS/-Wall/} $gnu89_inline_flag -fexceptions" \ LDFLAGS="$LDFLAGS $elfutils_rpath" && if test -f ${elfutils_srcdir}/config/version.h.in; then echo Found elfutils/version.h header... else echo elfutils/version.h header not found, need elfutils 0.142+... exit -1 fi ) if test $? != 0; then exit -1; fi fi dnl Optional libselinux support allows stapdyn to check dnl for booleans that would prevent Dyninst from working. AC_ARG_WITH([selinux], AS_HELP_STRING([--without-selinux], [Do not use libselinux even if present])) AS_IF([test "x$with_selinux" != "xno"], [ PKG_CHECK_MODULES([selinux], [libselinux], [have_selinux=yes AC_DEFINE([HAVE_SELINUX], [1], [Define to 1 if you have the SELinux libraries.]) ], [have_selinux=no]) ], [have_selinux=no]) AM_CONDITIONAL([HAVE_SELINUX], [test "${have_selinux}" = "yes"]) dnl Used in monitor mode. Only available on kernel versions >= 2.6.35 AC_CHECK_DECL([F_SETPIPE_SZ], [AC_DEFINE(HAVE_F_SETPIPE_SZ,[1], Define to 1 if F_SETPIPE_SZ is available.)], [], [#include ]) dnl Handle java+byteman support AC_CHECK_PROG(have_javac, javac, yes, no) AC_CHECK_PROG(have_jar, jar, yes, no) if test "$have_javac" != no -a "$have_jar" != no; then echo java found, will try to configure Byteman support AC_ARG_WITH([java], [AS_HELP_STRING([--with-java=DIRECTORY], [Specify JDK directory to compile libHelperSDT.so against (default is /usr/lib/jvm/java)])], [], [with_java=/usr/lib/jvm/java]) dnl don't use AC_CHECK_FILE here, as that blocks cross-compiling if test ! -d "$with_java"; then with_java=no fi AC_SUBST(JAVADIR, "${with_java}") # always needed to compile if test "$with_java" != "no"; then AC_DEFINE_UNQUOTED(HAVE_JAVA, "1", [Flag indicating that libHelperSDT.so is available (can be found in PKGLIBDIR)]) fi AM_CONDITIONAL([HAVE_JAVA], [test "$with_java" != "no"]) else AC_MSG_WARN([will not run per-method java probing, missing byteman or java requirements]) AM_CONDITIONAL([HAVE_JAVA],false) fi # java+byteman support AC_SUBST(ENABLE_NLS, "$USE_NLS") AC_SUBST(localedir, "$localedir") AC_SUBST(LOCALEDIR, "$localedir") AC_ARG_WITH([extra-version], AS_HELP_STRING([--with-extra-version=STRING], [Add STRING to stap -V version])) AS_IF([test "x$with_extra_version" != "xno"], [ stap_extra_version="$with_extra_version" AC_MSG_NOTICE([Adding extra version $stap_extra_version])], [ stap_extra_version=""]) AC_DEFINE_UNQUOTED(STAP_EXTRA_VERSION, "$stap_extra_version", [extra stap version code]) AC_SUBST(STAP_EXTRA_VERSION, "$stap_extra_version") dnl Handle the option to build httpd web compilation service AC_ARG_ENABLE([http], AS_HELP_STRING([--enable-http], [Enable building http web compilation service, if possible])) have_http_support=no dnl (default off) AS_IF([test "x$enable_http" = "xyes"], [dnl Do we have the microhttpd library? PKG_CHECK_MODULES([libmicrohttpd], [libmicrohttpd > 0.9.0], [have_libmicrohttpd=true], [have_libmicrohttpd=false]) dnl Do we have the uuid library? PKG_CHECK_MODULES([uuid], [uuid >= 2.17.0], [have_libuuid=true], [have_libuuid=false]) dnl Do we have the curl library? PKG_CHECK_MODULES([libcurl], [libcurl >= 7.19.7], [have_libcurl=true], [have_libcurl=false]) dnl If we have all of the libraries, the json-c and nss libraries, dnl and full C++11 support, we could build the httpd web dnl compilation service. AS_IF([test "x$have_libmicrohttpd" == "xtrue" -a "x$have_libuuid" == "xtrue" -a "x$have_libcurl" == "xtrue" -a "x$have_jsonc" == "xyes" -a "x$have_nss" == "xyes" -a "x$have_openssl" == "xyes" -a "x$have_cxx0x" == "xno"], [have_http_support=yes])]) AS_IF([test "x$have_http_support" = "xyes"], [AC_DEFINE([HAVE_HTTP_SUPPORT], [1], [Define to 1 to enable http web service support in systemtap.])], [AS_IF([test "x$enable_http" = "xyes"], [AC_MSG_ERROR([http service support requested but not found])]) ]) AM_CONDITIONAL([HAVE_HTTP_SUPPORT], [test "x$have_http_support" = "xyes"]) dnl NEED_BASE_CLIENT_CODE is defined when we have either HAVE_NSS dnl or HAVE_HTTP_SUPPORT. AM_CONDITIONAL([NEED_BASE_CLIENT_CODE], [test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"]) AS_IF([test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"], [ AC_DEFINE([NEED_BASE_CLIENT_CODE], [1], [Define to 1 if the base client code is needed.]) ]) dnl This is here mainly to make sure that configure --prefix=... changes dnl the config.h files so files depending on it are recompiled dnl prefix is passed through indirectly in the Makefile.am AM_CPPFLAGS. dnl Formerly: Don't use this directly (when not given it is set to NONE). dnl Currently: inline autoconf's later defaulting stap_prefix=$prefix test "$stap_prefix" = NONE && stap_prefix=$ac_default_prefix AC_DEFINE_UNQUOTED(STAP_PREFIX, "$stap_prefix", [configure prefix location]) AC_SUBST(STAP_PREFIX, "$stap_prefix") AC_CONFIG_HEADERS([config.h:config.in]) dnl XXX: we'd like fully expanded path names for the @macros@ in there, dnl not like exec_prefix=${prefix} AC_CONFIG_FILES([Makefile doc/Makefile man/Makefile man/cs/Makefile \ doc/beginners/Makefile doc/SystemTap_Tapset_Reference/Makefile \ man/stap.1 man/stappaths.7 man/systemtap-service.8 \ man/cs/stap.1 man/cs/stappaths.7 man/cs/systemtap.8 \ initscript/config.systemtap initscript/config.stap-server \ initscript/systemtap initscript/stap-server \ initscript/99stap/module-setup.sh \ initscript/99stap/install \ initscript/99stap/check ]) AC_CONFIG_SUBDIRS(testsuite) if test $enable_translator == "yes"; then AC_CONFIG_FILES([run-stap], [chmod +x run-stap]) fi AC_CONFIG_FILES([dtrace], [chmod +x dtrace]) AC_CONFIG_FILES(stapdyn/Makefile) AC_CONFIG_FILES(java/Makefile) AC_CONFIG_FILES([java/stapbm], [chmod +x java/stapbm]) AC_CONFIG_FILES(python/Makefile) AC_CONFIG_FILES(staprun/Makefile) AC_CONFIG_FILES(stapbpf/Makefile) AC_CONFIG_FILES([httpd/Makefile httpd/docker/Makefile]) AC_CONFIG_FILES([staprun/run-staprun], [chmod +x staprun/run-staprun]) AC_CONFIG_FILES([staprun/guest/stapshd], [chmod +x staprun/guest/stapshd]) AC_CONFIG_FILES([staprun/guest/stapsh-daemon], [chmod +x staprun/guest/stapsh-daemon]) AC_CONFIG_FILES([staprun/guest/stapsh@.service]) AC_CONFIG_FILES(stap-exporter/Makefile) dnl AC_CONFIG_FILES([macros.systemtap]) dnl ^^^ not that one, because we want to expand $vars etc. to fqdn's, dnl so we do the mapping in the Makefile.am # Setup "shadow" directory doc/beginners that has the basic directories setup for # xmlto in one directory (through directory links if necessary). # It would be nice to use AC_CONFIG_LINKS, but automake complains when # the src is a directory and not a file. AC_CONFIG_COMMANDS([doc/beginners], [rm -f $ac_abs_top_builddir/doc/beginners/en-US $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite && mkdir -p $ac_abs_top_builddir/doc/beginners/build/en-US && ln -s $ac_abs_top_srcdir/doc/SystemTap_Beginners_Guide/en-US $ac_abs_top_builddir/doc/beginners/en-US && ln -s $ac_abs_top_srcdir/testsuite $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite]) AC_OUTPUT if test "${prefix}" = "/usr/local"; then AC_MSG_NOTICE([]) AC_MSG_NOTICE([For a private or temporary build of systemtap, we recommend]) AC_MSG_NOTICE([configuring with a prefix. For example, try]) AC_MSG_NOTICE([$0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$]) AC_MSG_NOTICE([Running systemtap uninstalled, entirely out of the build tree,]) AC_MSG_NOTICE([is not supported.]) fi systemtap-4.2/coveragedb.cxx000066400000000000000000000243631356460210500162470ustar00rootroot00000000000000// coveragedb.cxx // Copyright (C) 2007 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "parse.h" #include "coveragedb.h" #include "config.h" #include "elaborate.h" #include "tapsets.h" #include "session.h" #include "util.h" #ifdef HAVE_LIBSQLITE3 #include #include #include using namespace std; void print_coverage_info(systemtap_session &s) { // print out used probes clog << _("---- used probes-----") << endl; for (unsigned i=0; i used_probe_list; s.probes[i]->collect_derivation_chain(used_probe_list); for (unsigned j=0; jlocations.size(); ++k) clog << _("probe: ") << used_probe_list[j]->locations[k]->components.front()->tok->location << endl; } clog << "----" << endl; // for each probe print used and unused variables for (unsigned j=0; jlocals.size(); ++j) { clog << _("local: ") << s.probes[i]->locals[j]->tok->location << endl; } for (unsigned j=0; junused_locals.size(); ++j) { clog << _("unused_local: ") << s.probes[i]->unused_locals[j]->tok->location << endl; } } // print out unused probes clog << _("---- unused probes----- ") << endl; for (unsigned i=0; i unused_probe_list; s.unused_probes[i]->collect_derivation_chain(unused_probe_list); for (unsigned j=0; jlocations.size(); ++k) clog << _("probe: ") << unused_probe_list[j]->locations[k]->components.front()->tok->location << endl; } } // print out used functions clog << _("---- used functions----- ") << endl; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { clog << "function: " << it->second->tok->location << " " << it->second->name << endl; } // print out unused functions clog << _("---- unused functions----- ") << endl; for (unsigned i=0; itok->location << " " << s.unused_functions[i]->name << endl; } // print out used globals clog << _("---- used globals----- ") << endl; for (unsigned i=0; itok->location << " " << s.globals[i]->name << endl; } // print out unused globals clog << _("---- unused globals----- ") << endl; for (unsigned i=0; itok->location << " " << s.unused_globals[i]->name << endl; } } bool has_table(sqlite3 *db, const char * table) { int rc, rows, columns; char *errmsg; char **results = NULL; ostringstream command; command << "SELECT name FROM sqlite_master " << "WHERE type='table' AND name='" << table << "'"; rc = sqlite3_get_table(db, command.str().c_str(), &results, &rows, &columns, &errmsg); if(rc != SQLITE_OK) { cerr << _("Error in statement: ") << command.str() << " [" << errmsg << "]." << endl; } sqlite3_free_table(results); return (rows !=0); } bool has_index(sqlite3 *db, const char * index) { int rc, rows, columns; char *errmsg; char **results = NULL; ostringstream command; command << "SELECT name FROM sqlite_master " << "WHERE type='index' AND name='" << index << "'"; rc = sqlite3_get_table(db, command.str().c_str(), &results, &rows, &columns, &errmsg); if(rc != SQLITE_OK) { cerr << _("Error in statement: ") << command.str() << " [" << errmsg << "]." << endl; } sqlite3_free_table(results); return (rows !=0); } void sql_stmt(sqlite3 *db, const char* stmt) { char *errmsg; int ret; // cerr << "sqlite: " << stmt << endl; ret = sqlite3_exec(db, stmt, 0, 0, &errmsg); if(ret != SQLITE_OK) { cerr << _("Error in statement: ") << stmt << " [" << errmsg << "]." << endl; } } void enter_element(sqlite3 *db, coverage_element &x) { ostringstream command; command << "insert or ignore into counts values ('" << x.file << "', '" << x.line << "', '" << x.col << "', '" << x.type << "','" << x.name << "', '" << x.parent <<"'," << "'0', '0')"; sql_stmt(db, command.str().c_str()); } void increment_element(sqlite3 *db, coverage_element &x) { ostringstream command; // make sure value in table command << "insert or ignore into counts values ('" << x.file << "', '" << x.line << "', '" << x.col << "', '" << x.type << "','" << x.name << "', '" << x.parent <<"'," << "'0', '0'); " // increment appropriate value << "update counts set compiled=compiled+" << x.compiled << " where (" << "file=='" << x.file << "' and " << "line=='" << x.line << "' and " << "col=='" << x.col << "' and " << "type=='" << x.type << "' and " << "name=='" << x.name << "')"; sql_stmt(db, command.str().c_str()); } void sql_update_used_probes(sqlite3 *db, systemtap_session &s) { // update database used probes for (unsigned i=0; i used_probe_list; s.probes[i]->collect_derivation_chain(used_probe_list); for (unsigned j=0; jlocations.size(); ++k){ struct source_loc place = used_probe_list[j]->locations[k]->components.front()->tok->location; coverage_element x(place); x.type = db_type_probe; x.name = used_probe_list[j]->locations[k]->str(); x.compiled = 1; increment_element(db, x); } } // for each probe update used and unused variables for (unsigned j=0; jlocals.size(); ++j) { struct source_loc place = s.probes[i]->locals[j]->tok->location; coverage_element x(place); x.type = db_type_local; x.name = s.probes[i]->locals[j]->tok->content; x.compiled = 1; increment_element(db, x); } for (unsigned j=0; junused_locals.size(); ++j) { struct source_loc place = s.probes[i]->unused_locals[j]->tok->location; coverage_element x(place); x.type = db_type_local; x.name = s.probes[i]->unused_locals[j]->tok->content; x.compiled = 0; increment_element(db, x); } } } void sql_update_unused_probes(sqlite3 *db, systemtap_session &s) { // update database unused probes for (unsigned i=0; i unused_probe_list; s.unused_probes[i]->collect_derivation_chain(unused_probe_list); for (unsigned j=0; jlocations.size(); ++k) { struct source_loc place = unused_probe_list[j]->locations[k]->components.front()->tok->location; coverage_element x(place); x.type = db_type_probe; x.name = unused_probe_list[j]->locations[k]->str(); x.compiled = 0; increment_element(db, x); } } } } void sql_update_used_functions(sqlite3 *db, systemtap_session &s) { // update db used functions for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { struct source_loc place = it->second->tok->location; coverage_element x(place); x.type = db_type_function; x.name = it->second->name; x.compiled = 1; increment_element(db, x); } } void sql_update_unused_functions(sqlite3 *db, systemtap_session &s) { // update db unused functions for (unsigned i=0; itok->location; coverage_element x(place); x.type = db_type_function; x.name = s.unused_functions[i]->name; x.compiled = 0; increment_element(db, x); } } void sql_update_used_globals(sqlite3 *db, systemtap_session &s) { // update db used globals for (unsigned i=0; itok->location; coverage_element x(place); x.type = db_type_global; x.name = s.globals[i]->name; x.compiled = 1; increment_element(db, x); } } void sql_update_unused_globals(sqlite3 *db, systemtap_session &s) { // update db unused globals for (unsigned i=0; itok->location; coverage_element x(place); x.type = db_type_global; x.name = s.unused_globals[i]->name; x.compiled = 0; increment_element(db, x); } } void update_coverage_db(systemtap_session &s) { sqlite3 *db; int rc; string filename(s.data_path + "/" + s.kernel_release + ".db"); rc = sqlite3_open(filename.c_str(), &db); if( rc ){ cerr << "Can't open database: " << sqlite3_errmsg(db) << endl; sqlite3_close(db); return; } // lock the database sql_stmt(db, "begin"); string create_table("create table counts (" "file text, line integer, col integer, " "type text, name text, parent text, " "compiled integer, executed integer)"); string create_index("create unique index tokens on counts (file, line, col, " "type, name)"); // make sure the table is there if (!has_table(db, "counts")) sql_stmt(db, create_table.c_str()); // make sure the index is there if (!has_index(db, "tokens")) sql_stmt(db, create_index.c_str()); sql_update_used_probes(db, s); sql_update_unused_probes(db, s); sql_update_used_functions(db, s); sql_update_unused_functions(db, s); sql_update_used_globals(db, s); sql_update_unused_globals(db, s); // unlock the database and close database sql_stmt(db, "commit"); sqlite3_close(db); } #endif /* HAVE_LIBSQLITE3 */ /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/coveragedb.h000066400000000000000000000035501356460210500156670ustar00rootroot00000000000000// coveragedb.cxx // Copyright (C) 2007 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef COVERAGEDB_H #define COVERAGEDB_H #include "session.h" #include "staptree.h" #include /* tuples: file, line number, column, type of object, name values: number of times object "pulled_in", number of times "removed", times executed if (compiled == 0) object never compiled if (compiled > 0) object compiled The following are not currently implemented. if (executed == 0) never executed if (executed > 0) executed Want to make sure that the data base accurately reflects testing. 1) atomic updates, either commit all or none of information 2) only update coverage db compile info, if compile successful 3) only update coverage db execute info, if instrumentation run suscessfully Would like to have something that looks for interesting features in db: list which things are not compile list which things are not exectuted ratio of compiled/total (overall, by file, by line) ratio of executed/total (overall, by file, by line) */ enum db_type { db_type_probe = 1, db_type_function = 2, db_type_local = 3, db_type_global = 4, }; class coverage_element { public: std::string file; int line; int col; int type; std::string name; std::string parent; int compiled; int executed; coverage_element(): line(0), col(0), compiled(0), executed(0) {} coverage_element(source_loc &place): file(place.file->name), line(place.line), col(place.column), type(0), compiled(0), executed(0) {} }; void print_coverage_info(systemtap_session &s); void update_coverage_db(systemtap_session &s); #endif /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/csclient.cxx000066400000000000000000000242251356460210500157470ustar00rootroot00000000000000/* Compile server client functions Copyright (C) 2010-2018 Red Hat Inc. This file is part of systemtap, and is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License (GPL); either version 2, or (at your option) any later version. */ // Completely disable the client if NSS is not available. #include "config.h" #include "session.h" #include "cscommon.h" #include "csclient.h" #include "client-nss.h" #ifdef HAVE_HTTP_SUPPORT #include "client-http.h" #endif #include "util.h" #include "stap-probe.h" #include #include extern "C" { #include #include #include } using namespace std; client_backend * nss_get_client_backend (systemtap_session &s) { // Use the correct backend. #ifdef HAVE_HTTP_SUPPORT if (! s.http_servers.empty()) return new http_client_backend (s); #endif #if HAVE_NSS return new nss_client_backend (s); #endif return NULL; } int compile_server_client::passes_0_4 () { // Use the correct backend. backend = nss_get_client_backend (s); if (backend == NULL) { clog << _("Using a compile server backend failed.") << endl; return 1; } PROBE1(stap, client__start, &s); // arguments parsed; get down to business if (s.verbose || ! s.auto_server_msgs.empty ()) clog << _("Using a compile server.") << endl; struct tms tms_before; times (& tms_before); struct timeval tv_before; gettimeofday (&tv_before, NULL); // Create the request package. int rc = initialize (); assert_no_interrupts(); if (rc != 0) goto done; rc = create_request (); assert_no_interrupts(); if (rc != 0) goto done; rc = backend->package_request (); assert_no_interrupts(); if (rc != 0) goto done; // Submit it to the server. rc = backend->find_and_connect_to_server (); assert_no_interrupts(); if (rc != 0) goto done; // Unpack and process the response. rc = backend->unpack_response (); assert_no_interrupts(); if (rc != 0) goto done; rc = process_response (); done: struct tms tms_after; times (& tms_after); unsigned _sc_clk_tck = sysconf (_SC_CLK_TCK); struct timeval tv_after; gettimeofday (&tv_after, NULL); #define TIMESPRINT "in " << \ (tms_after.tms_cutime + tms_after.tms_utime \ - tms_before.tms_cutime - tms_before.tms_utime) * 1000 / (_sc_clk_tck) << "usr/" \ << (tms_after.tms_cstime + tms_after.tms_stime \ - tms_before.tms_cstime - tms_before.tms_stime) * 1000 / (_sc_clk_tck) << "sys/" \ << ((tv_after.tv_sec - tv_before.tv_sec) * 1000 + \ ((long)tv_after.tv_usec - (long)tv_before.tv_usec) / 1000) << "real ms." if (rc == 0) { // Save the module, if necessary. if (s.last_pass == 4) s.save_module = true; // Copy module to the current directory. if (! pending_interrupts) { if (s.save_module) { string module_src_path = s.tmpdir + "/" + s.module_filename(); string module_dest_path = s.module_filename(); copy_file (module_src_path, module_dest_path, s.verbose >= 3); // Also copy the module signature, it it exists. module_src_path += ".sgn"; if (file_exists (module_src_path)) { module_dest_path += ".sgn"; copy_file(module_src_path, module_dest_path, s.verbose >= 3); } } // Print the name of the module if (s.last_pass == 4) { cout << s.module_filename() << endl; } } } // syntax errors, if any, are already printed if (s.verbose) { string ws = s.winning_server; if (ws == "") ws = "?"; clog << _("Passes: via server ") << ws << " " << getmemusage() << TIMESPRINT << endl; } if (rc && !s.dump_mode) { clog << _("Passes: via server failed. Try again with another '-v' option.") << endl; } PROBE1(stap, client__end, &s); return rc; } // Initialize a client/server session. int compile_server_client::initialize () { int rc = 0; // Create a temporary directory to package things in. client_tmpdir = s.tmpdir + "/client"; rc = create_dir (client_tmpdir.c_str ()); if (rc != 0) { const char* e = strerror (errno); clog << _("ERROR: cannot create temporary directory (\"") << client_tmpdir << "\"): " << e << endl; return rc; } backend->set_tmpdir(client_tmpdir); return backend->initialize(); } // Create the request package. int compile_server_client::create_request () { // Add the current protocol version. int rc = backend->add_protocol_version (CURRENT_CS_PROTOCOL_VERSION); if (rc != 0) return rc; // Add the script file or script option if (s.script_file != "") { if (s.script_file == "-") { // Copy the script from stdin string packaged_script_dir = client_tmpdir + "/script"; rc = create_dir (packaged_script_dir.c_str ()); if (rc != 0) { const char* e = strerror (errno); clog << _("ERROR: cannot create temporary directory ") << packaged_script_dir << ": " << e << endl; return rc; } if (s.stdin_script.str().empty()) s.stdin_script << cin.rdbuf(); rc = write_to_file(packaged_script_dir + "/-", s.stdin_script.str()); if (rc != 0) return rc; // Let the backend know the file is there. rc = backend->add_tmpdir_file ("script/-"); if (rc != 0) return rc; // Name the script in the stap cmd arguments. rc = backend->add_cmd_arg ("script/-"); if (rc != 0) return rc; } else { // Add the script. rc = backend->include_file_or_directory ("script", s.script_file); if (rc != 0) return rc; } } // Add -I paths. Skip the default directory. if (s.include_arg_start != -1) { unsigned limit = s.include_path.size (); for (unsigned i = s.include_arg_start; i < limit; ++i) { rc = backend->add_cmd_arg ("-I"); if (rc != 0) return rc; rc = backend->include_file_or_directory ("tapset", s.include_path[i]); if (rc != 0) return rc; } } // Add other options. rc = add_cmd_args (); if (rc != 0) return rc; // Add the sysinfo. rc = backend->add_sysinfo (); if (rc != 0) return rc; // Add localization data rc = add_localization_variables(); // Add the machine owner key (MOK) fingerprints, if needed. if (! s.mok_fingerprints.empty()) { ostringstream fingerprints; vector::const_iterator it; for (it = s.mok_fingerprints.begin(); it != s.mok_fingerprints.end(); it++) backend->add_mok_fingerprint(*it); rc = backend->finalize_mok_fingerprints(); if (rc != 0) return rc; } return rc; } int compile_server_client::process_response () { // Pick up the results of running stap on the server. string filename = backend->server_tmpdir + "/rc"; int stap_rc; int rc = read_from_file (filename, stap_rc); if (rc != 0) return rc; rc = stap_rc; if (s.last_pass >= 4) { // The server should have returned a module. string filespec = s.tmpdir + "/*.ko"; if (s.verbose >= 3) clog << _F("Searching \"%s\"\n", filespec.c_str()); glob_t globbuf; int r = glob(filespec.c_str (), 0, NULL, & globbuf); if (r != GLOB_NOSPACE && r != GLOB_ABORTED && r != GLOB_NOMATCH) { if (globbuf.gl_pathc > 1) clog << _("Incorrect number of modules in server response") << endl; else { assert (globbuf.gl_pathc == 1); string modname = globbuf.gl_pathv[0]; if (s.verbose >= 3) clog << _(" found ") << modname << endl; // If a module name was not specified by the user, then set it to // be the one generated by the server. if (! s.save_module) { vector components; tokenize (modname, components, "/"); s.module_name = components.back (); s.module_name.erase(s.module_name.size() - 3); } // If a uprobes.ko module was returned, then make note of it. string uprobes_ko; if (backend->server_version < "1.6") uprobes_ko = s.tmpdir + "/server/uprobes.ko"; else uprobes_ko = s.tmpdir + "/uprobes/uprobes.ko"; if (file_exists (uprobes_ko)) { s.need_uprobes = true; s.uprobes_path = uprobes_ko; } } } else if (s.have_script) { if (rc == 0) { clog << _("No module was returned by the server.") << endl; rc = 1; } } globfree (& globbuf); } // If the server returned a MOK certificate, copy it to the user's // current directory. string server_MOK_public_cert = backend->server_tmpdir + "/" MOK_PUBLIC_CERT_NAME; if (file_exists (server_MOK_public_cert)) { string dst = MOK_PUBLIC_CERT_NAME; copy_file (server_MOK_public_cert, dst, (s.verbose >= 3)); } // Output stdout and stderr. filename = backend->server_tmpdir + "/stderr"; flush_to_stream (filename, clog); filename = backend->server_tmpdir + "/stdout"; flush_to_stream (filename, cout); return rc; } // Add the arguments specified on the command line to the server request // package, as appropriate. int compile_server_client::add_cmd_args () { // stap arguments to be passed to the server. int rc = 0; unsigned limit = s.server_args.size(); for (unsigned i = 0; i < limit; ++i) { rc = backend->add_cmd_arg (s.server_args[i]); if (rc != 0) return rc; } // Script arguments. limit = s.args.size(); if (limit > 0) { rc = backend->add_cmd_arg ("--"); if (rc != 0) return rc; for (unsigned i = 0; i < limit; ++i) { rc = backend->add_cmd_arg (s.args[i]); if (rc != 0) return rc; } } return rc; } // Add the localization variables to the server request // package. int compile_server_client::add_localization_variables() { const set &locVars = localization_variables(); /* Note: We don't have to check for the contents of the environment * variables here, since they will be checked extensively on the * server. */ for (auto it = locVars.begin(); it != locVars.end(); it++) { char* var = getenv((*it).c_str()); if (var) backend->add_localization_variable(*it, var); } return backend->finalize_localization_variables(); } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/csclient.h000066400000000000000000000043471356460210500153770ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2010-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CSCLIENT_H #define CSCLIENT_H #include "cscommon.h" #include "nss-server-info.h" #include class client_backend { public: client_backend (systemtap_session &s) : s(s) {} ~client_backend () {} void set_tmpdir (std::string &tmpdir) { client_tmpdir = tmpdir; } virtual int initialize () = 0; virtual int package_request () = 0; virtual int find_and_connect_to_server () = 0; virtual int unpack_response () = 0; virtual int add_protocol_version (const std::string &version) = 0; virtual int add_sysinfo () = 0; virtual int include_file_or_directory (const std::string &subdir, const std::string &path, const bool add_arg = true) = 0; virtual int add_tmpdir_file (const std::string &path) = 0; virtual int add_cmd_arg (const std::string &arg) = 0; virtual void add_localization_variable(const std::string &var, const std::string &value) = 0; virtual int finalize_localization_variables() = 0; virtual void add_mok_fingerprint(const std::string &fingerprint) = 0; virtual int finalize_mok_fingerprints() = 0; #if HAVE_NSS virtual void fill_in_server_info (compile_server_info &info) = 0; virtual int trust_server_info (const compile_server_info &info) = 0; #endif std::string server_tmpdir; cs_protocol_version server_version; protected: systemtap_session &s; std::string client_tmpdir; }; class compile_server_client { public: compile_server_client (systemtap_session &s) : s(s), backend(NULL) {} int passes_0_4 (); private: // Client/server session methods. int initialize (); int create_request (); int process_response (); // Client/server utility methods. int add_cmd_args (); int add_localization_variables(); void show_server_compatibility () const; systemtap_session &s; client_backend *backend; std::string client_tmpdir; }; // Return the appropriate client backend for the current session. client_backend *nss_get_client_backend (systemtap_session &s); #endif // CSCLIENT_H systemtap-4.2/cscommon.cxx000066400000000000000000000060441356460210500157600ustar00rootroot00000000000000/* Compile-server and client common functions Copyright (C) 2011 Red Hat Inc. This file is part of systemtap, and is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License (GPL); either version 2, or (at your option) any later version. */ #include "config.h" // Disable the code in this file if NSS is not available #if HAVE_NSS #include "util.h" #include "cscommon.h" #include #include #include #include #include #include #include extern "C" { #include } using namespace std; cs_protocol_version::~cs_protocol_version () { assert (this->v); free ((void*)this->v); } const cs_protocol_version & cs_protocol_version::operator= (const char *v) { if (this->v) free ((void *)this->v); this->v = strdup (v); return *this; } bool cs_protocol_version::operator< (const cs_protocol_version &that) const { // Compare the levels of each version in turn. vector these_tokens; tokenize (this->v, these_tokens, "."); vector those_tokens; tokenize (that.v, those_tokens, "."); unsigned this_limit = these_tokens.size (); unsigned that_limit = those_tokens.size (); unsigned i; for (i = 0; i < this_limit && i < that_limit; ++i) { char *e; unsigned long this_level = strtoul (these_tokens[i].c_str (), & e, 0); assert (! *e); unsigned long that_level = strtoul (those_tokens[i].c_str (), & e, 0); assert (! *e); if (this_level > that_level) return false; if (this_level < that_level) return true; } // If the other version has more components, then this one is less than that one. if (i < that_limit) { assert (i == this_limit); return true; } // This version is greater than or equal to that one. return false; } int read_from_file (const string &fname, cs_protocol_version &data) { // C++ streams may not set errno in the even of a failure. However if we // set it to 0 before each operation and it gets set during the operation, // then we can use its value in order to determine what happened. string dataStr; errno = 0; ifstream f (fname.c_str ()); if (! f.good ()) { clog << _F("Unable to open file '%s' for reading: ", fname.c_str()); goto error; } // Read the data; errno = 0; f >> dataStr; if (f.fail ()) { clog << _F("Unable to read from file '%s': ", fname.c_str()); goto error; } data = dataStr.c_str (); // NB: not necessary to f.close (); return 0; // Success error: if (errno) clog << strerror (errno) << endl; else clog << _("unknown error") << endl; return 1; // Failure } string get_cert_serial_number (const CERTCertificate *cert) { ostringstream serialNumber; serialNumber << hex << setfill('0') << right; for (unsigned i = 0; i < cert->serialNumber.len; ++i) { if (i > 0) serialNumber << ':'; serialNumber << setw(2) << (unsigned)cert->serialNumber.data[i]; } return serialNumber.str (); } #endif /* HAVE_NSS */ systemtap-4.2/cscommon.h000066400000000000000000000045511356460210500154060ustar00rootroot00000000000000// Common functions and macros used by the compile-server and its client. #ifndef CSCOMMON_H #define CSCOMMON_H 1 #define MOK_PUBLIC_CERT_NAME "signing_key.x509" #define MOK_PUBLIC_CERT_FILE "/" MOK_PUBLIC_CERT_NAME #if HAVE_NSS extern "C" { #include #include } #endif // Versioning system for the protocol used for communication between the compile-server and client. // The original version is 1.0. After that, we use the systemtap release number. // // By Policy: // - All servers are backward compatible with clients. Servers adapt to the protocol version // of the client. // - All clients are backward compatible with servers. Clients adapt to the protocol version // of the server. Warnings are issued for servers lacking features. // // Features: // Version 1.0 // Original version // Versions 1.6 and higher // Client: // - Passes localization variables to the server in the file client_tmpdir + "/locale" // - Looks for the uprobes module in server_response + "/uprobes" // - No longer needs to remove stap's "Keeping temporary directory ..." message from // the server's stderr response. // - Looks for 'version' tag in server's avahi record and does not automatically connect to // an incompatible server. Also prefers newer servers over older ones. // Server: // - Applies localization variables passed from the client to stap during translation. // - Looks for the uprobes module in server_response + "/uprobes" // - Uses --tmpdir to specify temp directory to be used by stap, instead of -k, in order to // avoid parsing error messages in search of stap's randomly-generated temp dir. // - Advertises its protocol version using a 'version' tag in avahi. // #define CURRENT_CS_PROTOCOL_VERSION VERSION struct cs_protocol_version { cs_protocol_version (const char *v = "1.0") : v(0) { *this = v; } ~cs_protocol_version (); const cs_protocol_version &operator= (const char *v); bool operator< (const cs_protocol_version &that) const; const char *v; }; #if HAVE_NSS struct thread_arg { PRFileDesc *tcpSocket; CERTCertificate *cert; SECKEYPrivateKey *privKey; PRNetAddr addr; }; extern int read_from_file (const std::string &fname, cs_protocol_version &data); extern std::string get_cert_serial_number (const CERTCertificate *cert); #endif #endif // CSCOMMON_H systemtap-4.2/depcomp000077500000000000000000000560161356460210500147770ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can 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, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemtap-4.2/doc/000077500000000000000000000000001356460210500141575ustar00rootroot00000000000000systemtap-4.2/doc/.gitignore000066400000000000000000000001111356460210500161400ustar00rootroot00000000000000*.aux *.glo *.idx *.log *.lot *.out *.pdf *.toc *.dvi _region_.* langref systemtap-4.2/doc/.latex2html-init000066400000000000000000000021161356460210500172050ustar00rootroot00000000000000$CUSTOM_TITLES = 1; $CUSTOM_TITLES_LENGTH = 6; # modified version of make_long_title # does not include the section number in the title (name) of the file sub custom_title_hook { local($_)= @_; local($num_words) = $CUSTOM_TITLES_LENGTH; #RRM: scan twice for short words, due to the $4 overlap # Cannot use \b , else words break at accented letters $_ =~ s/(^|\s)\s*($GENERIC_WORDS)(\'|(\s))/$4/ig; $_ =~ s/(^|\s)\s*($GENERIC_WORDS)(\'|(\s))/$4/ig; #remove leading numbering, unless that's all there is. local($sec_num); if (!(/^\d+(\.\d*)*\s*$/)&&(s/^\s*(\d+(\.\d*)*)\s*/$sec_num=$1;''/e)) { $num_words-- }; &remove_markers; s/<[^>]*>//g; #remove tags #revert entities, etc. to TeX-form... s/([\200-\377])/"\&#".ord($1).";"/eg; $_ = &revert_to_raw_tex($_); # get $LONG_TITLES number of words from what remains $_ = &get_first_words($_, $num_words) if ($num_words); # ...and cleanup accents, spaces and punctuation $_ = join('', (0 ? $sec_num : ''), $_); s/\\\W\{?|\}//g; s/\s/_/g; s/\W/_/g; s/__+/_/g; s/_+$//; $_; } systemtap-4.2/doc/Language_Reference_Guide/000077500000000000000000000000001356460210500207755ustar00rootroot00000000000000systemtap-4.2/doc/Language_Reference_Guide/Makefile000066400000000000000000000006731356460210500224430ustar00rootroot00000000000000#Makefile for Language_Reference_Guide XML_LANG = en-US DOCNAME = Language_Reference_Guide PRODUCT = Fedora BRAND = fedora CHUNK_SECTION_DEPTH=1 #OTHER_LANGS = as-IN bn-IN de-DE es-ES fr-FR gu-IN hi-IN it-IT ja-JP kn-IN ko-KR ml-IN mr-IN or-IN pa-IN pt-BR ru-RU si-LK ta-IN te-IN zh-CN zh-TW # Extra Parameters start here # Extra Parameters stop here COMMON_CONFIG = /usr/share/publican include $(COMMON_CONFIG)/make/Makefile.common systemtap-4.2/doc/Language_Reference_Guide/README000066400000000000000000000016541356460210500216630ustar00rootroot00000000000000This is an automated source build of the Language Reference Guide, used to build it in Publican. To build the source, run: bash publicanize-langref.sh This will copy the LaTeX source of the Language Reference Guide and convert it to DocBook XML. You can now build it in pdf, html, etc using Publican. The main source of the Language Reference Guide is in: ../langref.tex As such, any revisions to this document should be applied to ../langref.tex, not to the source in this directory. IMPORTANT: The publicanize-langref.sh script uses latexml to create the raw XML files from langref.tex first before cleaning it up for Publican. You will need LaTeXML along with all its required perl modules to use publicanize-langref.sh. For more information on building from source, downloading, and installing LaTeXML, refer to the following URLs: http://dlmf.nist.gov/LaTeXML/download.html http://dlmf.nist.gov/LaTeXML/install.html systemtap-4.2/doc/Language_Reference_Guide/en-US/000077500000000000000000000000001356460210500217245ustar00rootroot00000000000000systemtap-4.2/doc/Language_Reference_Guide/en-US/Author_Group.xml000066400000000000000000000006121356460210500250630ustar00rootroot00000000000000 Robb Romans IBM Documentation robb@linux.vnet.ibm.com systemtap-4.2/doc/Language_Reference_Guide/en-US/Book_Info.xml000066400000000000000000000042401356460210500243130ustar00rootroot00000000000000 Language Reference Guide A guide to the constructs and syntax used in SystemTap scripts Fedora 10 1 1 The SystemTap Language Reference Guide is a comprehensive reference of the language constructs and syntax used in SystemTap scripts. It is suitable for users who have intermediate to advanced knowledge of SystemTap. For other available SystemTap documentation, refer to . Logo Copyright © 2007 Red Hat Inc., Copyright © 2007 IBM Corp., Copyright © 2007 Intel Corporation. This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. The GNU Free Documentation License is available from or by writing to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. systemtap-4.2/doc/Language_Reference_Guide/en-US/Language_Reference_Guide.ent000066400000000000000000000001071356460210500272500ustar00rootroot00000000000000 systemtap-4.2/doc/Language_Reference_Guide/en-US/Preface.xml000066400000000000000000000011171356460210500240130ustar00rootroot00000000000000 Preface systemtap-4.2/doc/Language_Reference_Guide/en-US/Revision_History.xml000066400000000000000000000011031356460210500257600ustar00rootroot00000000000000 Revision History 1.0 systemtap-4.2/doc/Language_Reference_Guide/en-US/images/000077500000000000000000000000001356460210500231715ustar00rootroot00000000000000systemtap-4.2/doc/Language_Reference_Guide/en-US/images/icon.svg000066400000000000000000003301271356460210500246500ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-4.2/doc/Language_Reference_Guide/publicanize-langref.sh000077500000000000000000000204551356460210500252630ustar00rootroot00000000000000#!/bin/bash #this script converts the langref.tex source for the Language Reference Guide into #DocBook XML. the conversion is done thru latexml, a utility that comes with dblatex-0.2.7. #the output xml file of latexml is pretty dirty, so this script is needed to further clean it up. #copy latex file to here cp ../langref.tex . #convert it to raw xml latexml langref.tex --dest=Language_Reference_Guide.xml #remove excess whitespace sed -i -e 's/^\s*//g' Language_Reference_Guide.xml sed -i -e 's///g' Language_Reference_Guide.xml cat Language_Reference_Guide.xml | perl -p -e 'undef $/;s|\n<\?latexml options="twoside,english" class="article"\?>\n<\?latexml package="geometry"\?>\n<\?latexml RelaxNGSchema="LaTeXML"\?>\n<\?latexml RelaxNGSchema="LaTeXML"\?>\n\nSystemTap Language Reference|<\!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]>\n\n|msg' | perl -p -e 'undef $/;s|\n

This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel.

\n
\n\n

Copyright © 2007 Red Hat Inc.\nCopyright © 2007 IBM Corp.\nCopyright © 2007 Intel Corporation.

\n
\n\n

Permission is granted to copy, distribute and/or modify this document\nunder the terms of the GNU Free Documentation License, Version 1.2\nor any later version published by the Free Software Foundation;\nwith no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

\n
\n\n

The GNU Free Documentation License is available from\nhttp://www.gnu.org/licenses/fdl.html or by writing to\nthe Free Software Foundation, Inc., 51 Franklin Street,\nFifth Floor, Boston, MA 02110-1301, USA.

\n
||msg' | #fix up screens perl -p -e 'undef $/;s|\n\n||msg' | perl -p -e 'undef $/;s|\n\n\n||msg' | perl -p -e 'undef $/;s|\n\n||msg' | perl -p -e 'undef $/;s|\n\n\n||msg' | #fix up index tags perl -p -e 'undef $/;s|\nIndex\n||msg' | #needed later, for TABLES! perl -p -e 'undef $/;s|\n||msg' > clean.xml #further fix up headers! perl -p -i -e 's|<\?latexml searchpaths="[^>]*>\n||g' clean.xml #change main tags sed -i -e 's/<\/document>/<\/book>/g' clean.xml #more fixup for screen tags perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml #clean section tags sed -i -e 's/
/<\/chapter>/g' clean.xml #change subsection and subsubsection tags to section sed -i -e 's//<\/section>/g' clean.xml sed -i -e 's//<\/section>/g' clean.xml #remove with sed -i -e 's///g' clean.xml sed -i -e 's/<\/para>//g' clean.xml sed -i -e 's/

//g' clean.xml sed -i -e 's/<\/p>/<\/para>/g' clean.xml #properly convert xrefs sed -i -e 's//indexterm>/g' clean.xml perl -p -i -e 's///g' clean.xml sed -i -e 's///g' clean.xml sed -i -e 's/<\/indexphrase>/<\/primary>/g' clean.xml #convert s sed -i -e 's/emph>/emphasis>/g' clean.xml #convert itemizedlists and listitems, dependent on successful exec of "fix up screens" perl routines sed -i -e 's///g' clean.xml sed -i -e 's///g' clean.xml sed -i -e 's/<\/itemize>/<\/itemizedlist>/g' clean.xml sed -i -e 's/<\/item>/<\/listitem>/g' clean.xml #convert orderedlists and their respective listitems perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml #TRICKY: this perl expression takes all occurences of # http://sourceware.org/systemtap/wiki/HomePage # and replaces the string with "/>". from jfearn # note: [^"]* means "any number of occurences of characters that are NOT quotes # note: () groups strings/an expression together, which can be called later as $1 when replacing perl -p -i -e 's|([^<]*|$1/>|g' clean.xml #now, convert s sed -i -e 's/ accordingly; bold is , typewriter is perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml #weird remainders, defaulting them to command perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml #TABLES! #the first expression is quite dirty, since it assumes that all tables have 3 columns. dunno yet how to #automagicize this, since the orig XML doesn't have any attribute that specifies columns per table sed -i -e 's///g' clean.xml sed -i -e 's/tabular>/tgroup>/g' clean.xml perl -p -i -e 's|)|
]*>||g' clean.xml perl -p -i -e 's|]*>||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml #remove "About this guide" section #perl -p -i -e 'undef $/;s|
\nAbout this guide||msg' clean.xml #finalize: copy clean.xml to en-US, then deletes it cp clean.xml en-US/Language_Reference_Guide.xml #delete excess files rm langref.tex rm clean.xml rm Language_Reference_Guide.xml systemtap-4.2/doc/Makefile.am000066400000000000000000000017471356460210500162240ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap docs ## process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = subdir-objects PDF_FILES = tutorial.pdf langref.pdf DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SUBDIRS = SystemTap_Tapset_Reference beginners if BUILD_DOCS all-local: $(PDF_FILES) clean-local: rm -f *.pdf *.out *.log *.aux *.toc *.lot *.idx *.glo *.dvi install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) $(INSTALL_DATA) $(PDF_FILES) $(DOC_INSTALL_DIR) uninstall-local: @list='$(PDF_FILES)'; for p in $$list; do \ echo " rm -f '$(DOC_INSTALL_DIR)/$$p'"; \ rm -f "$(DOC_INSTALL_DIR)/$$p"; \ done endif SUFFIXES = ps pdf dvi ps tex .ps.pdf: ps2pdf -r600 $< .dvi.ps: dvips -t letter -o $@ $< .tex.dvi: pwd=`pwd`; cd $(srcdir); \ latex -output-directory=$$pwd $<; \ touch $*.glo; \ makeindex $*.glo -s nomencl.ist -o $*.gls; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $< systemtap-4.2/doc/Makefile.in000066400000000000000000000453051356460210500162330ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap docs VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ elfutils_abs_srcdir = @elfutils_abs_srcdir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = @oldincludedir@ openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ AUTOMAKE_OPTIONS = subdir-objects PDF_FILES = tutorial.pdf langref.pdf DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SUBDIRS = SystemTap_Tapset_Reference beginners SUFFIXES = ps pdf dvi ps tex all: all-recursive .SUFFIXES: .SUFFIXES: ps pdf dvi ps tex .dvi .pdf .ps .tex $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-am: all-am check: check-recursive @BUILD_DOCS_FALSE@all-local: all-am: Makefile all-local installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @BUILD_DOCS_FALSE@clean-local: @BUILD_DOCS_FALSE@uninstall-local: @BUILD_DOCS_FALSE@install-data-hook: clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ check check-am clean clean-generic clean-local cscopelist-am \ ctags ctags-am distclean distclean-generic distclean-tags dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-hook install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile @BUILD_DOCS_TRUE@all-local: $(PDF_FILES) @BUILD_DOCS_TRUE@clean-local: @BUILD_DOCS_TRUE@ rm -f *.pdf *.out *.log *.aux *.toc *.lot *.idx *.glo *.dvi @BUILD_DOCS_TRUE@install-data-hook: @BUILD_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @BUILD_DOCS_TRUE@ $(INSTALL_DATA) $(PDF_FILES) $(DOC_INSTALL_DIR) @BUILD_DOCS_TRUE@uninstall-local: @BUILD_DOCS_TRUE@ @list='$(PDF_FILES)'; for p in $$list; do \ @BUILD_DOCS_TRUE@ echo " rm -f '$(DOC_INSTALL_DIR)/$$p'"; \ @BUILD_DOCS_TRUE@ rm -f "$(DOC_INSTALL_DIR)/$$p"; \ @BUILD_DOCS_TRUE@ done .ps.pdf: ps2pdf -r600 $< .dvi.ps: dvips -t letter -o $@ $< .tex.dvi: pwd=`pwd`; cd $(srcdir); \ latex -output-directory=$$pwd $<; \ touch $*.glo; \ makeindex $*.glo -s nomencl.ist -o $*.gls; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.2/doc/SystemTap_Beginners_Guide/000077500000000000000000000000001356460210500212215ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/.gitignore000066400000000000000000000000041356460210500232030ustar00rootroot00000000000000tmp systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/000077500000000000000000000000001356460210500221505ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Appendix.xml000066400000000000000000000010311356460210500244350ustar00rootroot00000000000000 Full Version of Advanced Scripts This appendix contains the full versions of all scripts discussed in . systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Array-Operations.xml000066400000000000000000001170401356460210500260740ustar00rootroot00000000000000
Array Operations in SystemTap array operations associative arrays operations associative arrays This section enumerates some of the most commonly used array operations in SystemTap.
Assigning an Associated Value array operations assigning associated values assigning associated values array operations values, assignment of array operations Use = to set an associated value to indexed unique pairs, as in: array_name[index_expression] = value shows a very basic example of how to set an explicit associated value to a unique key. You can also use a handler function as both your index_expression and value. For example, you can use arrays to set a timestamp as the associated value to a process name (which you wish to use as your unique key), as in: assigning associated values array operations associating timestamps to process names array operations assigning associated values associating timestamps to process names operations assigning associated values associating timestamps to process names assigning associated values associating timestamps to process names array operations associating timestamps to process names assigning associated values array operations timestamps, association thereof to process names assigning associated values array operations Associating Timestamps to Process Names foo[tid()] = gettimeofday_s() Whenever an event invokes the statement in , SystemTap returns the appropriate tid() value (that is, the ID of a thread, which is then used as the unique key). At the same time, SystemTap also uses the function gettimeofday_s() to set the corresponding timestamp as the associated value to the unique key defined by the function tid(). This creates an array composed of key pairs containing thread IDs and timestamps. In this same example, if tid() returns a value that is already defined in the array foo, the operator will discard the original associated value to it, and replace it with the current timestamp from gettimeofday_s().
Reading Values From Arrays reading values from arrays array operations array operations reading values from arrays operations reading values from arrays You can also read values from an array the same way you would read the value of a variable. To do so, include the array_name[index_expression] statement as an element in a mathematical expression. For example: reading values from arrays array operations using arrays in simple computations array operations reading values from arrays using arrays in simple computations operations reading values from arrays using arrays in simple computations using arrays in simple computations reading values from arrays array operations algebraic formulas using arrays reading values from arrays array operations array operations reading values from arrays computing for timestamp deltas operations reading values from arrays computing for timestamp deltas computing for timestamp deltas reading values from arrays array operations reading values from arrays computing for timestamp deltas array operations timestamp deltas, computing for reading values from arrays array operations Using Array Values in Simple Computations delta = gettimeofday_s() - foo[tid()] This example assumes that the array foo was built using the construct in (from ). This sets a timestamp that will serve as a reference point, to be used in computing for delta. The construct in computes a value for the variable delta by subtracting the associated value of the key tid() from the current gettimeofday_s(). The construct does this by reading the value of tid() from the array. This particular construct is useful for determining the time between two events, such as the start and completion of a read operation. reading values from arrays array operations empty unique keys array operations reading values from arrays empty unique keys operations reading values from arrays empty unique keys empty unique keys reading values from arrays array operations Note If the index_expression cannot find the unique key, it returns a value of 0 (for numerical operations, such as ) or a null/empty string value (for string operations) by default.
Incrementing Associated Values array operations incrementing associated values incrementing associated values array operations operations incrementing associated values Use ++ to increment the associated value of a unique key in an array, as in: array_name[index_expression] ++ Again, you can also use a handler function for your index_expression. For example, if you wanted to tally how many times a specific process performed a read to the virtual file system (using the event vfs.read), you can use the following probe: incrementing associated values array operations tallying virtual file system reads (VFS reads) array operations incrementing associated values tallying virtual file system reads (VFS reads) operations incrementing associated values tallying virtual file system reads (VFS reads) tallying virtual file system reads (VFS reads) incrementing associated values array operations VFS reads, tallying of incrementing associated values array operations vfsreads.stp probe vfs.read { reads[execname()] ++ } In , the first time that the probe returns the process name gnome-terminal (that is, the first time gnome-terminal performs a VFS read), that process name is set as the unique key gnome-terminal with an associated value of 1. The next time that the probe returns the process name gnome-terminal, SystemTap increments the associated value of gnome-terminal by 1. SystemTap performs this operation for all process names as the probe returns them.
Processing Multiple Elements in an Array multiple elements in an array array operations array operations multiple elements in an array operations multiple elements in an array array operations processing multiple elements in an array processing multiple elements in an array array operations operations processing multiple elements in an array Once you've collected enough information in an array, you will need to retrieve and process all elements in that array to make it useful. Consider : the script collects information about how many VFS reads each process performs, but does not specify what to do with it. The obvious means for making useful is to print the key pairs in the array reads, but how? array operations processing multiple elements in an array foreach operations processing multiple elements in an array foreach processing multiple elements in an array foreach array operations foreach processing multiple elements in an array array operations array operations processing multiple elements in an array iterations, processing elements in an array as operations processing multiple elements in an array iterations, processing elements in an array as iterations, processing elements in an array as processing multiple elements in an array array operations The best way to process all key pairs in an array (as an iteration) is to use the foreach statement. Consider the following example: array operations processing multiple elements in an array cumulative virtual file system reads, tallying operations processing multiple elements in an array cumulative virtual file system reads, tallying cumulative virtual file system reads, tallying processing multiple elements in an array array operations processing multiple elements in an array cumulative virtual file system reads, tallying array operations virtual file system reads (cumulative), tallying processing multiple elements in an array array operations cumulative-vfsreads.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { foreach (count in reads) printf("%s : %d \n", count, reads[count]) } In the second probe of , the foreach statement uses the variable count to reference each iteration of a unique key in the array reads. The reads[count] array statement in the same probe retrieves the associated value of each unique key. Given what we know about the first probe in , the script prints VFS-read statistics every 3 seconds, displaying names of processes that performed a VFS-read along with a corresponding VFS-read count. array operations processing multiple elements in an array limiting the output of foreach operations processing multiple elements in an array limiting the output of foreach processing multiple elements in an array limiting the output of foreach array operations limiting the output of foreach processing multiple elements in an array array operations array operations processing multiple elements in an array ordering the output of foreach operations processing multiple elements in an array ordering the output of foreach processing multiple elements in an array ordering the output of foreach array operations ordering the output of foreach processing multiple elements in an array array operations Now, remember that the foreach statement in prints all iterations of process names in the array, and in no particular order. You can instruct the script to process the iterations in a particular order by using + (ascending) or - (descending). In addition, you can also limit the number of iterations the script needs to process with the limit value option. For example, consider the following replacement probe: probe timer.s(3) { foreach (count in reads- limit 10) printf("%s : %d \n", count, reads[count]) } This foreach statement instructs the script to process the elements in the array reads in descending order (of associated value). The limit 10 option instructs the foreach to only process the first ten iterations (that is, print the first 10, starting with the highest value).
Clearing/Deleting Arrays and Array Elements array operations deleting arrays and array elements operations deleting arrays and array elements array operations clearing arrays/array elements operations clearing arrays/array elements clearing arrays/array elements array operations Sometimes, you may need to clear the associated values in array elements, or reset an entire array for re-use in another probe. in allows you to track how the number of VFS reads per process grows over time, but it does not show you the number of VFS reads each process makes per 3-second period. array operations clearing arrays/array elements delete operator operations clearing arrays/array elements delete operator clearing arrays/array elements array operations delete operator delete operator clearing arrays/array elements array operations To do that, you will need to clear the values accumulated by the array. You can accomplish this using the delete operator to delete elements in an array, or an entire array. Consider the following example: array operations clearing arrays/array elements virtual file system reads (non-cumulative), tallying operations clearing arrays/array elements virtual file system reads (non-cumulative), tallying clearing arrays/array elements array operations virtual file system reads (non-cumulative), tallying virtual file system reads (non-cumulative), tallying clearing arrays/array elements array operations noncumulative-vfsreads.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { foreach (count in reads) printf("%s : %d \n", count, reads[count]) delete reads } In , the second probe prints the number of VFS reads each process made within the probed 3-second period only. The delete reads statement clears the reads array within the probe. Note array operations clearing arrays/array elements multiple array operations within the same probe operations clearing arrays/array elements multiple array operations within the same probe clearing arrays/array elements array operations multiple array operations within the same probe multiple array operations within the same probe clearing arrays/array elements array operations You can have multiple array operations within the same probe. Using the examples from and , you can track the number of VFS reads each process makes per 3-second period and tally the cumulative VFS reads of those same processes. Consider the following example: global reads, totalreads probe vfs.read { reads[execname()] ++ totalreads[execname()] ++ } probe timer.s(3) { printf("=======\n") foreach (count in reads-) printf("%s : %d \n", count, reads[count]) delete reads } probe end { printf("TOTALS\n") foreach (total in totalreads-) printf("%s : %d \n", total, totalreads[total]) } In this example, the arrays reads and totalreads track the same information, and are printed out in a similar fashion. The only difference here is that reads is cleared every 3-second period, whereas totalreads keeps growing.
Using Arrays in Conditional Statements array operations conditional statements, using arrays in operations conditional statements, using arrays in conditional statements, using arrays in array operations if/else statements, using arrays in array operations You can also use associative arrays in if statements. This is useful if you want to execute a subroutine once a value in the array matches a certain condition. Consider the following example: vfsreads-print-if-1kb.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { printf("=======\n") foreach (count in reads-) if (reads[count] >= 1024) printf("%s : %dkB \n", count, reads[count]/1024) else printf("%s : %dB \n", count, reads[count]) } Every three seconds, prints out a list of all processes, along with how many times each process performed a VFS read. If the associated value of a process name is equal or greater than 1024, the if statement in the script converts and prints it out in kB. Testing for Membership array operations conditional statements, using arrays in testing for array membership operations conditional statements, using arrays in testing for array membership conditional statements, using arrays in array operations testing for array membership testing for array membership conditional statements, using arrays in array operations membership (in array), testing for conditional statements, using arrays in array operations You can also test whether a specific unique key is a member of an array. Further, membership in an array can be used in if statements, as in: if([index_expression] in array_name) statement To illustrate this, consider the following example: vfsreads-stop-on-stapio2.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { printf("=======\n") foreach (count in reads+) printf("%s : %d \n", count, reads[count]) if(["stapio"] in reads) { printf("stapio read detected, exiting\n") exit() } } The if(["stapio"] in reads) statement instructs the script to print stapio read detected, exiting once the unique key stapio is added to the array reads.
Computing for Statistical Aggregates statistical aggregates array operations aggregates (statistical) array operations array operations computing for statistical aggregates operations computing for statistical aggregates computing for statistical aggregates array operations Statistical aggregates are used to collect statistics on numerical values where it is important to accumulate new data quickly and in large volume (that is, storing only aggregated stream statistics). Statistical aggregates can be used in global variables or as elements in an array. array operations computing for statistical aggregates adding values to statistical aggregates operations computing for statistical aggregates adding values to statistical aggregates computing for statistical aggregates array operations adding values to statistical aggregates adding values to statistical aggregates computing for statistical aggregates array operations To add value to a statistical aggregate, use the operator <<< value. need more examples of supported rvalues, for example, length, count, and what each one does. stat-aggregates.stp global reads probe vfs.read { reads[execname()] <<< $count } array operations computing for statistical aggregates count (operator) operations computing for statistical aggregates count (operator) computing for statistical aggregates array operations count (operator) count operator computing for statistical aggregates array (operator) In , the operator <<< $count stores the amount returned by $count to the associated value of the corresponding execname() in the reads array. Remember, these values are stored; they are not added to the associated values of each unique key, nor are they used to replace the current associated values. In a manner of speaking, think of it as having each unique key (execname()) having multiple associated values, accumulating with each probe handler run. Note In the context of , count returns the amount of data read by the returned execname() to the virtual file system. array operations computing for statistical aggregates extracting data collected by statistical aggregates operations computing for statistical aggregates extracting data collected by statistical aggregates computing for statistical aggregates array operations extracting data collected by statistical aggregates extracting data collected by statistical aggregates computing for statistical aggregates array operations integer extractors computing for statistical aggregates array operations To extract data collected by statistical aggregates, use the syntax format @extractor(variable/array index expression). extractor can be any of the following integer extractors: count array operations computing for statistical aggregates @count (integer extractor) operations computing for statistical aggregates @count (integer extractor) computing for statistical aggregates array operations @count (integer extractor) @count (integer extractor) computing for statistical aggregates array operations Returns the number of all values stored into the variable/array index expression. Given the sample probe in , the expression @count(reads[execname()]) will return how many values are stored in each unique key in array reads. sum array operations computing for statistical aggregates @sum (integer extractor) operations computing for statistical aggregates @sum (integer extractor) computing for statistical aggregates array operations @sum (integer extractor) @sum (integer extractor) computing for statistical aggregates array operations Returns the sum of all values stored into the variable/array index expression. Again, given sample probe in , the expression @sum(reads[execname()]) will return the total of all values stored in each unique key in array reads. min array operations computing for statistical aggregates @min (integer extractor) operations computing for statistical aggregates @min (integer extractor) computing for statistical aggregates array operations @min (integer extractor) @min (integer extractor) computing for statistical aggregates array operations Returns the smallest among all the values stored in the variable/array index expression. max array operations computing for statistical aggregates @max (integer extractor) operations computing for statistical aggregates @max (integer extractor) computing for statistical aggregates array operations @max (integer extractor) @max (integer extractor) computing for statistical aggregates array operations Returns the largest among all the values stored in the variable/array index expression. avg array operations computing for statistical aggregates @avg (integer extractor) operations computing for statistical aggregates @avg (integer extractor) computing for statistical aggregates array operations @avg (integer extractor) @avg (integer extractor) computing for statistical aggregates array operations Returns the average of all values stored in the variable/array index expression. When using statistical aggregates, you can also build array constructs that use multiple index expressions (to a maximum of 5). This is helpful in capturing additional contextual information during a probe. For example: Multiple Array Indexes global reads probe vfs.read { reads[execname(),pid()] <<< 1 } probe timer.s(3) { foreach([var1,var2] in reads) printf("%s (%d) : %d \n", var1, var2, @count(reads[var1,var2])) } In , the first probe tracks how many times each process performs a VFS read. What makes this different from earlier examples is that this array associates a performed read to both a process name and its corresponding process ID. The second probe in demonstrates how to process and print the information collected by the array reads. Note how the foreach statement uses the same number of variables (that is, var1 and var2) contained in the first instance of the array reads from the first probe.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Arrays.xml000066400000000000000000000217731356460210500241450ustar00rootroot00000000000000
Associative Arrays arrays associative arrays associative arrays introduction SystemTap also supports the use of associative arrays. While an ordinary variable represents a single value, associative arrays can represent a collection of values. Simply put, an associative array is a collection of unique keys; each key in the array has a value associated with it. associative arrays introduction key pairs key pairs introduction arrays associative arrays introduction unique keys unique keys introduction arrays associative arrays introduction associated values associated values introduction arrays associative arrays introduction index expression index expression introduction arrays Since associative arrays are normally processed in multiple probes (as we will demonstrate later), they should be declared as global variables in the SystemTap script. The syntax for accessing an element in an associative array is similar to that of awk, and is as follows: associative arrays introduction syntax syntax introduction arrays format introduction arrays array_name[index_expression] Here, the array_name is any arbitrary name the array uses. The index_expression is used to refer to a specific unique key in the array. To illustrate, let us try to build an array named foo that specifies the ages of three people tom, dick, and harry (which are unique keys). To assign them the ages (associated values) of 23, 24, and 25 respectively, we'd use the following array statements: associative arrays introduction example example introduction arrays Basic Array Statements foo["tom"] = 23 foo["dick"] = 24 foo["harry"] = 25 You can specify up to nine index expressions in an array statement, each one delimited by a comma (,). This is useful if you wish to have a key that contains multiple pieces of information. The following line from uses 5 elements for the key: process ID, executable name, user ID, parent process ID, and string "W". It associates the value of devname with that key. device[pid(),execname(),uid(),ppid(),"W"] = devname Important All associate arrays must be declared as global, regardless of whether the associate array is used in one or multiple probes.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Author_Group.xml000066400000000000000000000013071356460210500253110ustar00rootroot00000000000000 Red Hat, Inc. Don Domingo Engineering Services and Operations Content Services ddomingo@redhat.com William Cohen Engineering Services and Operations Performance Tools wcohen@redhat.com systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Book_Info.xml000066400000000000000000000024431356460210500245420ustar00rootroot00000000000000 %BOOK_ENTITIES; ]> SystemTap Beginners Guide Introduction to SystemTap 4.2 SystemTap 4.2 2 This guide provides basic instructions on how to use SystemTap to monitor different subsystems of a Linux system in finer detail. Logo &YEAR; &HOLDER; systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Chapter.xml000066400000000000000000000010641356460210500242610ustar00rootroot00000000000000 Test This is a test paragraph
Section 1 Test Test of a section
Section 2 Test Test of a section
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/000077500000000000000000000000001356460210500250725ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Conventions.xml000066400000000000000000000201341356460210500301210ustar00rootroot00000000000000
Document Conventions This manual uses several conventions to highlight certain words and phrases and draw attention to specific pieces of information. In PDF and paper editions, this manual uses typefaces drawn from the Liberation Fonts set. The Liberation Fonts set is also used in HTML editions if the set is installed on your system. If not, alternative but equivalent typefaces are displayed. Note: Red Hat Enterprise Linux 5 and later include the Liberation Fonts set by default.
Typographic Conventions Four typographic conventions are used to call attention to specific words and phrases. These conventions, and the circumstances they apply to, are as follows. Mono-spaced Bold Used to highlight system input, including shell commands, file names and paths. Also used to highlight keys and key combinations. For example:
To see the contents of the file my_next_bestselling_novel in your current working directory, enter the cat my_next_bestselling_novel command at the shell prompt and press Enter to execute the command.
The above includes a file name, a shell command and a key, all presented in mono-spaced bold and all distinguishable thanks to context. Key combinations can be distinguished from an individual key by the plus sign that connects each part of a key combination. For example:
Press Enter to execute the command. Press CtrlAltF2 to switch to a virtual terminal.
The first example highlights a particular key to press. The second example highlights a key combination: a set of three keys pressed simultaneously. If source code is discussed, class names, methods, functions, variable names and returned values mentioned within a paragraph will be presented as above, in mono-spaced bold. For example:
File-related classes include filesystem for file systems, file for files, and dir for directories. Each class has its own associated set of permissions.
Proportional Bold This denotes words or phrases encountered on a system, including application names; dialog-box text; labeled buttons; check-box and radio-button labels; menu titles and submenu titles. For example:
Choose SystemPreferencesMouse from the main menu bar to launch Mouse Preferences. In the Buttons tab, select the Left-handed mouse check box and click Close to switch the primary mouse button from the left to the right (making the mouse suitable for use in the left hand). To insert a special character into a gedit file, choose ApplicationsAccessoriesCharacter Map from the main menu bar. Next, choose SearchFind… from the Character Map menu bar, type the name of the character in the Search field and click Next. The character you sought will be highlighted in the Character Table. Double-click this highlighted character to place it in the Text to copy field and then click the Copy button. Now switch back to your document and choose EditPaste from the gedit menu bar.
The above text includes application names; system-wide menu names and items; application-specific menu names; and buttons and text found within a GUI interface, all presented in proportional bold and all distinguishable by context. Mono-spaced Bold Italic or Proportional Bold Italic Whether mono-spaced bold or proportional bold, the addition of italics indicates replaceable or variable text. Italics denotes text you do not input literally or displayed text that changes depending on circumstance. For example:
To connect to a remote machine using ssh, type ssh username@domain.name at a shell prompt. If the remote machine is example.com and your username on that machine is john, type ssh john@example.com. The mount -o remount file-system command remounts the named file system. For example, to remount the /home file system, the command is mount -o remount /home. To see the version of a currently installed package, use the rpm -q package command. It will return a result as follows: package-version-release.
Note the words in bold italics above: username, domain.name, file-system, package, version and release. Each word is a placeholder, either for text you enter when issuing a command or for text displayed by the system. Aside from standard usage for presenting the title of a work, italics denotes the first use of a new and important term. For example:
Publican is a DocBook publishing system.
Pull-quote Conventions Terminal output and source code listings are set off visually from the surrounding text. Output sent to a terminal is set in mono-spaced roman and presented thus: books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs Source-code listings are also set in mono-spaced roman but add syntax highlighting as follows:
Notes and Warnings Finally, we use three visual styles to draw attention to information that might otherwise be overlooked. Notes are tips, shortcuts or alternative approaches to the task at hand. Ignoring a note should have no negative consequences, but you might miss out on a trick that makes your life easier. Important boxes detail things that are easily missed: configuration changes that only apply to the current session, or services that need restarting before an update will apply. Ignoring a box labeled “Important” will not cause data loss but may cause irritation and frustration. Warnings should not be ignored. Ignoring warnings will most likely cause data loss.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Feedback.xml000066400000000000000000000006121356460210500272770ustar00rootroot00000000000000
We Need Feedback! feedback contact information for this manual You should over ride this by creating your own local Feedback.xml file.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Legal_Notice.xml000066400000000000000000000010221356460210500301340ustar00rootroot00000000000000 Copyright &YEAR; &HOLDER; This material may only be distributed subject to the terms and conditions set forth in the GNU Free Documentation License (GFDL), V1.2 or later (the latest version is presently available at http://www.gnu.org/licenses/fdl.txt). systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Program_Listing.xml000066400000000000000000000012301356460210500307100ustar00rootroot00000000000000 package org.jboss.book.jca.ex1; import javax.naming.InitialContext; public class ExClient { public static void main(String args[]) throws Exception { InitialContext iniCtx = new InitialContext(); Object ref = iniCtx.lookup("EchoBean"); EchoHome home = (EchoHome) ref; Echo echo = home.create(); System.out.println("Created Echo"); System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); } } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Revision_History.xml000066400000000000000000000011121356460210500311260ustar00rootroot00000000000000 Revision History 3.0-0 Mon Mar 12 2012 Jeff Fearn jfearn@redhat.com Publican 3.0 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/000077500000000000000000000000001356460210500256625ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/brand.css000066400000000000000000000004261356460210500274640ustar00rootroot00000000000000/*headings*/ h1, h2, h3, h4, h5, h6, div.producttitle, div.subtitle, div.author div.author, div.translator div.translator, div.othercredit div.othercredit, div.editor div.editor, div.contrib div.contrib, .title, .titlepage .edition, .titlepage .releaseinfo { color: #336699; } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/common.css000066400000000000000000000611111356460210500276640ustar00rootroot00000000000000* { widows: 4 !important; orphans: 4 !important; } body, h1, h2, h3, h4, h5, h6, pre, li, div { line-height: 1.29em; } body { background-color: white; margin:0 auto; font-family: "liberation sans", "Myriad ", "Bitstream Vera Sans", "Lucida Grande", "Luxi Sans", "Trebuchet MS", helvetica, verdana, arial, sans-serif; font-size: 14px; max-width: 770px; color: black; } body.toc_embeded { /*for web hosting system only*/ margin-left: 300px; } object.toc, iframe.toc { /*for web hosting system only*/ border-style: none; position: fixed; width: 290px; height: 99.99%; top: 0; left: 0; z-index: 100; border-style: none; border-right:1px solid #999; } /* Hide web menu */ body.notoc { margin-left: 3em; } iframe.notoc { border-style:none; border: none; padding: 0px; position:fixed; width: 21px; height: 29px; top: 0px; left:0; overflow: hidden; margin: 0px; margin-left: -3px; } /* End hide web menu */ /* desktop styles */ body.desktop { margin-left: 26em; } body.desktop .book > .toc { display:block; width:24em; height:99.99%; position:fixed; overflow:auto; top:0px; left:0px; /* padding-left:1em; */ background-color:#EEEEEE; font-size: 12px; } body.pdf { max-width: 100%; } .toc { line-height:1.35em; } .toc .glossary, .toc .chapter, .toc .appendix { margin-top:1em; } .toc .part { margin-top:1em; display:block; } span.glossary, span.appendix { display:block; margin-top:0.5em; } div { padding-top:0px; } div.section { page-break-inside: avoid; } p, div.para { padding-top: 0px; margin-top: 1em; padding-bottom: 0px; margin-bottom: 1em; } div.formalpara { padding-top: 0px; margin-top: 1em; padding-bottom: 0px; margin-bottom: 1em; } .varlistentry div.para { page-break-before: avoid; } /*Links*/ a { outline: none; } a:link { text-decoration: none; border-bottom: 1px dotted ; color:#3366cc; } body.pdf a:link { word-wrap: break-word; } a:visited { text-decoration:none; border-bottom: 1px dotted ; color:#003366; } div.longdesc-link { float:right; color:#999; } .toc a, .qandaset a { font-weight:normal; border:none; } .toc a:hover, .qandaset a:hover { border-bottom: 1px dotted; } /*headings*/ h1, h2, h3, h4, h5, h6 { color: #336699; margin-top: 0px; margin-bottom: 0px; background-color: transparent; margin-bottom: 0px; margin-top: 20px; page-break-inside: avoid; page-break-after: avoid; word-wrap: break-word; } h1 { font-size: 22px; } .titlepage h1.title { text-align:left; } .book > .titlepage h1.title { text-align: center; } .article > .titlepage h1.title, .article > .titlepage h2.title { text-align: center; } .set .titlepage > div > div > h1.title { text-align: center; } .part > .titlepage h1.title { text-align: center; font-size: 24px; } div.producttitle { margin-top: 0px; margin-bottom: 20px; font-size: 48px; font-weight: bold; /* background: #003d6e url(../images/h1-bg.png) top left repeat-x; */ color: #336699; text-align: center; padding-top: 12px; } .titlepage .corpauthor { margin-top: 1em; text-align: center; } .section h1.title { font-size: 18px; padding: 0px; color: #336699; text-align: left; background: white; } h2 { font-size: 20px; margin-top: 30px; } .book div.subtitle, .book h2.subtitle, .book h3.subtitle { margin-top: 1em; margin-bottom: 1em; font-size: 18px; text-align: center; } div.subtitle { color: #336699; font-weight: bold; } h1.legalnotice { font-size: 24px; } .preface > div > div > div > h2.title, .preface > div > div > div > h1.title { margin-top: 1em; font-size: 24px; } .appendix h2 { font-size: 24px; } h3 { font-size: 14px; padding-top:0px; padding-bottom: 0px; margin-bottom: 0px; } h4 { font-size: 14px; padding-top:0px; padding-bottom:0px; } h5 { font-size: 14px; } h6 { font-size: 14px; margin-bottom: 0px; } .abstract h6 { margin-top:1em; margin-bottom:.5em; font-size: 24px; } .index > div > div > div > h2.title { font-size: 24px; } .chapter > div > div > div > h2.title { font-size: 24px; } .section > div > div > div > h2.title { font-size: 21px; page-break-inside: avoid; page-break-before: avoid; page-break-after: avoid; } .section > div > div > div > h3.title { font-size: 17px; } /*element rules*/ hr { border-collapse: collapse; border-style:none; border-top: 1px dotted #ccc; width:100%; } /* web site rules */ ul.languages, .languages li { display:inline; padding:0px; } .languages li a { padding:0px .5em; text-decoration: none; } .languages li p, .languages li div.para { display:inline; } .languages li a:link, .languages li a:visited { color:#444; } .languages li a:hover, .languages li a:focus, .languages li a:active { color:black; } ul.languages { display:block; background-color:#eee; padding:.5em; } /*supporting stylesheets*/ /*unique to the webpage only*/ .books { position:relative; } .versions li { width:100%; clear:both; display:block; } a.version { font-size: 20px; text-decoration:none; width:100%; display:block; padding:1em 0px .2em 0px; clear:both; } a.version:before { content:"Version"; font-size: smaller; } a.version:visited, a.version:link { color:#666; } a.version:focus, a.version:hover { color:black; } .books { display:block; position:relative; clear:both; width:100%; } .books li { display:block; width:200px; float:left; position:relative; clear: none ; } .books .html { width:170px; display:block; } .books .pdf { position:absolute; left:170px; top:0px; font-size: smaller; } .books .pdf:link, .books .pdf:visited { color:#555; } .books .pdf:hover, .books .pdf:focus { color:#000; } .books li a { text-decoration:none; } .books li a:hover { color:black; } /*products*/ .products li { display: block; width:300px; float:left; } .products li a { width:300px; padding:.5em 0px; } .products ul { clear:both; } /*revision history*/ .revhistory { display:block; } .revhistory table { background-color:transparent; border-color:#fff; padding:0px; margin: 0; border-collapse:collapse; border-style:none; } .revhistory td { text-align :left; padding:0px; border: none; border-top: 1px solid #fff; font-weight: bold; } .revhistory .simplelist td { font-weight: normal; } .revhistory .simplelist { margin-bottom: 1.5em; margin-left: 1em; } .revhistory table th { display: none; } /*credits*/ .authorgroup div { clear:both; text-align: center; } div.author div.author, div.translator div.translator, div.othercredit div.othercredit, div.editor div.editor, div.contrib div.contrib { margin: 0px; padding: 0px; margin-top: 12px; font-size: 14px; font-weight: bold; color: #336699; } div.editedby { margin-top: 15px; margin-bottom: -0.8em; } div.authorgroup .author, div.authorgroup.editor, div.authorgroup.translator, div.authorgroup.othercredit, div.authorgroup.contrib { display: block; font-size: 14px; page-break-inside: avoid; } .revhistory .author { display: inline; } .othercredit h3 { padding-top: 1em; } .othercredit { margin:0px; padding:0px; } .releaseinfo { clear: both; } .copyright { margin-top: 1em; } /* qanda sets */ .answer { margin-bottom:1em; border-bottom:1px dotted #ccc; } .qandaset .toc { border-bottom:1px dotted #ccc; } .question { font-weight:bold; } .answer .data, .question .data { padding-left: 2.6em; } .answer .label, .question .label { float:left; font-weight:bold; } /* inline syntax highlighting */ .perl_Alert { color: #0000ff; } .perl_BaseN { color: #007f00; } .perl_BString { color: #5C3566; } .perl_Char { color: #ff00ff; } .perl_Comment { color: #888888; } .perl_DataType { color: #0000ff; } .perl_DecVal { color: #00007f; } .perl_Error { color: #ff0000; } .perl_Float { color: #00007f; } .perl_Function { color: #007f00; } .perl_IString { color: #5C3566; } .perl_Keyword { color: #002F5D; } .perl_Operator { color: #ffa500; } .perl_Others { color: #b03060; } .perl_RegionMarker { color: #96b9ff; } .perl_Reserved { color: #9b30ff; } .perl_String { color: #5C3566; } .perl_Variable { color: #0000ff; } .perl_Warning { color: #0000ff; } /*Lists*/ ul { list-style-image: url("../images/dot.png"); list-style-type: circle; padding-left: 1.6em; } ul ul { list-style-image: url("../images/dot2.png"); list-style-type: circle; } ol.1 { list-style-type: decimal; } ol.a, ol ol { list-style-type: lower-alpha; } ol.i { list-style-type: lower-roman; } ol.A { list-style-type: upper-alpha; } ol.I { list-style-type: upper-roman; } dt { font-weight:bold; margin-bottom:0px; padding-bottom:0px; } dd { margin:0px; margin-left:2em; padding-top:0px; } li { padding-top: 0px; margin-top: 0px; padding-bottom: 0px; /* margin-bottom: 16px; */ } /*images*/ img { display:block; margin: 2em 0; max-width: 100%; } .inlinemediaobject, .inlinemediaobject img, .inlinemediaobject object { display:inline; margin:0px; overflow: hidden; } .figure { margin-top: 1em; width: 100%; } .figure img, .mediaobject img { display:block; margin: 0em; page-break-inside: avoid; } .figure .title { margin-bottom:2em; padding:0px; } /*document modes*/ .confidential { background-color:#900; color:White; padding:.5em .5em; text-transform:uppercase; text-align:center; } .longdesc-link { display:none; } .longdesc { display:none; } .prompt { padding:0px .3em; } /*user interface styles*/ .screen .replaceable { } .guibutton, .guilabel { font-family: "liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight: bold; } .example { background-color: #ffffff; border-left: 3px solid #aaaaaa; padding-top: 1px; padding-bottom: 0.1em; padding-left: 1em; } .equation { border-left: 3px solid #aaaaaa; background-color: #ffffff; padding-top: 1px; padding-bottom: 0.1em; padding-left: 1em; } .equation-contents { margin-left: 4em; } div.title { margin-bottom: 1em; font-weight: 14px; font-weight: bold; color: #336699; page-break-inside: avoid; page-break-after: avoid; word-wrap: break-word; } .example-contents { background-color: #ffffff; } .example-contents .para { /* padding: 10px;*/ } /*terminal/console text*/ .computeroutput, .option { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight:bold; } .replaceable { font-style: italic; } .command, .filename, .keycap, .classname, .literal { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight:bold; } /* no bold in toc */ .toc * { font-weight: inherit; } .toc H1 { font-weight: bold; } div.programlisting { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } pre { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; display:block; background-color: #f5f5f5; color: #000000; /* border: 1px solid #aaaaaa; */ margin-bottom: 1em; padding:.5em 1em; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ font-size: 0.9em; border-style:none; box-shadow: 0 2px 5px #AAAAAA inset; -moz-box-shadow: 0 2px 5px #AAAAAA inset; -webkit-box-shadow: 0 2px 5px #AAAAAA inset; -o-box-shadow: 0 2px 5px #AAAAAA inset; } body.pdf pre { border: 1px solid #AAAAAA; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; -o-box-shadow: none; } pre .replaceable, pre .keycap { } code { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; white-space: pre-wrap; word-wrap: break-word; font-weight:bold; } .parameter code { display: inline; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } code.email { font-weight: normal; font-family: "liberation sans", "Myriad ", "Bitstream Vera Sans", "Lucida Grande", "Luxi Sans", "Trebuchet MS", helvetica, verdana, arial, sans-serif; } /*Notifications*/ div.warning:before { content:url(../images/warning.png); padding-left: 5px; } div.note:before { content:url(../images/note.png); padding-left: 5px; } div.important:before { content:url(../images/important.png); padding-left: 5px; } div.warning, div.note, div.important { color: black; margin: 0px; padding: 0px; background: none; background-color: white; margin-bottom: 1em; border-bottom: 1px solid #aaaaaa; page-break-inside: avoid; } div.admonition_header p { margin: 0px; padding: 0px; color: #eeeeec; padding-top: 0px; padding-bottom: 0px; height: 1.4em; line-height: 1.4em; font-size: 17px; display:inline; } div.admonition_header { background-origin:content-box; clear: both; margin: 0px; padding: 0px; margin-top: -40px; padding-left: 58px; line-height: 1.0px; font-size: 1.0px; } div.warning div.admonition_header { background: url(../images/red.png) top left repeat-x; background-color: #590000; background: -webkit-linear-gradient(#a40000,#590000); background: linear-gradient(#a40000,#590000); } div.note div.admonition_header { background: url(../images/green.png) top right repeat-x; background-color: #597800; background: -webkit-linear-gradient(#769f00,#597800); background: linear-gradient(#769f00,#597800); } div.important div.admonition_header { background: url(../images/yellow.png) top right repeat-x; background-color: #a6710f; background: -webkit-linear-gradient(#d08e13,#a6710f); background: linear-gradient(#d08e13,#a6710f); } div.warning p:first-child, div.warning div.para:first-child, div.note p:first-child, div.note div.para:first-child, div.important p:first-child, div.important div.para:first-child { padding: 0px; margin: 0px; } div.admonition { border: none; border-left: 1px solid #aaaaaa; border-right: 1px solid #aaaaaa; padding:0px; margin:0px; padding-top: 1.5em; padding-bottom: 1em; padding-left: 2em; padding-right: 1em; background-color: #eeeeec; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; } /*Page Title*/ #title { display:block; height:45px; padding-bottom:1em; margin:0px; } #title a.left{ display:inline; border:none; } #title a.left img{ border:none; float:left; margin:0px; margin-top:.7em; } #title a.right { padding-bottom:1em; } #title a.right img { border:none; float:right; margin:0px; margin-top:.7em; } /*Table*/ div.table { /* page-break-inside: avoid; */ } table { border: 1px solid #444; width:100%; border-collapse:collapse; table-layout: fixed; word-wrap: break-word; } table.blockquote, table.simplelist, .calloutlist table { border-style: none; } table th { text-align:left; background-color:#6699cc; padding:.3em .5em; color:white; } table td { padding:.15em .5em; } table tr.even td { background-color:#f5f5f5; } tr:nth-child(even) { background-color: #eeeeee; } table th p:first-child, table td p:first-child, table li p:first-child, table th div.para:first-child, table td div.para:first-child, table li div.para:first-child { margin-top:0px; padding-top:0px; display:inline; } th, td { border-style:none; vertical-align: top; /* border: 1px solid #000; */ } .blockquote td, .simplelist th, .simplelist td { border: none; } table table td { border-bottom:1px dotted #aaa; background-color:white; padding:.6em 0px; } table table { border:1px solid white; } td.remarkval { color:#444; } td.fieldval { font-weight:bold; } .lbname, .lbtype, .lbdescr, .lbdriver, .lbhost { color:white; font-weight:bold; background-color:#999; width:120px; } td.remarkval { width:230px; } td.tname { font-weight:bold; } th.dbfield { width:120px; } th.dbtype { width:70px; } th.dbdefault { width:70px; } th.dbnul { width:70px; } th.dbkey { width:70px; } span.book { margin-top:4em; display:block; font-size: 11pt; } span.book a{ font-weight:bold; } span.chapter { display:block; } table.simplelist td, .calloutlist table td { border-style: none; } table.lt-4-cols.lt-7-rows td { border: none; } /*to simplify layout*/ table.lt-4-cols.gt-14-rows tr:nth-child(odd) { background-color: #fafafa; } /* to keep simple but stripe rows */ .gt-8-cols td { border-left: 1px solid #ccc; } .gt-8-cols td:first-child { border-left: 0; } /* to apply vertical lines to differentiate columns*/ /*Breadcrumbs*/ #breadcrumbs ul li.first:before { content:" "; } #breadcrumbs { color:#900; padding:3px; margin-bottom:25px; } #breadcrumbs ul { margin-left:0; padding-left:0; display:inline; border:none; } #breadcrumbs ul li { margin-left:0; padding-left:2px; border:none; list-style:none; display:inline; } #breadcrumbs ul li:before { content:"\0020 \0020 \0020 \00BB \0020"; color:#333; } dl { margin-top: 0px; margin-left: 28px; } .toc dl { margin-left: 10px; } /*index*/ .glossary h3, .index h3 { font-size: 20px; color:#aaa; margin:0px; } .indexdiv { margin-bottom:1em; } .glossary dt, .index dt { color:#444; padding-top:.5em; } .glossary dl dl dt, .index dl dl dt { color:#777; font-weight:normal; padding-top:0px; } .index dl dl dt:before { content:"- "; color:#ccc; } /*changes*/ .footnote { font-size: 10px; margin: 0px; color: #222; } .footnotes { margin-bottom: 60px; } table .footnote { } sup { margin:0px; padding:0px; font-size: 10px; padding-left:0px; } .footnote { position:relative; } .footnote sup { color: black; left: .4em; } .footnote a:link, .footnote a:visited { text-decoration:none; border: none; } .footnote .para sup { /* position:absolute; */ vertical-align:text-bottom; } a.footnote { padding-right: 0.5em; text-decoration:none; border: none; } .footnote sup a:link, .footnote sup a:visited { color:#92917d; text-decoration:none; } .footnote:hover sup a { text-decoration:none; } .footnote p,.footnote div.para { padding-left:1em; } .footnote a:link, .footnote a:visited before{ color:#00537c; } .footnote a:hover { } /**/ .pdf-break { page-break-before: always; } div.legalnotice { page-break-before: always; } div.abstract { page-break-before: always; /* page-break-after: always;*/ } div.chapter { page-break-before: always; } div.titlepage, div.titlepage > div, div.titlepage > div > div { page-break-inside: avoid; page-break-after: avoid; } div.preface, div.part { page-break-before: always; } div.appendix { page-break-before: always; } div.section { page-break-inside: auto; page-break-before: auto; page-break-after: auto; } dt.varlistentry { page-break-inside: avoid; page-break-after: avoid; } dd { page-break-before: avoid; } div.note .replaceable, div.important .replaceable, div.warning .replaceable, div.note .keycap, div.important .keycap, div.warning .keycap { } ul li p:last-child, ul li para:last-child { margin-bottom:0px; padding-bottom:0px; } /*document navigation*/ .docnav a, .docnav strong { border:none; text-decoration:none; font-weight:normal; } .docnav { list-style:none; margin:0px; padding:0px; position:relative; width:100%; padding-bottom:2em; padding-top:1em; height:2.5em; line-height:2.5em; /* border-top:1px dotted #ccc; background-color: rgba(240, 240, 240, 0.9); -webkitbox-shadow: 0px .15em .5em rgba(0,0,0,0.2); -moz-box-shadow: 0px .15em .5em rgba(0,0,0,0.2); box-shadow: 0px .15em .5em rgba(0,0,0,0.2); */ } .docnav li { list-style:none; margin:0px; padding:0px; display:inline; font-size: 14px; } .docnav li:before { content:" "; } .docnav li.previous, .docnav li.next { position:absolute; top:1.5em; } .docnav li.up, .docnav li.home { margin:0px 1.5em; } .docnav.top li.home { color: #336699; font-size: 22pt; font-weight: bold; } .docnav li.previous { left:0px; text-align:left; } .docnav li.next { right:0px; text-align:right; } .docnav li.previous strong, .docnav li.next strong { height: 17px; display: block; } .docnav { margin:0 auto; text-align:center; } .docnav li.next a strong { background: url(../images/stock-go-forward.png) right 120% no-repeat; padding-top:3px; padding-bottom:4px; padding-right:28px; } .docnav li.previous a strong { background: url(../images/stock-go-back.png) left 120% no-repeat; padding-top:3px; padding-bottom:4px; padding-left:28px; padding-right:0.5em; } .docnav li.home a strong { background: url(../images/stock-home.png) top left no-repeat; padding:5px; padding-left:28px; } .docnav li.up a strong { background: url(../images/stock-go-up.png) top left no-repeat; padding:5px; padding-left:28px; } .docnav a:link, .docnav a:visited { color:#666; } .docnav a:hover, .docnav a:focus, .docnav a:active { color:black; } .docnav a { max-width: 10px; overflow:hidden; } .docnav a:link strong { text-decoration:none; } .docnav { margin:0 auto; text-align:center; } ul.docnav { margin-bottom: 1em; } /* Reports */ .reports ul { list-style:none; margin:0px; padding:0px; } .reports li{ margin:0px; padding:0px; } .reports li.odd { background-color: #eeeeee; margin:0px; padding:0px; } .reports dl { display:inline; margin:0px; padding:0px; float:right; margin-right: 17em; margin-top:-1.3em; } .reports dt { display:inline; margin:0px; padding:0px; } .reports dd { display:inline; margin:0px; padding:0px; padding-right:.5em; } .reports h2, .reports h3{ display:inline; padding-right:.5em; font-size: 14px; font-weight:normal; } .reports div.progress { display:inline; float:right; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; margin:0px; margin-top:-1.3em; padding:0px; border:none; } /*uniform*/ body.results, body.reports { max-width:57em ; padding:0px; } /*Progress Bar*/ div.progress { display:block; float:left; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; height:1em; } div.progress span { height:1em; float:left; } div.progress span.translated { background:#6c3 url(../images/shine.png) top left repeat-x; } div.progress span.fuzzy { background:#ff9f00 url(../images/shine.png) top left repeat-x; } /*Results*/ .results ul { list-style:none; margin:0px; padding:0px; } .results li{ margin:0px; padding:0px; } .results li.odd { background-color: #eeeeee; margin:0px; padding:0px; } .results dl { display:inline; margin:0px; padding:0px; float:right; margin-right: 17em; margin-top:-1.3em; } .results dt { display:inline; margin:0px; padding:0px; } .results dd { display:inline; margin:0px; padding:0px; padding-right:.5em; } .results h2, .results h3 { display:inline; padding-right:.5em; font-size: 14px; font-weight:normal; } .results div.progress { display:inline; float:right; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; margin:0px; margin-top:-1.3em; padding:0px; border:none; } /* Dirty EVIL Mozilla hack for round corners */ pre { -moz-border-radius:11px; -webkit-border-radius:11px; border-radius: 11px; /* page-break-inside: avoid; */ } .example { -moz-border-radius:0px; -webkit-border-radius:0px; border-radius: 0px; page-break-inside: avoid; } /* move these invisible fields out of the flow */ .example > a:first-child, .table > a:first-child { float: left; } .package, .citetitle { font-style: italic; } .titlepage .edition, .titlepage .releaseinfo { color: #336699; background-color: transparent; margin-top: 1em; margin-bottom: 1em; font-size: 20px; font-weight: bold; text-align: center; } span.remark { background-color: #ff00ff; } .draft { background-image: url(../images/watermark-draft.png); background-repeat: repeat-y; background-position: center; } .foreignphrase { font-style: inherit; } dt { clear:both; page-break-inside: avoid; page-break-after: avoid; } dt img { border-style: none; max-width: 112px; } dt object { max-width: 112px; } dt .inlinemediaobject, dt object { display: inline; float: left; margin-bottom: 1em; padding-right: 1em; width: 112px; } dl:after { display: block; clear: both; content: ""; } .toc dd { padding-bottom: 0px; margin-bottom: 1em; padding-left: 1.3em; margin-left: 0px; } div.toc > dl > dt { padding-bottom: 0px; margin-bottom: 0px; margin-top: 1em; } .strikethrough { text-decoration: line-through; } .underline { text-decoration: underline; } .calloutlist img, .callout { padding: 0px; margin: 0px; width: 12pt; display: inline; vertical-align: middle; } li.step > a:first-child { display: block; } .stepalternatives { list-style-image: none; list-style-type: upper-alpha; } .task { /* page-break-inside: avoid; */ } .added { background-color: #99ff99; } .changed { background-color: #ffff77; } .deleted { background-color: #ff4455; text-decoration: line-through; } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/default.css000066400000000000000000000001231356460210500300140ustar00rootroot00000000000000@import url("common.css"); @import url("overrides.css"); @import url("lang.css"); systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/epub.css000066400000000000000000000021101356460210500273210ustar00rootroot00000000000000/*headings*/ h1, h2, h3, h4, h5, h6, div.producttitle, div.subtitle, div.author div.author, div.translator div.translator, div.othercredit div.othercredit, div.editor div.editor, div.contrib div.contrib, .title, .titlepage .edition { } div.para { margin-top: 1em; } /* inline syntax highlighting */ .perl_Alert { color: #0000ff; } .perl_BaseN { color: #007f00; } .perl_BString { color: #5C3566; } .perl_Char { color: #ff00ff; } .perl_Comment { color: #888888; } .perl_DataType { color: #0000ff; } .perl_DecVal { color: #00007f; } .perl_Error { color: #ff0000; } .perl_Float { color: #00007f; } .perl_Function { color: #007f00; } .perl_IString { color: #5C3566; } .perl_Keyword { color: #002F5D; } .perl_Operator { color: #ffa500; } .perl_Others { color: #b03060; } .perl_RegionMarker { color: #96b9ff; } .perl_Reserved { color: #9b30ff; } .perl_String { color: #5C3566; } .perl_Variable { color: #0000ff; } .perl_Warning { color: #0000ff; } b, strong { font-weight: bolder; } code.command { font-family: monospace; font-weight: bolder; } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/print.css000066400000000000000000000003001356460210500275210ustar00rootroot00000000000000@import url("common.css"); @import url("overrides.css"); @import url("lang.css"); #tocframe { display: none; } body.toc_embeded { margin-left: 30px; } .producttitle { color: #336699; } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/000077500000000000000000000000001356460210500263375ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/1.png000066400000000000000000000013211356460210500272020ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<NIDATX͗=haS U3j\䒎-p A2v| "n.N.mn Jq.dXEPg^LK;}<{{3#LP ?7dzEIH (} &i$%eJ)"~ `A3o _d\ۙF{LKmԶW ,7o/ "!"!^&\̵91qRO+KL{Նh3vn'O=eJ)?/YS\8˔R)>`棗$ld_q 8iN٢ >m^dz$f#Ӻ~U-,j`)O.ޝ/Ԥ I5@}Xܸvģe|?V y'w9ãc$PXj 4~<@(R 4vX]LPX]BV3 f@au cT=|]f*+LMgz⹭# W7׵ȶ޲s;2P^miSHȴpl$dS _ ?B1UhfTb&IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/1.svg000066400000000000000000000024721356460210500272250ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/10.png000066400000000000000000000017741356460210500272760ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<yIDATX͗oU?ve+ ]RvK4/֠M!`"`[JD @i>!lڊ$,ՈhXIj1XP)}Ι{=Wh)%dI^&GZ%;: M4ZL#(Z(֧( ;xЫH@A" gԾ{`V,P<ʉhLρAZH%%e ,c_^ʖE + Yrzӷ7ܳ܆k  0fP0xk{ W}ʵ_us~+o _d)u29"j#u!>8m{@\kum9^ӛM..c˃au$^$XMۖܗ%v9;w4Qp/q(Q8[Sཏ/{ x才冤}#E6v΍LbȣUOD2ĜeoٸYp,w\Ԅr!_L[cR2 lN]ELR 4vv~Z T\ UZb6y--| =jXnλٸ#d lLJ^x R}q۸8G@"ȅ&ػs;O&SE6.KFM㜉^g!ܐ̧8#All6̟sbUs[c~Gu1Up 8oJH m+@ZH՜zV+'B.O$wܖQI!Jv5[Mv/ҏf'JIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/10.svg000066400000000000000000000056661356460210500273150ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/11.png000066400000000000000000000014571356460210500272750ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗OhAƿl" =hI4-ḎIēA^'ZRRP1TB.J(*!l:eLv7ɶi>7;o9)W:(ĊGh{xGEpReipYfs3KW1y󜓻Vn<Ȁn}J p2i;jLv-^8K8O  ^WP]Ln6_vBٴ (fkUbv9tېJ.`X/jws ^ 6Ҕv:v:9 ȫQVCPN0.O?tqWB>φaJLpɎ.FaS@0>z\x|'D)kmoSX ' )V148v:A6, amӃp;x>{ok.72r/Qc5\+ms/W./Wp+|/FW6C` 3o?͗+I@Vߏc@\U7I =3 l̀R (cT85M:8`r9},%:4*)3]e1'? ŌSN&Md*Qj6X.o?&Z׬qN4IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/11.svg000066400000000000000000000040521356460210500273020ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/12.png000066400000000000000000000017721356460210500272760ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<wIDATX͗[hTWe1 Z`,FHC6K;XHKQ B@P_l}(ޠւ/4i^%FSm'hLdwf<9\OZ^쵅֚LBf8TXa,E LzТZtہTcT`iB@qq;ntrBJ66IOZLy*mJ[ eZɯq!"h_Ӝ`ɟcDHU&!dcS6Ŀ܎o 'vl  -d Q'E@$ؤ,('߽yЏr^ŇwJywםכ[ Q6ue^c BՍ%y0ڰAnGٹ6JkjaϪV#'l:.^p.{x,sns/d>zW-fKy̛GV'@%(Yj^8++?~5ZÎ9zO5rat˜}݉?7ߺy'Qlo6n systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/13.png000066400000000000000000000020451356460210500272710ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]hUMkjڄeJ6cӚZD,'XTuC/Ap M]b8݅0DGpsmZX%vic%=NjlIW}?99J)J 쀽cgo=B"&Jd?J:7g !Q`{qǔ{U ?tV'Oy_I4tߥvEd`OW_?VIl",lKC~fo^1@I6n?+&h;%?w:o(,dا?:>j9o|nN!Ȏ >nN}LLcq## zsWGZ3f86x)7D^ݹQ]$9Trǣ{8вW2Kq7Eɻ/睗X@8c3p=<õf AB3x*||x7>uO?}Bb|z]q~ Wo7+P"d*?B@ZkE&!{чosuazw(lke 8|Pxw.҉n`x|#Y6q+eyn 0x=td2^ F,OüK2o A\,Nd>|Y׉[{AKC; RdҾ}8 6 ɶliJ8'4D8W?\=L(l=Q^!IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/13.svg000066400000000000000000000075731356460210500273170ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/14.png000066400000000000000000000016361356460210500272770ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]HSa4t4[VaMLjHfQ:&Ⱦn uj7B7%u%&6ufb"ҌX#Jp|8_myPJJ1)u*lir@h58 B[Pù@DoN+0;:V%q来L:%`j.`X(X}uemczl<,/a摸$hUpUrSCw6ğ\,/f2dXO '[cvtڣ}p Z :ش.FFUNIi_bU.Z+N>|笥}(N+ VKun4Vu systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/15.png000066400000000000000000000017531356460210500273000ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<hIDATXW]HSQ5o͜E-"aΨ("{J=(67 ,"^Ĵ)[(۬M==zw{VL?osνCcH%hJh 64@"-aFFi Fby`펗ij+aukgxx 0-Nhv1nH@ё%Lwd%%Pָ HO̙4<*+&؅hĠcH Yw"2 X  jT)?~OF1F+OG{@:j*:-NVcWZӈ<~n1.P{}l@^sM sn\4׎Ydq i18X'iPf0 ܸ~9;` Œ|zPۆ'PqK2` h{\.Vq'&}22:!4p//CyIZzZM2!>tAnoڐ-ng8wƛ5>~Em4k9Kô4؞0sҀ@n| nϏ;p pVZ3n7!#d142&AIPh P--+9/isB\4}Э /#J@%)& :yK;G8 ynHe=Q}YB+7Ů, ܞ ybET-o rMWUm,Ȼ$ t7U *Cq?b8^L^_m%T,ſɄ+V=e)D#eWDoǿxIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/15.svg000066400000000000000000000060101356460210500273020ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/16.png000066400000000000000000000020461356460210500272750ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗QlSe]Wtc-ˈAIjb0LLH cWI4M|&>hB$FC(&&eUq2cmRχ^{/\&;'JQG>ơΞ Bєf RLhHqbPG$ט"-x@cqGo}lY}kG0R<#9i-5=rD*܁$PV;J_X2o* 鱳u#,$mm%xzQoŹvs6뿔btdYPtf4թ,5>bsE.wf8őނPgOsӽ4^7}{iL•(ݶ3oԹc #EBP)˛UV$o6 Ֆ8!@E)fZ2N|dvg'xM\ vja!bC} ݻ[p;LJĬN.cZ0|{Z돆@5Omc۾/'nie_ǮT{ݜj H?ƧNLJqؗL/N u#[#LN̨)ŕrCF,e.̉pJ>:Dl>b򺌖b66owedB] T(O긖>%;uU=v,"Ƅ9, hmvém' systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/17.png000066400000000000000000000016071356460210500273000ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_HQ,? ,9ȬnbB _w]Aw]S҄.""׊ y2Tİ!ftњ߾o.=}s!$P7B6[Ҏ FiՅM5XcXIȋ1@suW\UGs )cG̕6PxT cS Eu59c6 $)~#0VQL+?s=ɦ_1T́mCX3Z=>+3Uշgnw軔tՁQ3 yKT /^S2Z[mܒ;F{YS^P f@H;R1NŁ]ۏ_a2++޵eѕv M*%z4Ng=q%??}a+g&rhbϤ8H̀Ety>@e?LڝÑI-&48<?T`vo&BZ[zܗ…l>xuh Lkq6IaEUyγ5j@ H2Q^|/-F'kV (+rٟ @{d68񯳸ǿMh ͈ۨp:F-ۆ.22&צ[ ڰkj\ DqwI~HiJPzɄ7Z?s[E&z$iHP&tIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/17.svg000066400000000000000000000031731356460210500273130ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/18.png000066400000000000000000000021071356460210500272750ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]lUX:Ѝm!Hס12Fp\d1`@p!^xcBF݅CBhF نANqӡmZ{X׾RW9y9sRdJ&ƳFZ4YP.EQ֋Gc)by uB@yy{^`YNJ5Љb4~F Xu5nÛ&O΄ ՟? h~ -|QBj NJf?˿hO0:93;O^G&.G)VaN(ʷ.+(n@ u} XjX\5[J|3|=4_Q(- 4:Nq/UPy͍IYt\2014f)qƞ-a)zE TmtS98h9@i^ Y W@VecHϼg ,ZWf0{r  {{N~㓜4Sq \gﳏ.+f _~;R7OaVجl{UG穋 1HX;k^MмY2V0yUZRwP=")6 -;6R5 yHᵫ6'.)EkWci,Rbc+ Df8JOfefӳ W  ׬ÞJ׫O~߅/\1-x-,QC\mYi)a=dtȐe[B,*} gN:'0]xJߪOӑބ[$ԙÍ;a/z6!]W7a ՛5;CM^!ܞ;U?\LٝTOHyS{tIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/18.svg000066400000000000000000000117061356460210500273150ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/19.png000066400000000000000000000020501356460210500272730ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_lSU?nJe(S4ي1$Lc5,U g|14`b5 /e$@ؘѩdQdLRf3iڵ^X9;wRRJ+)9jE֎P~i DMѾB,A[wPh)p C;euFMOĆOɤu@וXǕԾEsMv*@=PHBLX n?ب9R,)G4y/m;m{=n*uMXfmJm[ mAOy=3fQEήm<>^׳6zy'hj@Jŗ't4Ulzfg j&*>{# 7ן\hōڅdX3N+=޲5y} UHxy"t<[[CCd` Hoe{=kk`Y6k} +g{_`z&ƙߦx2@J[Bwh$SD}d`7_l \2|a='F'y釳r,kok޷Y-~.OGݚc@$p5~%R\.,-aZ]h,CMRRſJd f@Zx{vlDn}X8 [ 4s3Օr/Q>}@2!SFMc* aOK8Sz^JjDcqfnڟRJ systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/2.png000066400000000000000000000016171356460210500272130ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATXW_HSQ٦+LV,0( ){ћ@("  z(zԩ/ * Q4HLHCCc41==n۝ۙSt9}ι~0ƐIЌPf׃` * .7&9vθNH˄ {2F8c e:MLh$P24m@@x˄ x&dT2y,<Š{4@V'}0Xky?\T`oY*F ZTTS-!wz]%lyxI= F]`"Yƛ;g);{-j?ӷ_5CXEdE=`i}J;@RB(kRQ'~ ܗ3jάhuh(݁/KR <:=@%n!hrԸj9 'RH *%\4C-^n|\S7/IA)lqT_?.`fn1ݰV#\n3؁",.q&]Tģ"0m#!0OGGNy|$Z4dD;pʴ?5E^YVjber&5?1Җ-꿀1B{sb ͞:cE,M]CknN[tJV@5 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/20.png000066400000000000000000000022231356460210500272650ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[LUK! P B_(ZeFH-Oc 5KS}0DV.%QIjF1iڴ!@ kV[Y .v;;Hl3??ߙ ~]eU&]yPƒԆQ2oLt7 ;xmdHOzQ*N#Z<~}BG # 5]969F{ 2a1Pv'WڂnjA[EtXzA 3۬g(on$9)ٖEEaI+*dlNZDUyKwIJގ) Oj:ċo]XM3PUF:㠋NJp%K~5}c=yԼҋ;@Uq.i* {|}t {DVĀ&]Ѽyo4}~{fHpx|g?oKZ ȱ2Cs~ J? d`jf^%-Ԡe\1 q@%7%j|t{SC)^y}&Qi`U)ѵӣܜ }l`(CȂ(V<+vot~_g;&;INU$72(ZJ4PUFU[3s-HM.X"6++ȦIlRr ~s4sa^U`- ic'6hE&N~ฑwY eoi>{KMqZO 2v ];8TWJsNj~u7f|2o@06up  systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/21.png000066400000000000000000000017471356460210500273000ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<dIDATX͗MhTWsNiE\XS1V݄f@C#M&XJc3*)tSjF4р6E[ (.D m2LL9ܟ΍rw9;ZkJ YRuXHpm/(AZk(1B c~9)x^!7fZOn}pnQ+aEOa72c''l7h%V?xq!Uc}įE?AJH3 JH?w#ҁZtx4́g vku(/j*~ق*/V,bYg-B[GS systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/22.png000066400000000000000000000021661356460210500272750ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗Lu_KS<"֘7j&]֒4[[ʭ??ܪ ( aVX3ڈf $i SKϷ?8{{.~?~B)JB:`]Q^kG(t" _QPˮHcHJēBw*%^X2`/ːV_#JD(l~^Yu?`[T*M~ ޕ<3!u26cq҆k\qTlt3FUdmHjG . kc2) 14΍Q4*%vwnN|6eMg;z:ݎoF-.q>ě~՛/Q^kuږCU2qm)O<;ps&o<$51M)F`ʊB@(y18 rbJ{[WYP ׵AyAbL:YN BEG4.i{`߰~Hh 645=$Ghh18m3v@v;.EH)M]c`pyY|*JgmR<,&1>_oѴp!Z05PΑ ]DSQ:*waKYCoCxk'É`v( [OUY)iW.xkxR1ObxluKrB,xF'6373o?MZ>&(eiǑV-sSS(%lǺ౲7xd0ZJyQQv#؝ rgi>> lB t? VxP+Vb6Bj;XLx̓˃b#VjX BA IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/22.svg000066400000000000000000000066751356460210500273210ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/23.png000066400000000000000000000022741356460210500272760ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<9IDATX͗}He{>\L9W9)Kd#AIQ6 hQYjsU#ɩc>qgsb{u=!F9WqN埁@'<,a&ogpLË '=bػ{R‡/A " jJY{N34^z&AQ8M~cS\Yc6RD(?fԅFZ)7y%Lδ͚8U4Q̃3əYbY0=[gh/_ ƀ xۨ~``)t0f!|FSpfs~-(DXDEXpbr.F@Fu} `KAs47n6ol  tZ nK(ji4h%쨫n b rDU$VvY!IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/23.svg000066400000000000000000000111141356460210500273020ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/24.png000066400000000000000000000020731356460210500272740ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_L[e)e`0\d8s&D:Fd[3 aotK4qJ;11bD%tL2;NXu/dΙ **|^+Y7 jy~}RJr %z-!ѕ B(RDQ0RidSd<**;.{*y+ST)F?kjkwk6p륮],bB[Fu@Z|pS B7;+S\1ϭIWu;leZ",K6~J*XG-Ũ.9UŅL]LR&cueUxOKkWVSҥAK6ۂky C?Y . c 5!?:e{kp g$4!xdRm/).๦ZP2@F+7a DcU"wd\ Zt%h]Dkq˳$u$82q^_I` §90h3P5|^V7ione,CGFnPԃywt'(֡⤕q}SM;{*V9s~FLDN-<-@ϑ1>Bo/>~&:|6op[CF"@]խt=BGQc嬸n@ a߾1V25BL}kj+[X: 6煢OEoqN;辎B705y,7"g+rv5[Lvhҥ!IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/24.svg000066400000000000000000000055401356460210500273110ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/25.png000066400000000000000000000022361356460210500272760ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[LUgv.hz) U*[L A%ڠM d}2x<-MkkbjD Vp2LJ]ݡRә9o?BJRBYRuz;*B*ntp)(jRk,ioL1!Pr!@ŗ@X@i2}dbjf :eɎeXA )C³l$)k\բbpt9a6%J?`xlNJU: @x-ᅍiXCR*N|Eueޣ?ih!.r?X&A!xyZܜQ@zX g@B00?;s]mN|T3i9 8bwo/uj! Vj Q)>gjSú(yiOpڴ;7Vt#\Fuy1=^oh EM7?Sq}fXRra9 vG,+crV\UdUq 6o>XֿԠu[y_8QZZ x@(jYqjz1|V(jw'A?z,$Kv5[L,?2IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/25.svg000066400000000000000000000073311356460210500273120ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/26.png000066400000000000000000000022771356460210500273040ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<?u|6ZnβTr iH!N9Os^1ys_{<#,%%UwCW"d R6[G~)|G*<%<dSJz[S 2[ѐ=G0LUqG{޻6vRUNy)ҡ ߆[(j a<Nu`!m=GA d0):LxSl2*1qk4`]JQ펀}j¯DރdRk3+&{:tw|c߀ثr 7QRQ5fAV?/9!׶ !A~K/I> Y?kj;GoaPJ]S>[uy$Q37š4=Ѐw{ S3T_&UYc 'u)=*oĝokdiIt &^!"+%7aoN><`pd\/~-m|b,xfT>9{q$Eb|G-Uפ;8_+xlJ9ʯn ќ3Okú<-蟋9/+[\SH5sksMү5k@ ])n=B^HSQ9`2z SU%^ڽBOkրrH1 ¹oc'ef#WPd.B=FR|4 h^-ﭝEXL^ʆ46ĩz~`gm|L"-fB^C2:<g systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/27.png000066400000000000000000000020761356460210500273020ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]lSe9I~auSu2d#+o؍& " F*`Z4b憩,1,:FtiV6H_e1)3W}~-+rt~$ systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/28.png000066400000000000000000000023431356460210500273000ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<`IDATX͗klU]]a (c$fauEaLt|`,f21B2}P(Nf́d\$0PҎ]JG{۷Ha|zs<RPu|#EU&K8].p!&o^H")'P (%§29[u(1)AXZ<ȦyoEʔ&w[Hڅ ,ڴx& 7gKSo3X^SQt4n8= W'A$isyt^6 wMÞf̅Kq](%fwG9jQK+K^<9,M)>5igUU#2"cwyȉ3j51 Nb٥T<, B|_ oю XB06m*b#g_b^.S_`RA6jfk#+ᵺ>Vר.f|^'>F˃Þ5@{M)BF @ qh@F[6K<Wy>=;,_~5ǒY%xoϑ7wmX-ff<8YRu_*,5q\{B8s8{ E3&08ﺼzkS%Mw)libq,&j&3ڑ2g@&dUUBoqWU_2.z`+R<&)<>H[bLb͂G1II?ص$Gy 35[+82S28?`4 &%ꁕϕbB00']4;BW:}'R :{sT G\Q-8dֿ=,}[ZtL=0I.~yoW}ɖe(lV t^Fzh.6.7-hcoa( 4ﴐZ%g4BjӸ'ᡵ Ԧqk2V=\{bf:IasIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/28.svg000066400000000000000000000132271356460210500273160ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/29.png000066400000000000000000000022741356460210500273040ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<9IDATX͗Lu_8"Flh2 $.Z0XĀhڊlkS@ʆX(i12[!j ܉ Os<)2zu}???_*s eNsj R)@hr '@Gk+{# ANe}@z}*^{yF7(fATqI5o=PqPd},34G(rQ] )y8\g 2Tރ`>T֗Mh[+' !f.<ˊ$liV*s*KBbZyOZ*Ui,OImE&9RP9>nxgr [ol*eX =xQ'8 X^)&59(fsyF PK™{NnhnAgau: 16TZs75$'D#hH 7tcs=;FXk_0V%h=3c> E2p '.c6'-Ћj0;o|v,\ ՜ŧ ~=/H*qi]& PɥZ~y?/dPr[ TjqpF~͑߃m /[k?UzO+oI@N4l-DOԷ17{N,y>|Rr^Dj*bR~H`px 7D;#`o.0 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/3.png000066400000000000000000000017101356460210500272060ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<EIDATX͗KLTI*n7@{bGz0b|  Π&,,@ƍ Lbf3+qaԅ10 QcGZ'DZ.G2tW}!0[:UuZSHȂ\C]5֯8Zđ*}mGn} 7KȅB@K1E,H@i$..{U8hkׁ0T ε`< $.kdQ<J#J#q,Ȉۻ<<JR8h?y:jߟ ;ؽu-^(?:񉿮ݥ+GGJ@j !ιRІ ^9ɈU8{x/˗: *-.bVˉɯj@x-vnx ,Az )`::|LG&g,#;8>eŔ/_J˾0}Ɲ}p|k6T;sV[ y]DZq>8RHWGJ|sOān:#<`˸Ժut>w">HG@xޡwdsznpgdJ *dW)xٞZ*VWz Nf[ Nf*{Y1>/_ʭLsMkiXeTl6ؐɋq<$XBK"?o2b-.Zv{:̽{ VCehᖶȼK0'wޕT8юA!U0SB|iL\Kʼnz~܎=LQُD_eI>IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/3.svg000066400000000000000000000062551356460210500272320ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/30.png000066400000000000000000000023631356460210500272730ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<pIDATX͗klUw:.]ҔMB4Hl%!Ԃ&XLcT m5$&D0ڂF01Ѵ4$M)A -iJ>>faJ4ws=RPPƸ!w+ܑ!B;w>BRP\R%[~)Ż=~X(v)H5jZ׎n-qOQxW_>о`"^LD()nxxPJI|:j'9@Fw,yP\Rᄀlw:[{etXeH_a$MӞ@⺖*:9jj* xi[+]]@ zC.ڭ|zŹnî/[B1"4"PR\D9_bˁw6QUMz룼RѰ;&Fغq-d8Eb xˏ佯~/o}ͬ_(gr)?ç:yiu4W-Q+*@WA;tƽ>nݞ`Iڰְ.zPV:Q+µ=V5 T;OfΝN@12:5 >ӕeބI~/~w\NҜO q_@fU q0xOL2@ߍa} J6dg Oj EH3G`ȍ792`E7vRRn31aűŒ?HӎUM`,8 =D# P2K3A_~0'4[S|frV;w#cӉL\QaI[]1;Ie#L8'Z(|Jvn!EQxB΅InbW4R,*{hSgb);^SKS[R,m]WwR}53]%@cmXR;jYv1l`d/qZtA [xvs.i_]7bʵ MuIDZc%+,Y h+2 JOe}FGJܪ%% M܂ B^>ZSqꀮ5>{"c XPj ?W'kNVGڅWD3_?܌%1ǒO,?ɛ"LpIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/30.svg000066400000000000000000000114561356460210500273110ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/31.png000066400000000000000000000020731356460210500272720ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_h[U?gӚbׁCu_ZZ|e"tk+ &eĺEdnK]W!j(5,OҤ=>4MRtϹ?w{~w픲t@㶁aBv+4_!@щrO!O-e;-xѯ7FEFLp㺦N ޳ϼzvԕoEB{+ہ4{IxF)Ŝ(pw|bY`_fiOG6TTm>M2E _2ؽj,W3JrCJہa%HKR4SHoz;[9:+;q.o⭗;[U.8xiFցl }G=y\DIT =v"xg9vk֒fE@n0Y5n΄RSpU|;_v;8ݿcƓT 6]4E]ȷ[Mi\;)M`!௻ӮҴP$ߠzX45UNawC wV-B(?Hra`Vԁ/fǁAN,ųsSpnms7RU8^LX"IGk#=eJ9|;UVzs˕r2H1WԠՔSmf2s@F*폛 tXZYe!ZXʒKۙݪrp;'^\AJV?TN}<ۨ8L1~Eg_ c\ L["8q;l%*QA?68+%!'*nA5oM*p`\_P(zBxJ(zOh%~fpL(z'[F rbmOm_Kx {CIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/31.svg000066400000000000000000000076421356460210500273140ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/32.png000066400000000000000000000023341356460210500272730ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<YIDATX͗Lu_/py9 IHh`̜1Zn4礵V-W-K Q?kԶ$H+A*"L@~sOq(2z|=<<!d9,:rzQEB*YilO=Hу"EuCyaBm϶ !RhUJ},ʁ U ^ttޱ/˖%`+Y Eͯ?V\`<E)u[0'H[L7?G:2Tt%xlkg!HZM\T8St1:Ĭ4ps`a RMRd*f5MO|x2{Ac1ں8|7:MAzQE~uh5k626A\*a7b&7% YXLFT)nu nE?)-Ԓ?8}^_mR1G9. +t%cscw(F'xٹe#V3q&:z.4jpW oܕ6zh́QlQt@JxM[sF *Y"` dB.HT2֐db`d/.4ln zn݄AHky׵-SUd0:)6y̽>Ќ Fj{OQIS{/vY k7>đ(_78ui> ]}üV8z VJg^}p[,iUKga6R`?؜l%*R9B'/?-&()fLkEDؑ+`D)\Xefpt#/@LլiNfS E5pxf"TǡݙڝIRddn>}tDGcsՂw=!ʊ|_Ou % {:{(l8 EƽD\ r_,v5[J,?ۀMΑcIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/32.svg000066400000000000000000000111441356460210500273050ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/33.png000066400000000000000000000023771356460210500273030ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<|IDATX͗oLU?\*xkeYZќJb-VjekpCH lڬlt ȿrszrEFwy}wRJʼ꽐j])DH' B.)k4<3&xlm巳2@j`O隺e{6jǾ"+G}O%z{ f)> PL m=Xƛ-a:qG  v1A@dR=>S62vsGt!( =:8jAlZƵ9,ۂ|8udeV!'3 _wz:z3.A~Uma|IvQnEױʋJJQXK;28Eޱ.RZa) |{7'k:NHlJ|9[;yG._不ߍ"oy XD}C!KCЕpc~t^n pw(:=kKIۍ><^?QsBB343Zpm$Dzau&$<|o=[4˗8xy /G(t!Z0GR8q>9!̪zT;A+BGhnF> sZ1+2 34v7#Ʈʵl.ɝ.Tȯm9:Je%.Mܵn*??bcH +oBpf[6f@܎5δ wiI 1y^B@t3!Dkʀ7rcGp$ڰ.]7#eΔ@699u^#BxG/hɝb8S<^?ě{Om-۴" b3lVl y{#r|5 ݂M!O52T\S5uyW &-tE/P/ systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/34.png000066400000000000000000000022321356460210500272720ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[L\EsXn ]H#I0EQDU&&FKI-Hm"MӨA|hj6 PJE.ʲ3>lٳ̜o!d5*;`Yqau!)%d~!EBH}H` !vI)7rY;g* )#$~NS-U=Kp+JD~CB*Z֜X@Lyay8Smc3Ő6UcXԦ |`@`a0]) Lz90oA! =5 )j/ئ?`YoWSX>i6kϧ};s%yUp .Aaus少f2[F%<^.h"w&L! p) ^{?tW5lq_I|gN:b#HBnܠ߄Rj\_x' <漵:97G #m% JJb=IYyxU>;n.@ǥWXw7 ]zxȄ'طb1?za]MZ:CGg|gr[h%s_b!G'8{ 6G=IA=[{o#zzĸǝ$P}fR!I^˽8(q.=9§6>\;טHF\1Q:Lp=g:2:9@= LL{qn7%B|ghphޙoF[^LbƧ -FY[PiL2(s1S'[I͑ ;qdҗl^F'!.)f|eL@aMK 乶CՆkjV~(wh6U+Nfփ5gq{"1P=\U{b՞f+UվjHIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/34.svg000066400000000000000000000100071356460210500273040ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/35.png000066400000000000000000000023231356460210500272740ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<PIDATX͗[lUgn/]llb)Rj6&AMD &$_<(Fb4 Dj%P0i r 4ֺ-vݝaӝ Ӝ3|?BJtBVvv/[j M)CH7 EkBck6N6,*!ImRwv) (ڸ?Wtĉٛ5նu߆{[{˥|^hlm@Va%$h\%i"SDxѤ0-CŦzY#ysf1ەpz 3ӰےLPOJ:~uRӱ/L(NY4-*~;/v8΃?r!(R[D:$ۙF`8̍~Q -%Yb" ǸxB Cu-\DT g%5F9|娀t[\}Dլ%YDWC\(re<@`s aǖ57hД2+Vv[Y4\X<>N^)gMy>4_?? -,u&83g՟_Y_-Viu cP\ah$LYa._nd:gW} _>΃mPמ/`̻w,J $,[öU%l@82'ζe!Ϧחcv@ ObT"B~`\3qJhM1vV>i qg͠ V<ƳsII9?KoںƇ@cc͔d;֕c])^_)[m5  //GPt]Op&Ǹʨp8B.F*Yid;䝽|p_~!tr/WGIi39ŗlF̚JN#a*)ft Yƀ02[kB6_ܻ,˴hm=}XnLZmV D yD(ZUqj^سQ(Z A?񘶋I"j01|KIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/35.svg000066400000000000000000000116001356460210500273050ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/36.png000066400000000000000000000024061356460210500272770ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗mLe9(naё B6Q7jcķղejs䖭r. -˶ ʱ#p8/݇sx8/y]}u-$eLcR_hJ%BW- ESmS)rOmdr7P2E]R.o:@z)*H65loKX.5(Bj.+5J]Qnտ1vȯhڄGټsb!{wNqC{K}Iuh݊4̵~1 )yy]A7Vr!޿TJH`h DT -belar_\c>vjא8. hKRl9YFRH7i`T::h-66uпY*_P CX2w\zSqM$Mt;Wc}RFt<Wxj +zY Yf|(M)Q]p37U8Q]9c{Á0f|PDM&!Ͷa3'NqC(^tIQ systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/37.png000066400000000000000000000022031356460210500272730ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]LU3miХHRk.ȅb# MhIK#ꅱzEc ȅimhh RQCtBng.3 K߫93|;ߙ)% e]˛YT" FΞC}+)V2eBJVw@J~o{ӹ5p<pP86zN<:GjY*(Bkq@X' e ENd"΀|Ŵڿ<^mT;qP1Am!A@A^6Odm`z [6YHK1-:21㋌{PK-RWcD:/_4ɑ*yK_|+V#b 2b\+9V 3Q4R&<͛5-)Ǭ/{$3 d-R~wC\maL'H3(knыL^)+@BU.\q4,Bs_%;x hJe 㙐j6aZՊB Y systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/38.png000066400000000000000000000024551356460210500273050ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗klU]WnlRd̍p)0 "f ?0,F(01*$_M. #! " & c iYƀm]vC[¸e?y9y9BJXBSu@0yv,EU Xڐ EE k[*dbw~|,5{mWd?t+nyhw/r<BQ.ZW3jS@c+8 6%fH8ԡ,CEz w2LHa97ۻu j؅㓱$qtu' )ŲK-3Yp&i&cpl7DzTo>gW-`Ĕ`?ml_õ[r 4J;|j4AZ; u1-eUl?"~ 'tq\]n2)l{oBhЊȀo_7 z9qtس2%N05J,]xS<9z-Y 4eU)8~^ @w~{NX5PGdts^JOGP X`11'ı iV3NN^9؟`qA;lVhF5=%|—Ut:c4Nc 2qSWQi=p;P{v݃ʹ}C 2Ӄ1o-Kg%2/AaڢܺÇ;Of1?:ȥvrmilXZ@~y(BӔ~r^AUɴD j"Px>]m`NV:DN]|UJv"FQ?ۦ% 11 qzhY-Lf 5)D9!۫55RRT ձiE!Vq! 7cjo9$8skKCQ~]-Ïa{A^y5h ϱbЏl;Tw#86o$>x=LJhhjcu\m o9Q Dی!HI#ޠNWA0b2rq<`gwu\MP}&oOw4nZD)GW(jYiNxa׺ systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/39.png000066400000000000000000000024241356460210500273020ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]lTE9vne)&(b(j Ҙ (P0ʅ^h1$D܈mV5JQnuYv=E۳{PR߻973)% e\ӍWkD%h\t>CZH{C}Xs, !ec%xT÷$r"ŤG1f?U{znX/5SyS Em۵y_H>PDT[dڹ«2Rð 8㹓@?K P2) 381dZ#VӪR,s XWPh%EG̓ߡi9yه(v4Ɂ;y$QUK* %ZXI>/v)#4L/gu rmfyQ]vB?@QO-`3,Ε‐K")rVNw{d7QUÞmX&*K'>?xN9V4Mzt_Qxf|^9?H #4enpTho ]cݗ|jexv L4z;6FB)݆##Pvpy` g S@gIu\"L+xbr7p26s&/>9LD|%+]u´tks+رS\4v_iش27<~AC@055bU^xL;7>Rf[M"*Oo9L\`0G;yyŃṒ(@>4#U^fY‘c` ĎC?$JJ'4Μ7&"!`t EmbY497300rmcmށ##Cs+ټ!tS⍛kec6zO7r%;oFHg/8lڇ{<-b9Pn{SZ.}vH\+,Y_ /+l @`O @n!O^tM5wϝ=u=Bjm$ EMל= voA?z$4񿜠! IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/39.svg000066400000000000000000000136451356460210500273240ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/4.png000066400000000000000000000015061356460210500272120ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗?LQǿw"І`S$*I[&$` `hɵP`"A0j.&\e9B`-8]w-~{Ϸ}9G)JJ i G= Cy<N3cњdd d2Y,ʀ)pj1ά>/ĞDߚi̞OK"&w. P,E$&g33l`"癒9i7xg?Q Օ7 4L5:nzԅ.7 G=0>!0wӋi3Uz]SvXi2k5j \ⷴMT,pdm!F^?'?jPh@W3y+XAjVyU_{ng?Im qv ,"V7q^TUXzB!gr:47֡Nɍn7+˴SwVؗUlt8i`]?7}fzٻPbԲ EiY4sfLsN. `D|~q4Yqu뀜{HG 'ֈɝO;Ӭ+`܎yAycZ%;ddGTO^@3IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/4.svg000066400000000000000000000027011356460210500272230ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/40.png000066400000000000000000000021711356460210500272710ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[L\U9͡r´(TD$Fb11`5_Llɤ\1DFjLP/-Scat.g0̜SJA֬?k:B)~B+;݉sYKg)Bգ*ri%fJvxƷSlܞ!{@6N)%|] (=sDj^&qla=5wc寴(]^2wD zӕ!8vIz3=Gd\h?y,z(,8,e(`dFbGnOWV.9с+# =@e.S(Qt5@l!(=?=͙χgkqv׷8< tE?C&W 9v7_xν0-oE~/GrR) |ϴ>0 GIu&Z6ʎ\h{xKX%Gߌu^kP9.'<[ 9 ]f =dVoXX^`ngسRm.\9N^k'#kqXi)%:` *|=- ' ߋ͂ ;+~ٙ̚ uTƷ';É甛cgI甛s @Jr< Νddk1r,106e+1P˼Ci@='Ѫsҍoϟ ~V]\["'=؛_\+a# systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/5.png000066400000000000000000000016241356460210500272140ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXWMLAf)?RA@X4$&z&p0!A&&|CH C($ 6k ಽWΟčqB" gS8u?Qi)F}1Tf-AKi systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/6.png000066400000000000000000000016531356460210500272170ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<(IDATX͗[HTAs<^ˌʹ hضIPhty( QCQtD6 (.*JLg/uFMӹofJ))#tno Jv* BPCm_CunLjq;G_45- K 3x%icɠY\=iPҸN _y]M:MD& .,5R|Lcc)<pP(Ee 4oF4`,td3ݏUJUBSV&t2+#-m6х<7S Ny=bVFC#]W:WX"T Jض޻m5,?0‰K- systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/7.png000066400000000000000000000014631356460210500272170ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXWMkQ=5mՖPJnb,4~,"0EqD\ƭ?mlqQPnmEӀdPC ҐLsI&!̛9;k:^$ 66Q`<AKɰјdd NN>!^e>1, .e,<73mj/ A{֦}+ o)Cw23`e-y1<(]2qRckYkU.B6XUpۻ]Arvhꀚjeqq*|\t@oxn2e~U $T D4c݇;U0"ݘSnalyK)f>0"19s,vSho`tx=cDIKNC.#>|3C-i4n\DbǯbfCGqvk 2NˡMsVn+?n2*$-y_8F^F!i mT@ϱr˦AS~F7# ^8|[j  xp2 [xHxjNKVµi 1D\?mLѴY#?,h[IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/7.svg000066400000000000000000000016571356460210500272370ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/8.png000066400000000000000000000017411356460210500272170ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<^IDATX͗]hW$fjnR[T6J1ŦK+("l0Gj݌MJ.׺!ZJ?i٤ 6X&9g&msj-y~y&Y΅v+)Y?nq>#l.`>oW Xh8L.o7/?B}9~HTǻwTr-2ZQBA~.?vQJ{&` oa% HՓi‰KWtH6U XX,Тjy#7Cݙϵf9t!C5,+^oVXtuhݷh- 7i>k鐼c<4'qZ?iiy, hUܴ:"& P systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/9.png000066400000000000000000000016551356460210500272240ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<*IDATX͗KHTQ8IeNDAN(5"ZE7-." $6E$eh2sZ4sQ_o=ߙ5ɔL;`Φ2FIB{-ejf֔!. 8:˰PgT*u5|!\9))P@jȍؼw^p.= ?۷ @W@I)=; systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/dot.png000066400000000000000000000002551356460210500276350ustar00rootroot00000000000000PNG  IHDR TKbKGD pHYs  tIME :IDATuɱ AuPF> 4H|yIc{$ N$$(=w$Aݵ^ _ )d6IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/dot2.png000066400000000000000000000002001356460210500277050ustar00rootroot00000000000000PNG  IHDR TKGIDATm˱ 0> p@Jmq#" d1qT/aǑnxz IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/green.png000066400000000000000000000002601356460210500301430ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<-IDATc(🉁7ӿ0(\l,t$P [ ;, ~NIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/h1-bg.png000066400000000000000000000010651356460210500277450ustar00rootroot00000000000000PNG  IHDRdmMbKGD=n pHYs  tIME 5-IDAT8UQ9GKz4u  DK 9|atzn—OMl|]/=ϼx;j30A@ ,{F,i!2kX[ף]<=*;_`vԙ;luSn=*7>7?A%AB:^Zʷ{*2y۠ns٭Ʉ~c!?ozRuI)aΪOG^"NXɟ ̾{񏏡݇5Ymmew->IiU?`9 oVQ#x3ӹzׯztj?v/Q+IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/image_left.png000066400000000000000000000102741356460210500311450ustar00rootroot00000000000000PNG  IHDRX-*zFbKGDC pHYs B(xtIME \IIDATh{lW|%i.&6ͥ%A[X.B \Ԋn+ UU ej+,l) t[Me3vq&ǹ%i4:>sgZfZA0 V}Y/Uy*7cav{O !)u =3twoaun!' ȃ.eBp{oDCe~ }l!JPt7]>&6|=۷(V5ĖL_Guu>t)$v6NAgXх`N{uaԑ٧AώouTCv"l6L}:јGD!mh/So)SZ2]܍| z7"Ğk.Cx}zDMwUݿЃ !q5%P UuisM`N`5:etv ص{ CG;G9N7C$V"R Tv |;[h=D^(D\J !2PB~" .F& Eje4㧭,h4h;#c#(\NϠ袙YOhs]>ch^xtrCn{sPH%įD6VLeiEfQh2x*F}$u/A%' 8*iw폀?ZI׮A6~ +P>{D]DDy*3|Y7uL<PA=Cpɔ\ԃzd"1.(B{ 7`rA0A܁rQXm_1It6lF.ߌmoRzUFiSu&qi] V D"  KʍtE wi(&Ug0 'gut#yPC#l"N >k r_2?i3jFĖB_Dl)v㿶 ߋ?|q(/-ŃC(/,&w.b6 ѳ["A,{CesA"n/zQ'a4:D݈P)yxڎ stXh/`ʝD!RbQu睤edmtt#R7ϙ+waeE_ Qu rɓngُb x?PAge˨{ "k oOA{ۧ'?'VYON7Q>|֮.!H$#HK)@gj[MMTTyf9iMpEPD涊8=̏A{{)u儔Oƺ(2dɢ(⏕8kٸBLw0/x$"~% Ad2y%8ѪBx~6.)?<޽8۷S/a55MD7 |"7WxYgNPh8${FEą$z5~7#&č_tmꈴ#"Y.p)O*0JTQ1C c|rTEkHPUq2gs: ?)BKLFP@_Fg5#Gn6Qdl(B;=Px]܃9Vy1Wp(>u8u ,[^$5C.@02k =DbSBJ6 ­cϟ1+ D%}.*竴{! dWNIK;$wotA m-I" f Aˡ K>0.%XD_,Iz/cRF!܂4~g1" хm^H;DS=S)DZ#3x̻jKIs[t);Tt*mAG& rԭ_ 4jG Qu T_k"`?o3`KA2I)l:g^6гrG:KTWGhOUPyqQ%B'X+W_H]Ѷ6^K!X֤ F@D"bKf1ibAS=p᪦Ϛ,;]^y}gA93gHئ1A}:x%j , y{ZB4f"!ʔGC& Ӫ]Zej[|tc&ZՈAy*'iMP(0Sw(:zhnj&P7 n/oAD˽'7)>~z6mtЌΚ:ɣ뮣v:b Plv"AU?pxzEŰ'*SI)h ɢ*FJeY|gH˺uk&jX >6=_-#uti(/zw#/0csF74 $!?2B݂Yzt5#')Kz=G䷿Ν48BJe -,C^1m3?O;PGHgAHOгiNwnUDZ)Rjj,$ʄtDIOc龗M\^GkhV"JѹDZ͟GԾe ͒A0{{W#sda̿nWwf~ Z_allRJlƶm,BJGc-^6-h =c5\ǖXU j=Bi)uԋ: pGE`=ΑE(D ;;ut,VP(D8&#RO1En~Do/-B[D%sDzyhs_/C~ ]#ho_K2"?qAq#e9P=rB|L3T+Y٪t`|֭~aw"l]ڱ]QPb_OX ;a{rxul*p9*}A߾.Ɋ-|rU: <®5B+KX󯠎==3nnCĖ"W#jnXWSfzvlB_O!șyG)+m|B,B/]c/GRy(ץ{zmCD";;IwvZh*uѝAr◷Qo ۱V<7V,l9>j榫qqkx ӲO\eZv&s DMwW@k!lqJ*tl\$#""sEazgT@X~f. օPȔUE¯i`Me雑-Żvsۊ.lCރhĤSE$Zj/Š-Fo*Fߏh MK-(Dd>4~!SfM=)wئxEV< }/r?7=6&Ҵ9lوhs.ȯ! tiԇMD.>Da& #jn>e0VQNcy@idߙ;3ŒOېb?VYZٛ`@TD$VjBދhإ" l6. PC\y ?d! bL+c image/svg+xml systemtap logo Andy Fitzsimon, Red Hat 2008 systemtap systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/image_right.png000066400000000000000000000046711356460210500313340ustar00rootroot00000000000000PNG  IHDR)K=4sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< 6IDATx}VU?yQQEeYxVVFAOoYd::4:ًQf3V:aY)ܕMIeYAPEe?}ػwﳯCd?fM6޽/o8F`.Ɍ_l`jik0å_WӚ`hiiaf۝S!xg1 5U+}̙1祚u`vaDW͌ʚ0'-B'Q< X&0?["൐p'sazB$2 #"Ÿj'&0 bA kDWcC^`#Roc1bhNP!o'1`lFd1 \L3krܫioׇ|o49`* A\ lr[յwc5NLMU# yr3k f3"RG<5ƚ8ʛ1)y%M8q ؛>Ixz1p軆Mw6p'Pֈx+8`;VaVw6/f?,® lhT /o8탒z{d6>& Qc.m&z2EI&a=n`ƣtCWQc]NVUX ֟FrD߅xiS$*fO.%uEF?N>O¾]|6v3w*=X^OEFI}~c~\.g qyA1 ox7ŲC2ۻӚhj茲*&O'CK"=eэ:?&G{RID~w]zqs=h|ѫ(JZ,HHʼn]&M<^db{"=% o ph,kPk!?NbPY'hҙH ±tѵI?.gڿ%<ukG'қFVr84TD{/=3@z6ppp1)8XϣHg%u~'Grm(Z+=˚OM38_?snj!=í#l@e~M.R623} %&-:{Jׄy1ج~}vnykQ>[8KIC-ةegsOEk- OKս`m?qD={*vܙ'}LSRo-ءlؘJI'A=AIB?gZ <,ÆGDKwvק+dЍDޗ;Hilnq:*}(W񨯣bij% \Q[n)SN9~ "m,D~:NI=w~ MlTRW`k*6j7Q w8p(Q'E>UIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/important.png000066400000000000000000000044161356460210500310670ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh՚klwvmzw 1 /%e"0%`ҒDIC!HmE@JP!T% FR5(JEJ uWJll퇙ڻH#̽sΜRLʷm@__5(fw~#Å4NAQk]BXViQkE9FvX>Z2yyN`e,[47NtTSnxO.,`TitÓ+9X P=鵺=&=n\ UaK2DPEM7&BiNh=`>O;F|;J k5s3M7򀵀R:óON2ކ ^$TY ֱ¾ ҟp%@=Gk$n_tcD_ %3kN`ZAkHrqy.ݾRBӍ!`*(P)g{ Qf؉SAxƀ{g,X)1phQ`S1$ܢϠfMr H#F5d;ujYm]?d&[N !(f1ܯWQQ1\YA6A}Iހn/sBJ@~bV`5ypb5#GV(1yXUZZۣh@2r$(Np"c}:аDF&(Ёqxt&}Wg|jwYJzz$cϋUK^Yu_% x F (F u%iEDB.eoCsjRt8ݑdž)v$)c1$zPR߶&K޽dn<l*]&A(K8I _$G~_Kb3[mZij uLBE)öuA|bub0e_h~)II/Hfp">~]) 7w`:p1+cF lHy,'5ğ-"Qc2%,H̝rb9FI6K !\QiI8 .; ڹs1` F\H+Ov$).U 7 T P@H!\B:S[hBnWGE*nO+ N#[DF:oD w5B-OD|+e~ ;4 "CzX)GK#E.g 8fC`/P$iS + |--S8 n846A^MPU@GPhpjI<0Fϧ|M zHMrhYyd|.+EG1E^5}  v~Q?>N]t/oq!?ȽҶL@_ j<^v逋mR*=f)Rl>ʨ(&1>".z  .`>#RJ5$_s/9Y񡇕[3wba6[1{{sݖ_WI`#5WKIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/important.svg000066400000000000000000000047441356460210500311060ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/note.png000066400000000000000000000040461356460210500300160ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThՙmTޙ;3˲tyKI"5DcM?4jci-64m-451jK475\o;3sg;.LO99* !jGS)d**pеs_#0 :0}8qxеJ+ I@8<(Ujm !,kf# @(TǢEXd LaVƾtKmm߻w;H:ㆮmjH`-7ޕ+QUYPY% /@pqq cl{m+۶Γt‘Msqu%S\Au\RYz)N8o4tm#ч,"?~iB ckT"^ vD?\KKQ>C׶( |͟φښCJd]I2b՜< @pkg }˭P0buƇE3K bR("I| ~%?>Yb|ׅ{Տ<6/ (Hf`C~ '2VCq=&=i`.Bv\2CҞHs)i,1VeqzD*x׳|Jд.Ӥ-W0b.5~cP__߇ۀzc9wD$|yW:˅DM}#mYB+( Gˍ퀤U/P"B'e\NeFx9BKdl"+zG>rn U sz25XOa\#S}5/g G'`MBP~g*KvJ=,iR}B0o~3`"YQ}2$a"?C\kI#IW$n1:0K4kDs⦅Vu=YoeK0fk6k~Ej{p ̐^] ]8~Xovn蚀灃1 YGG%xR:vxwatl+Wx?JmXr`nl%tP ۿg/3Cځ7مe$#{p&Qkr#7W8UxمNy^($ZRku nT.ٽ=еc #I}o˸4ozlH)Pk{uhq,l{?0tT`k1`h m];;.1G+@ LSS3 N/wyYQ&0b™SL=wĈql>5vlLg,)~XaZzz h!q k==֓  _\\]\n~ 7t-[ ]Ñ`GJ5ogOx8 1tmo%Ε<,4w9qMG!ݓ_rX@kr%6 !5׬ҷڤ)SkЁ-YC׆}Tr/ݻe+SU v`**zf1tzu^{99<6b(Dӻ?ͳq>6='y =Dg(2;|@ef̞D:}/? f* Cז " @}a$7`~е-WKp0 K@8k"+@kuGPp$ZFN2zfCV]ue0" D <; 6IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/note.svg000066400000000000000000000052541356460210500300330ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/red.png000066400000000000000000000002431356460210500276160ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATcX🉁w gIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/shine.png000066400000000000000000000002221356460210500301470ustar00rootroot00000000000000PNG  IHDR1bKGD pHYs  tIME  IDATcD&L &7FfU2 IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-back.png000066400000000000000000000014261356460210500314740ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME+yIDAT8˵?HQǿGG/Y*ĸH\77 bR Bb^dY&^Z^Ÿ {MQPJ%8 :;;/ӷ%\~:550MnkK?4)ز,EuG|Y<Cu@0M!E &20Jbi?T6锴zLsp Uq U5sVRg6\"0IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-forward.png000066400000000000000000000015341356460210500322400ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME*0jIDAT8˵OHW?3lgkHC/ ɭ=EJDņ](ȡP$SN9U (Z^BЊ)BŅUOq77Cge]w}彙w~қFz7~N*ٙ{_l\\Bx>VIno$j UkJ}(Cn''$IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-up.png000066400000000000000000000013611356460210500312160ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME*;%`qIDAT8˭?kSQ{{sScB]JJE NLBKҬ7pRpA nT u*$!)(Ѷ'76Mڛ4Q {? hT*]5rWc 8numqYԪ/GC.zB@4}&7XjuW~cc#ܜt]?VI`7F\eoozm%ÿKt:}mffzeYl6fB`U O&hWU|guu5JnKB T*etxZ8tZVV!!DennRxgZ )%SaLOO?XYYضM4uݳCϧ)g~~qH$"J]vk,s ضmommYfFA/߳\@ |cVk0`#PH<>::t lJQ)b ^l%T)"vTp<608"ݽ]wJTl7 ]wL xVuۀcr܅{MP.G)d7Q华ZgIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-home.png000066400000000000000000000014631356460210500311220ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIMEVIDAT8˭UKA}3**i+X $HA 7рn1gI,"=xYo-$%@lat?ۋ 1&>]fgo߼.KڜJRJ~?aW>s$BAVAn"f25R}Yt755E+lnnbkk ǵc}YXX#aqq1F_qE>mnnNF1#LFGG!mH9Y>ˁ14 B$wr_>GTS㠿n6M&=EQw^r {oU*LNN`6]WO&eY0NNN:*m.۶Q,1==MBP@UեX,7IRy?@ދiiHmj3 a%4QIxǡ~!`Ύ@i²,1aG)f26neY .˲t]A4MXӴ{;uݞ0MA 8^E#fr 8<'d @Sj7ƍVn=IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/title_logo.png000066400000000000000000001161731356460210500312170ustar00rootroot00000000000000PNG  IHDRIE!sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx}yEc=3/,d!U_.OPWU_DA9B}_ ;a@B{ݝݝݞٙI'vw]UO}:GqGqz p*Qp(@𝝝Ml 0('GClٲE&IO6/֟188hutt}G3$BZk%G3f[C9pG9bvvv2pxwQ755\>t=! <:w5zꦛn2wbqKЖ7ӟ]vQcc#wttV}[+ w<8 ԗ%2)Tww&":Hmˏ?7oR8g׮].Tͳ}b%'-+"%M^ڳMzx<.o$V9g/8q"šNJ,0"ظnεo8GIHRbxx l gw O 5ipl"eWk/8v. @VM6nf(cCyGqh'}6B@d.H4u% t Wx۶m%Y;$?<}%|*}Kgt f8IdF,տ=< 0*|}tڵڬ3*%g?m AJ}fK˲dwwA[ϣx@,X,fk@ag8D8۲S>}Ks4;?.VWSdT9<1~{.⺺: mš#<88hHCC8Q /yط:[85-N1aM3`X堓Kd2):&}8J8#v#8Q瞕 p;2SgL_忺.<n6lpD7:7lzfd txy'k_zy逓?Jx{|tɴfiiwV^Oz+:uA'=B` y4n}eMMSl^zCm;w\.4ggGz>E>ל3 p{*%=/jV,%yK5b$|plKU[]:;qē>3C:ճ 念k!ܠ|-_D/ݦ.ğݸꭾQ!#]oB3}!xz/:/Gɿlapt4d^~wZŅBRn_?K)aKVtkk+wvv`>eSS w -7w{tw)~mGz8ֆhmmLOOZ+'r:}i93ԯ܊?Ƕl٠::: 1Ǥ~˖eMS\[cOwr0)"͚HTw57=wJ#ݶ[KnӴ:MoYtww[A$4eL&mPs1U Nc93\._Wl~ʕr̙ݟ.3F[w'ֈWyg2RH!PD&v͙/9]_an?ڍW6o\XUo^W:;;BDM믏˗>px(K "jkkf͚ o~D ~bie'O869{M4iuiLO'xZF)aD` ,62ж/X#H)3R3%iJ]{ [,7D߻F,=5O'H Dlr s4"?;A/hߗ\x+MA2(M4 olj v~;W?w!a,aiBa`ɔJAdd?#C1$fT<wo!n{vSL7_BtUڱ~+V"[ þ*H)eY <뺢P(Vɸ1H@y;]\Ӣe0 ~]f.|RMw 6+ޒO-&cqh9 >MRqE}}}ڪloq%rWWNSx' 43V? 1|fGJ$>H %H- EH3r`g+sx!M \ s4o?[|Jo<7/}l'@R b!ZZ[mA8Rc43\.g2ilV---T(X,f+\K 9zɭ|HؾnV|#ڡWKUf娥٬'b qY/KPcQ?| dd2+ A:J`f)ɘ T`vpIW%➯~zȲ0z1R aYORxғ2ȗmֆ)x?`> G~*@F&tvvRh#/;r9cV+Wvl! bќgiX,dY͎;LKKikkc\WRJkm!|X#3o4^M/fw/Q;U~XSOϐgmS/2>y^xrC㗪m_ʺB(4yd<*yń HmbppPڶ-<r ó5RB ,R3fl f,:B2okkNc5 6ة GMfd< 6l ni_l4ߒ4rgzѳyD: 鴬 Y7$$c'^X."׬Vz`_QՓɬ5Yt%4!{6뚏Y-y1J zTW4_۶b/ 8& 7?9c|ooGnŀ\.G===B7H}}}d_bC")FhHxIcYRo/559oyk,m}}`0HTnz߿6_nR\&%FKyrmvE<;?RT6O9pTGz7N7qZ_ӖKZzlե<=CD #/~*l6ksb@:/ٺ&Ǻ9 /Ҟj~0tF+3 v% пW,X+Nx<p-+$H&#~ǯ~u%{'+#y6眳D^s%8n9X&b,Įntk%xg`WFYP.VZ1I5c&:#Bkk+Dz"N.;o\S o6 }?F]U8U>@?zw}pm۶#ts2ifQuG[CQR($ lcec^l6KoUkZt8+l8ڞ3IH5͘i'1r!>@&"sqlbI([Ǘ/G>[5x8{+OH--/Xğvl:{YpIlgۙ(6ּ60`m_~xnb ;;8w eد!͚$vAXŠ2)6 kҎp@ĎǸYж1$xKѬ:::j-+*lw ,ml`D$i Abz.sg`JQO=$.ٓmbW冸W(wQ ҋvyL&! O8?"%f죲i; o3۵my o{ew%́+X)xJn 7ybBrR`>YF$Nju1+z#$E~ t$H^NH9 Wذs$$wZ>444Xc1%/}|RJADRK-1R)B IKdXW]~a2?cMK\(ooox<g1&x1{Gp匩xY0>laalcڦیmZmˊv0JSlV@65KT]Eiȓ ^&<uP&\j\*KU?J*ȕ>)*< 1صf{UWd1آN 6t:-핶mKux&˲Du %,!J;!4\+S) Wo?c@dGl+VXfͲ nlJ&9W$r fg(ſ=S͖oejmvIzXà3IOFE,cUj"~`e*GLi 0vheʊY - d*ãm% <2e r9AP]]A@*($P(q-R&n/קt"v>_w9!@㨁>hܹG>އR 5鄔ȕէ/-1(Q=y9?9jGNf%T|^wwti|9E)}6YD"j"eRRsYĬj%nxZMꏖiԕ/@zlmK5'2 eZv`t={8 -Y!N!JlDT>86[=ֵ0s?3pDQi7oF,t:mANۭ.⇮}lt~) + ۳X:Yٕ|'W@PG D^BD_o:ajϠ! H|‰X,*dvT$.a`CE1%(8 b*2ś#Z @#a`:R(S1> Us +NtI+⌒Kxd+@Lƾ}PОD'Ϯ>_1%"08e#yim۶kKZʄ2?5ܝe2`ߟ[Om%?e "|""R^󹏕mA.wsz:9\*l&3("qK-("6P.LjP)>0~DOϹ,m0A|]W/a'ꄨgE kƮXuoPx^ec{[>ϣ\<ndGϧF7WXJqL\")NÉtKEB;B|q寜:("`̬()epY]t5|Z^.,:SƬcH BI Oj(J֑{%6xxQ6&r=6͞?j.Q=|bOO '2xFyZgMU5,Cwk_q / }}}^wwJx`?8Lgg'wuux<hٷ,:]Ykj36Q!`?2|EHQ X1Cو)IisZ K-W IfXCѡ^\RzDPfЗZ^cDUfQRK zNMQ'D)>G;bSޗTД-w=NL(G:H0I:=AMjs 99d2޴i&"yϣ152yP[zOMgΜXqim;v0h?h}(RHଗi.F/_mf|}%n奔`eYkmv\>J!D=$@Vp mGTEK&bYPya'@%" t Q(^rNd@ O4: @{<պq-^$'0JBk fYJVoIq`/VK5c\Š+̪UT{jAk=ހU?bKo= ~̺LreAl[3<1 jx#kv&Rև%c/B_d>  xx@'A pj,<*XESeV-F*؝pD~hŽ;;M6Zco۳x?oA!ܜm|p%/ܔ˃\. oL>fgߚ+n]k׌GF>-W B!NL&yx}~K\"4Dg4('cI\tZ#Q"zZ08JՉJJ 𨤟{ \ݫ^_%d&g@?/`up?* B tuu[t( V^-,i 9DZ'IX c7^6ۮ>ߗ_V~ԩS e`޴KB6KyPڏHP<.Jꑴ!*iOVy&0O uUR4< B$ГqKeQMX 2 {^#AI IDATDtxGUWWcK]RX./L;z=ts ypяUL-05gfj{EU9r?$|DF^$ *KT#&`hM3ib3mdcF ͙ vmI`;ZGFֿ5J˜AMDDltZyGŕx̶ZcTPwڥА u3;LO5r#g~w=1d/6ǽVU<"y+,xU:P⯔3o/j"nF+MZXL7/Kr!8h #)C󺜧_ٽP 3'Y(eYrC(L>7}}}P@}}.0s$材55yZ%n$2RGǐ}4pԆ* _Њ !kk@i>pf=҄J[[t2l3 VJNč0kTJ5A1j!30$ڬӺknyr!2Q諯7]Ν;J)2 `ެ4o",_14r? kc͂?r\wBԮ~ ߝw.dSikkqBXB(}wL0u$zu/uc#=PneYڴiTJQ>A4yb析lW/SZF9FI1y9C;nH>$w qKNҜذ.fauW?M_ 3[3\A2Px\qZ#yV&d05;`&}tuf:ڂ#I瀑V.?nut@ HCi}]6Ic#=ߌ1Q9i'<iGm^\A|g{vkUzw#y$~i89\+c+ be? !d'_VdqG`#='77.d < o휳#g͢esp>PWKĪUm4Pvo~cwc֢)Iz}jePEڏ!m4訢Ƈanz4@ޕSMD~~9ѧ9yD=&"^s{{f:)۶ |v} 1%>uN3>v西^?}=|kMbHƐ Pi+ A>yD !$Rԩ3ϴi\soy[c~3BY(Iszǿh"#BmHh28\n` RO*^~5AWkvg5=g8#R샱U/6y9΃qwTނ *w9(>"!=b`aZ֔y V*R4n527|!ãɅm3͝ <3nN:Bl7^.< ֖[)Q ~mnܼGIn1B1s d7&fA<W|^' =00ɤbҲT?Sqwa3a*c+}~+hMfcD |E ]߀Qw^x>p]4;-qFJƸRUH28T~e<[NK!{,̙g)S@Dc .X8˟Q"|AGLȽߧD͂4LIeW9`#ܶM#{QmU>T*ޤi I~@Ťiu-8n>(q3|zr@qsGacC0MPvUG<끎P2@cڜcr;NZn1&p4;FHO"ãɑNC/^ ,[q @}=D^Va.m}6m+?>d+1#|c2,8*(]y6&fS$ٖ}gˤsOD/CQr0(u-|ϦMf@!b×99v}(ӥrוΓ(J{-}8[̵5­3U ЛU6?yH>Cr"Fpk+IJeKRH=oy^vEh3 Ov{śZmI)eBk'"(cbvFT T<+ߏT*{zzL24L |<$=ѣ_?{^maqBp{Y݅1X߇.g%FHO(mm@QOPŏH|}*0Z <ɤ0kz~{ehqv:;8V{01ə&N8E H /~'CM&o)mǙ9B #rfRA<^;Xɢ*vٸJ&\.n۶m#pBM/=[0s8^Sώ1۶}0S[0Q+}q%|7R@Dda,d -Mm4PC⇪~E (Fu&0iß L 3)T,ʩ`zkM4B9ɫMaϜ :dا`Ȳ)U:>wEs q׭l۶mCm}庮rqCFm,#?eY4d"h-l"Y$M3 ,%XIA$4w6'^t*X0_Ϙ9Oi2ӛ0=!0 UC/*6~5qceg"w~/0A]cw]i%yHjl9s ڊ$?P cRJXNEokw]FMGp}y캮5U1^&--rNIPB[B #d,E\0KQr ueQDs903mL:70=,)jfb}soMCoc_)CH^L >!0%Da: R"Gy`-[{2ȹsH/w5D۶avh˲F:"–_}k;\cN;ٝmmmP(y.b1>l=ŤmUr%reYRJZXRk-4)4RR' ̂Yʒ6P$1sc d&0 icVry,n1gM$qm̗-D?^ >o7ˠPN76Hw!e&MVenw13xD/ Ai]u&cޫ%]vS8@R?@q}PvyhbB/zSOllg8\A`Ě! Ok SD1 |`ƅӊ^"eYb "A[xYuQQQ3UPB`W?\uUe7E!ĚΟ=kv г=M 7(飑F?r򼽽rܘ!1e!ϫJ)a!v5юԖ)j2RR',,+4,RjecQB!LIZ1,*!6^*Nm(.Pj=, 1DQӷ91B9 @F~fG\((F8RL;S⏘ ۧg,O; 3_yo\K7o>ɿW nth0򷭭 !/  Ắ4t]8Bk-m#Jg(%R*p]ZtZ_^!`%$d=F<hFMs+ 2xV$a/] L5W zP;GS)$$J&c`Jd7lF[=rf '5Y<G˼ ?81`Aϗv"Ÿ߈ʚrPؖ_hog5&}=}\\P(c A FͅPCH&Zkz-ҞiqT>J*qZ~"`ɛ  u(Jv EXk+R|%/z<P5CV < m mB 0Z3 3a1\f ZwV jC<Qkoį/ ;DŽ3.`^nL83￯?4.o<~״vp|7 :yMA5\x\v-Bxq.*Q)o7^6PFM瞻DnZ' 5H0"f(S${`hS#7\se-I>Mq&ݍ->X<z}<3a9mC:gn޿_$$af+f/ywB8d@mm Q !PsUF^fBz|Ri#\-1vn{Un%''zP$"$!@b{-X.PW +` \) %B 9ɩ{U1k^}R <9e5k|`wLFyT']cNKn3Q,'2)3{9N 1וk c?$r#cru6ϮV> <8 2{#]]]:FN;ڳܥnKS'ȱg|xtk?}=޸g>G@1o\&~X:Wu$ f[:;iN̬ u]hkt!"g! N}  Y -ȥ^_zX7?!868(‡&{ˑ]HzI H9M69s樕+WVW[JJl6i=4ߴk7`裻͸JL A"LLKf)q`Chƶޜ$]%,T-RAXhST n~lZ3-;"9=mvu>|`ftuXWDθ徛?:y%nS(se%R]7!վ5k>SzYZดQ 0v1qަmw@o9 n5{Zoݚ5k|x\ߺ%Tp& X6ؽs0yK> /BPzbײlC.>Xw%_Y_A!Ӊ\J~Qy<]:G3j"x](*U _N=d?5kLޫnˡ3"ӄ9Hŀߎ4\>}-۵H8ЯxLZ~&07/?ǽaÆ VoyZVO, :8V5(Udgc.%;S a/E"6?}70ޚm;~Ka>e`J_ΆJa,!k0zu+t=O\9{ګ==L=u<เ癟I=^|LF?_#ZVzŀhC]eW.Zx|___@8^ ltUt}0`y`z'y8[Jޒƍ%.[Kg:}y5)D\yl-$p|^X1w3=QKH97\qVǧ]]3YL;KѤ"0;אn?|rox=#7쾻~{-%yoU\:Rx>X\] equٚ."%1}]waʕk/lVV#ӾvXB3ҷ@Kmcw3~J<;C`ou<l{Gn&* RMqop'O,S:yr[V&49$ѓRiNI--_q=艈LGzߣOбG>Wf:1-ѨT.-x4uk2`1e%l\u>W6e3i͘{>>c+P.\Z;"qED1 . ;")(k5u*tC:ֆ\ZtzU1qzYlxAm4H{\蝗%J+GL&ǁ"∈ Z 50or3J{OO6t2V =DhBma.vAXw#|laSf lI?l "gˠ+:sճ7,y9ځ0!fqgmݐFcawcpժq`q[ş7BAcA^K6 %Zҟ )ڗF)wITj Y:)(>gvt#nP 2TulL97D(RZ Fߓ;BwGz)Inn")>Sۏ^'"`k܆rNCa pt} m16o<ׅҽ m<0^ <4c UnIl.@{vdg[o7 @3&.Bex\|?%M- H7+]jED;qLfxer*<6qDX׬9QJ0{WؼyS0^'"zo]xXZ(0.@ RDj(gRw8g4LWnh ap[^cbx=W^PLYy8?=\Gw_LeGܯ]ZĴGN|nɎSL ?^j?(w?s;w\sTY!g-  3KP^Hp:/\Ԍ؇Z #d>,k׉ nkW1x5ȫz7^!Dxϥp1ס:ǣ8t>Я']Z]oKoGOz[amlr\A3b+CO:jrY#"$"ܚ>g2"fP9 ŒCyST#" (AuL&Sܰaۿ,AX+Jmv뇆 }O/XDT*Ro:L3G}}}^Us?yg\>u͍y~+ua | XTrFN&и"HyecMU}fR4?ĻzP U)v4cd%&5ٍ!q6NE*3s8N!N{{{};N@߄6<9[4E:yV O<V^q]:""" HR*PJ1-P߼Q#]͋r m^u[c. Vz,#y@&8> U6H5u?sh)p&_ϧ?;WSQW616$$wÈ#q~TM/={7K h|U=6Ow߯jȀY#*s㿣0"(2s@DAA@>8{ډlOhÃKj rͯ m#]~BD̳VFJN^)E$Ӑ7}T\MUCW]3ҷU!v0jʸ'O>}:EQT@kM,D$1_,zY趫;`~"abfk<X>B^& ==}Q"DsXL jJe1Ϊ@_v1:8!ڴQ/ Ŀ |EW jVŪі'jnkpg: -ym^wrTՈWީ,ZGOc)8|}b$${p\v\I"Rq` gbU`y,G#hyܰM0"Kz%N z"G搩[xVFJNu; 8 ) Vݼ!3GJcf3ZkߥS8i~OQPQ\V<}T?t>vR~CʥRf`p.Z*PW7y'}T ~ro9@*EEG{E0ռWzbOS[^sj0gL]6A8-AֺS)!"OI%ng9x[[o޼9)& Z] лL-W̃ӟ7m6\_GF~^t( IġϘB ;(V(3#꾋ï $UKïoZꜛIlZIzx<1AjĠ31H:E])sJY?( ayRl/FhM:XBw鈢}l=JWyNQ[#XmPNKڙAopƬ:T!3###F dAЖJVKwO='_~3p᧸߉D4Q/LH5u<T&Ii=`TjGyN4gs'Вg[M"(\=[1]z6 zJGHg2k|4:ZOFBU"~@EۢowOF&{;V-wRuˤZ7N Q$ɤ)IW?iӟ8Ge&zF޸܂]z6QK^B0|~$Q bq"kۋhIK2VA;EdͮO_w:BD1(z0P33L'+hX%Q"*m0 'nꥴqbo|/7{DZq$j_v8ig@$^rQ}ku0ݦo~~K1X(=mۄ6PQu a8 *r>kԦ܎A"2}`^MӂIRTT 70[4mK=_.y;~ xF BN묚+ۘd90XJ F_4[v"Չ>_o|3f޳Cإo5}BvQ}))2uƴL܏AJ_D0*и8|E+#HLaTI_?VOAE㤝^l'G'u-V߈GO~ `f9^!;1w!TWV|ч?? Ac={)X;}ա_i\׍܇N\gi[`Kd=&r~ m %cӁ㼛ϊE 5zf.QsI;NJ*^A[)t=s7~ؖԦ t˝śQ[[H/ۯW:||,Y'nZ׳?,v[A8KDUIQ=V VwI€s$ˊ#(Bz]z69M}:K ~.V.пTm+?snC4<InF%__ѷZc_$u'v6yj%Asga!⵻K?KO2W,(|??ֈ~|.9Sԙ_1,è8dw݇{瞏mo5_bJd`IL07U}Eba7?{1GyH~eSe J[}03` |X# ' "rDd&pl^7GngL!qW>\.C |"K);Ae ]m?uxU5 -.j s͸w 藾}xcqQuډhm*" ~VPsP<,,:Z]~/_x=iMx?)B׊?㢋^K<+8dq׈1۬kөn>+ *cؕq7nX1ghY=0i`r( #~6#X DԊޙ(,(F M4 cllCD-;/;ȦhD1P [Q'&#(aW5D$lzNJU 0,s N,Κ1Mʖ$&,gp"OC@AD:{'YqJ c<U{߂J5%9%LI_p юfAZa ZkDw%> fGxIYtj'pl,Yi7rhuX_(Vb^x8{ |0k'qSO^ op>U֡,rMY({xS܆>#DtȘI;%+'75Gf[.Ւ?YDL +`>O$]aR\q-%˒G3uσMD | ?Y4B$ʕv8ɢ]0\ÃYX8νOFeAU0"N2 ND'X! IDAT2٭m(f ey5&rqv[^Em;̆` a"Vfduפ:yf^ (n7kTYEFeт`8=m^vo@nQuU;{8e"#bf/cMD9Z^5 D}k4o)߮^/h;Yե4X"0A9mpF٨dwzim:Bhc$d Օ9pkƏ}IX}V@qU @1^"9èz/3fԪ]hзxod.ʠox 0zfԂޅMƥa@^Me"^E e+v[qIU)ֵT'IuM3>qإ_*d4E& (O|2:Y0|=w8AhGQdmmHMu:}~ Z=yt`ކQ^T Ω#++=kxJF0K; ij>^ ֺF`f,~^^VTs f#y5wNr+z0::L"x9p^qHHyռ0[rVvQ%|ظj)GQVV7e '2ރv%ܝsWBp/i= ;QE!"qѷ#.wAc[:-ԅ^&kld yvּDDoځ yLany?HP8`yj[0 =_"x.{n!L0d`Eq7~׾u:LY *K8L*XH9 q vu3㾎E/D4c)h/)c|fmJv*fqC}G`bA.p+K*j\ED߀I ʶ%f=0QI: ":u9IazAy'@㜇jzLVbѰ߫B% XpgpjyXM6X,]{ Z0< 0>qsњmԣq[?xG`ƵqW~3SIݾ #1LqUN":fCD0RIUì5MT;/[(tHam0L%IIJ\1]~Ǝz޻cI{ cvףQiu:W,zd#kAH$ٔUF&o6h[T?cʰW`6Vџ̄YduEqv`ԒeԷ;oA-7,Y9و,Cof@-C_ l*3`k]i0!Y3 `6_Hմ`&)T0 b <|OP}I[`$sbB= [l6`z\7zYd`3ڪ_À:E0g0)#׎/;NVYsIk v=Ծoa@>_(.A󧢁0ڞX`e)!m}9{a\ujt4dG"=x9oϵ5sYFO 4+IFAXG تLveinQU3?~v8};`R}if­oBLe+t/yYl<tsu$d7@vAdxb}' `$ okx3ס2qk=F0a$ig,6*껙4xf2J-ֈ cy.k%Bm tm> ctLT4u4&Z7Ċ_5zTD`J(ov17fg϶I$V=j$I*$y$P1L*IDi":.ߢYyciA\o[~QaMSIy߄_3%a@=V_- f7M"U*g%-+ \űtFlVORәGk]=NQٺ5広m0GaVU i?joh뺯_j.ZKT DQT>i-2wİ=&R@ODtZrg_E AaD^TuV8jiekkN 1T)PJUf憵5V@8I 8J9 6>UKyIa!z~Iږjf„ Q]k)V-~<DJc JMrHl zx`fszʘl%Np uJ  d6"l"kG( (R"FDN p#dpF`5T*~7JeKR([+<Өy^q.%_0BD/8Br D䵷w zf6V/"嶂`vi\n!cm-b []u  kԵ@J8ݝGۈhR3cECks "y0:܌t:]( ֖"M@TXv1MYMAdy^E'1_3@EEO)Zdkh h6&)Y'^Ԁ-NÌY井E7l ~'ђ3LAD'TiΛ!fBofY8HմRnt;À~ `x#+iQ,(Kv+~u85Z0FI&e S6eJI"`&_k0 Lq7.dn]+cU!fuUT5r9bK=3ˠ0N"RQ""NhDk]TJ RJ A`ܖNWB QnyPPkoI*Ҿہ6mvm[ngWWڲeKWo 514D%t-Ԩ5b}ugD_┡t:R-)c+aYXCiM2B$t,tZ@~^(FQstcgYlٲe F衡 R$k,ACcLNoE%DE#E ( ]X,\wLẠُP{4H$`^j:Fgg'6lhEH '"fŢ_JC/W{|~|>JUTlN:nŘyq$g8掾yLW5ޟ 1k(ӌ3httT)/NŢf+7 ""s=j"uSJM@E̺*HFM>|>50D 1((ˁcRA6:րEi뢈Aowt:=]7S_&3r,6J:@Dd&bpMTBN:F @pt$Ϟ=`lj<"b|q֚Rb!~L&cc;̙s)dK}?VD4u]uAD a(O)7ϊ@絬VWv^\(A`gƪUjC`w ( ˇa8200PD@eԭ.@kq0x%SHpC۝S(v8v:;;x"AH=m+筬)-T'zKD(U09UEe2Da" 1oD P7@4m 7ʖl^ dY8N"2۠ Q$9EfcS'6L&3~rZ@Dp&{lϙ FP B.kxsgV w 3i-9R=Zx9xkxr \ ! 4-~ĉZq$ 9On (eNOzy\Uz֚7C" _IHڶڨ 0 +Hre2c,t{C?oA"H+@A@F (F%iOy qU:*1qR .+p"Ͷ0lnC0TvdL#Xqi&f iG8Sh,vEȡo,ԛNCm0 %j+‡ɍ" `hh]'5{& #Rc??8)#د;J OB!h.0u,E{qROoذaŋӷv[M'gϞaFJ褫, ECP 0 ]]]ʕ+#2c /H+!g庱ĀffA88 Ŝb3%h%rcB)Lx[K]]/rhLNwb'"? ҁZQt+*"B'}n6Nu]7JUWOӦMCPxj%!vZj9y.1֊8(3g##1X8 14iE5kZ6(-)Q`_{ Tv~CCCA@B]ZhvUD* k}]v@Y|`ڣV_C̛(MfW3s^?бajycD hBG!LU,MQrPkȍZ ڊ` Gc/Zɑ𭡡ޢE>Pt*~`={ŰEbŊzIӦMQr]Ux\!5xp5N'8]sf^\EZm '8})idنk Lf{XSmǣ0"^MN2=K˖-kƖ-[ں&v~_DfRU裐*\1*wwwCD!ْ\%~@Dx3 :G-/+Q(b`gk̛.%l($@KU@бrfRCO eAR@c2눘oWnZh#;r2kBpR*f͚RaiӦ#Jv]n-Aނ(>uuu-ҳD@uG~|@UUbTk]'0qLЬT41]vdf坒@Nu9Tf>x⤮/~F'㎛# C6C-UL! VH ݓm4cD\h <7at9;쌈Dc6eNeJ9*Ѱ5lFR*KPU:=3m@]߲;}rܹ L5T;"ED52T-Yr̼HGZ@@G2Q*+WV"Qv'癙A}aڴ']dr~-[Fl: _њ}aL&CCCujf%8Tiȃd;zQR9&eYq[ RQfucGy)*b;uR0't8UY5~~ 3pjkQ(^h&4,[^m yQp bO}&L˚EanI9ri"ۀwFx@kVJ97d/ZGbNLE0z;Ǝ͡bHYx)բ+MXzmPl]$#a&ӝKCf\(\"@`&.]rgp #Eg…]prife}' 2 =Pn9`-屴m9G6ÌzybdTZe[9 tdϞ~D8#ΦW^uU իsmmT7DD ɷ}_㦛n|'` D8It Z@ yu CCC#<@M17Dh~=$ӴbdisDxD= 4d['vz+u 2\ zf zfB_t 7T/^ʩ7rw fR{0KblWpx( »uX+V0|v=])u*JZQ?=޿Wݠlt<M*I lv! 8>D"4 "h=Ek7O)Riя8,\{RDIDATN;0:%=D*ԷP$r^m/]zڇO?㔣49ZdhWF0ė^rSg w?%рΨ&ȥqJD{Z)6T~׿uCrz6ʪ- f1a :L)ODlͦ6 ļQbb"b",,=t+W11>8A$φܡE?A_Hb| ">S -՚F bf KD$GD[7:}))(2mi ,,bf p,"z_~^h;Cz&'+"mu*DƦq1h-rGFa 57gEil/^3?F=׹^ G: BT4OMZ˥ z| \" E#p :S/`J)0(bdj3KD*AsDDH|S?4}^sb^!bޝ@Lx-i&'n-[NJ Xa : 1'Kpݝ5$ vlWΟ磬-*e~:Ĭ B7+$QHVCY-_@B"Mz@3' Pa"$!EQF/[DDLӂ(*^F #DO=ǙO]LDA q'yu-GAAHX\ |p*)'ve˜KX0MC{qNt vRTF agWDw/X! .+ } iJ ,itDiL@y0 ѠoU$7xضe˗Q]r<b@ Dr:0J^&q:}7`hH XkW\D[0lMf9Ã̰VzU~( i yJ^¿9)8DM:Di jsȲe˜^dΗ4S$JEr`鄦v@ 1eGxTvٱ;x C(`PZ&SorE y%*G<7 ?vnq,Tt3 DB24K ZkYs!!Wi{ZvAKZ- S]Um\CRDPd E业$QA8??_滽p~կQX򢌈t)Q`ȓHYĦ:U'PH*be HI9fV*30ucM}bb"͞={yMaDS+0xPAث*QZc4 H]V]tG婧@? .UԈ#`#V%e;N,ֺW@_ݝ $`]Bq7d1w0 ;ѣGOx1upW^ye Xc˶JDFSDl t  %,iY>??冪W_}u9YkQQXE{8m"b3Sjz* M`քY!<=5"l8,gp!3wFZB]UI ' RE-PVKtH,Q*8f&e"GDq!5]U9z___[ ժ!{fiOXc[؃L7KB WUh=[!f4??2FW^yeӳ@40QTQEFu9!#T d]IDhvEcBf/0XF,{b3#N`Az&&&088`n,3QR5kDbD~l zg:a:SWfK޳͑W x9%(nYXH(ꌤ+r.f I5̀ilO;18hOtBsI=R:2ÎY"%HLjZ#""F֕52ƸG}e_ovL&Sd2ފ*8V`Dı: #G/w/%B2$g-o!ۄGbrL ݵg-taaW}8{RTe+e. ,X4xyl̑jWRgb{=f#Q)/'AIXW4$ C$I֣$V[Xw$A6EЇI$Z C= ࠬ9ZJ*ai.Hрٰ7 "X$z]='$_>%PPÃEQbU5e4xÑWOZ =8Ø_j;ό(I$A-Ih|2zp%E ԄMlK֒"WukT[ 'I 0&b40^z=Ҁ|_o<AƘЧm8A'kƍ|1Ec>NRў={9ouz펻-#v!KK⭵9k?=&3Cs@K+PS)T*FJ34`:UvVd2ZT(ɘ0 M:ff6Ap9TuM$I"Q0;X[[ݼmQt:唦iEsgEpߵkЗ]Hh~~/=<ttthww...J;aAZXX;v裏>}}}gm[zhbbb&qj˵440HJ:V&iz!;4ݺ.ϧ]y/SÃHw殮%Z[[nmm˹9=2N(+sk{,,,4K288ȭ~{v}-'@8e=ֲZu;圖I^y!8tQUahsy:zy^iキf3JymmfWN62~m^el;6ۼvmyl*cUƶoͫFy%P.F]! |; 6 %0@\Q)<ɵM]AVw{uP*zAQ0 Lf w2۷/<[4|_Mqut{0٨ }[ x}(xKMӝ)(HZ~ aHc'??s c?.U} ȽT.|PxQ*M^ 7qaqzpGm=_¯xk;[9#~Q*O@3| d/, wVk|| D6r]~kABFD ϔSfGb @*1埁ݒK+ `  eGNU*zaji=l>›_r<^)\n_,L|; ~`(;vtgpH\o߾hȽ^hڔ#G.}&#l>i=&?R9~@peLO~^774Ho)LX^>z=sUwGB! wAn^;rp+/V硡It"rxB;@ {C.7r8< oF[ ׭Gc(<ß*]VM5'bz`+nm=m:< z,@™t?ozz@ o@qx>nW*JW{CCCϋ24tKӅgCřC{ ]ߧSbz28m'9==uxm| ^T+%h?0>>B|Mic/+y@oT?ŏo^3iT j]mN@/S6;r\o<7s6!_d#W4gӿ@!]Dԝy||\p6 i>K9sAuxgEpNˑNR44Wr#@;Et VAu <$dmKzAҝQ*W\Npfˍ=T*f? 6#m755Gz|87:b8WmqZ, i RCCC+r!"sڝ?8\v錒VGG%:/mOQmT|v=`'RPv)L6V™P8QڐbB$@.{h4ɛSh::-AT9N祈`/[佹-',f&SNjoUr7ޛr.ϸ;R5Op-"i :By c(vigf@rጝr (e6- op1CY(K6-V@h:gn{'x7Tyj˕i87G~l[< 3==xX@?!*q$}S43s[>ljp܊\.W"5T< Qn R> '?0]PRѯlNaOk(󝥙@x;) 6lz9TJ"#_!(''y[,o}Hvˤ Oz׶&|OEg궩K"~R:8I_P& 榧_qS?>O) + c/cjr@jo=xIR7Ksrªwo-ĝ̵~+>]*V[VoL788g_*ҝQ%Ǡ_lkf[/ image/svg+xml systemtap logo Andy Fitzsimon, Red Hat 2008 systemtap systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/warning.png000066400000000000000000000036251356460210500305200ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh]lWww޵wg㴉T؎Ǝ !4 8Pߚ`C RT}!g) }HHRBRQƖ? "Bhשϙ쮽3; 4{{sW}֊HІ[JB˅z:Xu͟f2+Wᡂ }{%i S1Zl}rQrQyo5ޥTQ28=>g?&| XM~0t?ҫE:'qɏ>!b@Qc=Oھ%to۾;x'z/,1xEd^<&?vbl&i m֓ %=BaϾsO?Dx4<zӶCB݇wMOX" js|<a4F[]ca6x޶}w֎2lcaJ obC2RDj{ w| %jԵ+ox h |u5zޑ<bU@gGobD|d.n"V ޾]GGȋ(Qqt^4Jl`N`,7D{N־zv,FÌ`}W ErKK'񂖱DMlE:D8]/*@BM~l2V,KK{FLz'涌է9IJZ'cEXA 6YZȗ歷Nu&=#n(}WEyz B"_AwLc-Bzɤ}8F6`/R;>E@Kyd: ۪m PO5wo2'Oha:Hˑ 'y`Ʃ&@!ܙ>hאMy@t _ >LʻNԇj6-x@ˤc>`$&9@Kx-vT)!nT$1Ed"F4A kRȆI6`؇} ޿ݤ,=!\?dk<ځ\eqC.G|ɹG p % ع8cph˒/Vehk,Nbfw(*e d ??Ɯ ټ1ټTX;5q[Fgo<,piw-ߜsaR;–}(O{㋭nhk@T#ǖLޟG%Qe{,R._%: bK95q*W%.͖}i*(tsՂ S%JTtg {kWްE+Hfg"V_/0Ƈ ^G{Tڪ۹8]9}%y{h}R-b*?Ce÷In6"–M'BH͟a~֌'UnjnH^=TbG(FhA͏`,1w % Q-P' *ePP-З¿kKEx1{f[+3Ց0|' o_oH.<8#[-CQTQ<8#%@S\忮$TY~i#foFVw:pCL((g&00EXZ^ռsOǵɰYukAțoOƫ3bIENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/warning.svg000066400000000000000000000127441356460210500305350ustar00rootroot00000000000000 image/svg+xml systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/watermark-draft.png000066400000000000000000000614251356460210500321500ustar00rootroot00000000000000PNG  IHDRߊbKGD pHYs B(xtIME !? IDATxu%ewYt%۾! Np $$Xp.I  C^,NpiXpfx xx)}V !_?VO]//f/%B!Z'+[#lZ_.13}룀7W׀ׁՁ݀U|ST`6VwD.6!=p^ 毥ϻlR:L5~enq`A:5o,0e*緽, BԾ>lAuv fIЅB/ ͪ>88>ѝ !Dop#R6n[t!-B7x;/_Wn>}·T?Ip3@!Z./K샀#2fbJwY3t!B>8ذϳFtI콒] lQKN] ]!zb< w)+kQOw2ڮ.,t%B|,]70fg/wrJνE:g5&k ]V%q1_8X̟/')A.x<ߛV9(``zES!DCB>7|N,׃f@.J"a(n~.%a4-Y+! !Dх|j4ʯM'oUCx +kr=h]!Z)ۤY99'p^0{3H`&`vz]!&KTD|`i7(IN9X/!B.Z+y'=׺/}&Y``6NmM!/pM(``ZW9@0;_x [O +$B%3/J܎~uQx6z  fOٗc7aYsW- !|p=S;ډs6pheC` 8˒-z lG0Ѕ5ssIM361Oq3;q%]-j`6hWTO !Dy؝)] :%ƣ,)z h,[,F KЅU[l)h- _. fKπ]<$BJ we f``vpʲfUq;xHr BGJkzz zgMh=T_ f$n\|! B>}0 pf0ۿ1V8X`` = .(,_6Yx3;U9S1"mlkB.Z*e{NfḂ  1ْϳ̪;ꡚ !D%7@ۺ̟?f;OSz'<4\y~쭂I~l*kEud`vz]! 4xJJiMf'7+Ob4[n_N~W.MlRڣ[C,~$n5J0LNclb.:|F0{ϤsxHމzʣHqBfx41kne1;j,}oWCV 6$/ (裁𭇕ً{b6㯇1TӴ[淋i.hp-f붨opc=ǼV5|woeε*q5"6σ ..ILfŗCg|ԯZrcv<R풿OGe㎸ZX}X$)P<Ҡ9Y !:x]ė/k7XXׄq-G[ZÁ,$musOQm-xZړҎ,+8YY1cfBvI* /\gi6YҚf V,=i4sJЅe}s*rR>)`{\BӚV`Sڶ\DNA$B$˲;86m355C^Gs fcxu`ς^~۟gw bY7(CE|9*(4`p?9qڂi^Lx4CB! n;[cOH3Zfm57~mpjă_Ux_N xɆ̎(X{Bv;h ' y?`Zr:xur̺ef_ʋ=QFp|npe6߽e 1l}pn)f|Y NTIvt!Dd ꙩ*Jf}sq';ٲD¿#bM㱸1 b l f/=g1n-Pm: 10qh`ɹ֢oY W3y~t}}Fߗ\gQX/s~ |[T*&Uٺ7wMkp&`m}%ՍO?БڸlT֎a#\vpMbۦVg{#`vWӠ^>& 5C )ɕy>˸{Je줢y,;=k+fϦ˸ygׁ>YmB ߩg0K[U g\gQ8ݯz7%B_gb,3uBɿۖSm>.X{,Ƴ`¢K+_ge1OY 35~{47wB6k"m4D;t!D ׀,ƃq_Syl`zgz,nrfbOЯENo?VJ"pE罒*'FFkiu 7 !J6^^:G)ڮx6)_vj5.l+8$!mAջo8-Tu^gQ8?_/ ㆌ(p-"c)QGI{̏S/ e1 zIw{)LKuKj˒Wp xz> !Z=X5ִ^^Ӛ>P. $2,i@߽ Qg{ܜ~QZ=,3>m`vZOG$Bt Ռ9䢂5j<|L ̀[—~jُ 4w3*w;3Y.e5@4ʃlPcl~,Uq ߺ=n fwK}2w0̾J+#KТti||_^.h)ă|7%H0;pI~(mkj}l{`&_U8``6:of'xn21EUk J4<-USn+껞:6IЅM6ӚZ2P~R2?WMVGX}H0hiMS\\Hu -`k.r"U[〛(\]Z1lf Νv^&̵*kۘ*yZ.h/f1ޝD`v^sv9 O0{O Vvu V:f``ߗnóuc v/v Ytߏpm}pz,xJӃir*=`{g{ϲKeCfiyF1x,}F~ԵLt&o{䑪vlzQ:!}uމg6mt!,aVhB}CZXv+^ST5lj8rWOPn+Ocrt0{ s+YC e
    #>;PI*]m9ꐴy>3x=("mL0[?[C=I(.*G Ѝ hвK_!/YW[W9wNb b1 8 !Sz<tS|LwkpJ~EIYy8s w%ss.wwrL|⯂x{8%w݅|$X쿁kp*}"d1 1M~Hɳ_d1P~~L[W_ fP_Ewx6+/1y0۬Hb8]㉸v}S$]ͩIl{0ou';*i6/2T/ÁM:au9LYGf1n,AB7q<>m%d0@m'qG(P:)TϺl$ޞGO#xZk9hTr/LY،'Sk[<>â<Ŭ Fi|ԒNb&p63_-]Vpl,KqxZV)UG݅9۬S/.0$R`iZfWj(Nt!_ Yknoǭld$%wQl!o~-G18[$1b2`TU Mxr*r$Gu>V@o1`#1뾋<'>Ʒ\>J~=.Ng$3/;%+%%XUnVP3 ͨm03k^R`vh'uχbyHk㡙ma1_(ӡ]pό[J~t6{XU^Nrß3p;V1N0{Y.+w?q?-iݧrUh8-djƗQb@ س>})qc|8\.{}sQZX||p0h9ʻ`Jh)Q9_ۦ)쨨9~0e|XKE^,pK!9{3``mi X倧S̀V7~M,b'g}e<:%l9yl~E?_vWp{`{.-"cZx?#͑ixolS[tڇ{ <9Uzyqi׾t & nrf%eu,?Z,< \̾Exir*<З hs,a֭H3Ÿ-ϗ%/UYV+s^mTͩȏ}5i%袵|x`-r,ҋj`nPxW['x-8 +B f{h\ _Y="'vGC<Ӧs Cl nRυdzo> xؼ×ӫe:|jϜ~7^'It0| G욡>}Ó9s*[|_eB˱ݷj;߶^KuOi^OK;Q{HwS|TDWK/ =EG3K +9E|~t|4Y1"'`I/oaik5Ã,۵Jzh˖v%fO/S]IYU&T`vroõZO>o/ҋÅ2-h]Tzg*GpOcPUʵEu zxC7 f6Z`6)q?:]٥Uz&JY|N~: vV n4C-|L3r*C w#^-A}7NȩQ)9q{rv0[0tc&2A#4ZjpWO<OY_(d]㩖 fg&6l֡%-=cA9p8.sBjy[om:9+`/m< L6+ ?\yLhs,tl_">>'X.Z[.Scs?u =ݾv fn]#u5ҪaErJ~N:2D2=1} žpt|0Rq7ySw{YcG~ 2 _!S=Sgx;a"F͢}oLWpY#p@/˕5C5{#k5+@H`o~*^Ktr)v f.ۦѸD}bzyπ| 8q$qxR7*C=]| y&v"X}f]iM'דcŸI0{^ ^x5otv0Sg}jho`r4OO hTOݑO..yg—Ld/`o ˳/Oe1n[[ &Utzi_5"iTfj=STx .!LsBfx`scf^ f;硸t;rY7na _z,L4j=`&f-t|4++"KYEG,i~&&ooy Y_e6qF8ptW؊{)GP[F(>bI8ƭ/ fGT(kqRs},[TK _i܁z3%0gyz.*R8,Ax܀=ڍsyF(d!Ab ^r,>bI{[iҤSXdLTK nSlSZ} H<<ؗPl 6Ʀ@h\oyn/X^_ ۴II\'!A-{1y-/KB#IHXbgۿG%b/F}[as4nt ,Ҡ޿}ltS194+op󊔓;d htnK%=5,^<9hNEK㊴XyG"Z>e?2B_3`=|iټ֠? ̮b||\NÃ#mH|MdzWM/7ݗ,}]~w\V.Z/mc1 7/4i_`}Z$6 fNNmݪ7P#X`GoAl"(X^9.[׿J"~G0c۶FSH=-w==Խ/1ǔx#/V,^orm 4jw pV0{9w&<ʩT[9``62qL|"0cgGY⁄>nN%wП|.bF,x Yqۃkp5JE>[щ4bӌ/EG,i HX{Э>?v^ʚ3]mRݚnL nh|+B"nNb `)``vyVfy~xefi>KnT<ő躪=#ao\,kb{Km+>f1OL?]=fN+䴴U{|H`vtVrw=ƜUB^H! _6b[X1oO8 {%L[xN b- qt|#Kg#K88`PNifs ps0 !A-}]rkw }xaYO`tZYC}-S0<\oµ6ۘToY܎ֿʽxKmK .§oȱŲ49k-G%?kbXܭ(UƜmCށ>KgG9;$}TCL)_f$yDJ,nQG.'j<|7^1gs[' yWO?/>Qf-{Sو O}ZQuiaX1Y~%ܗzjԾudAz|::xV 잂9'2ٸsB޺+Z"ͩ=~/RW>ĭ5[>q+R]0aPy/NXдKq-`sO3&e1/^y?NlT㻸V#+2K x`Uu_`7ܘ'9.nzFZQ) = g1ޅfMwU\G;9ʏăt M0~ka.kBmq7D0۫`b3<_ss\H[pK&_LB\`mw]Ix"r*)``c0F[Q+C[73RQ[8qܭ7G q_c6,مesFG!T'þhr-FgC7io'KÊ,=½fϩ؏Cˋf*$=QJ;8d4#m㯔O`G6p{;wJ؎/-+m) 4#|I4?'Q:<, 8/y{-+su_BNfiЯDeD{%-C.LJve KB~{7mei2u.mYEO/bWQ5{9 fk?0'[y~_6|ɽ/fP=ު3/й5s29i^c⍸e=}$ոl'Byv`vk2>D~b|XU[ Bqwfg1۩Ui=w'Cr;NTK)I0Of WH+1Tiu>hɽ}n:s_Ԣ#1ofG'O{ORKRo7gݞZ/cδWz!bAnAQ`rfphj`hos`nE}65n$@0[3om84_mb\!,< Ь94tmYg1vOjbnvFNb>8/ۚ|g;lŀUo48Ңb'?^ oH*-PQ+/MPܿ{\TO k`M;e%g/+U`yQ^dWWnbc. IDAT_/s9YgGs\h^_M:CnrSV 9Ti4}f?ޤy[ݑ`^ msy-)\ohfh,ƽhy } fOt^p׫[qngË򚸝99 885Tw U36x-cڇ{ gASoԟ> "z,?fSՀm--&V_-+Xy^fk zDhO%zw5MK/6IDvf:!o)]̩p3٘dӜ,x,U0B^P1GcKk t]}p%=8ŏ1O7&}Fz4Io!h_G#b?. f5YVj\O`0 wLق VDB+-'ٓ{VWģ-Scq{?ό(_`2) fWZ6je"`}s*p8`6@xƪ[(oo[ zE,J4og>op ][X7}`rZ7[d<oqffm;^D^x5ݿuGZYUz0{$&z!y m.}G y< mE<}+EO7&gw w\3z)LpQ):TAx7o<@@4} u}A#}ӂ(6 Բd19YVy>z^L9lT0;w!ۏɻ>O(r$B{5%qt)UW<`4n'[&A Y| ,̮+i4J0.}GIH{,aY!7O>OQw눅ފ0LJmH0;-qW' kO@KG5 =Ҡ[+G,s&r}7ZQ+##k,ƾR/p]7 ?}ZE’{ 6n.p=pc0Ԃ='} <-s{ܓ>Mc˗MOc KoBjA^xZc_g1~f!<,y ve0:'g,-3UsʴjPs`$Pv`(xMqW tv&sC&oXMx24l !A':E``v{ M3Er/f{>IiB`8 |ո^7]̶nWZ} EĂ5o)Nɍ<=WT5ub^Y`6**7`pA < p@u}l,+o{{VD zA 1^e.`w}0k7~V~oN~yוM:mK/wYm F6c1]pͧz~,r,yRrqZW},jû[S75\אQHB/qoM`Ϝ-``\ zt=#s:~D^uю3Ŗ^֤T?b=`d+YK;U5hVƷ[Wne(1_xwECↂBHkbiv9ej:|T153aըYS%Z|{\5BMQKtT_7M|p-]xV3 `vj m{GK02~[īҬrNNu]YYvn^" ~g0s9kBq_,9w`3|?y~~wLŃY} 3G٪}C@kCܸ* B^_כj098vNm7wʓ-j<cx8E7fmYX⣁?TWÓ='1[ z?.d`[R&˧.M<_v]CN4G*}`619 #5d/Q~?U^P+u~}40o0r;\9ƍj4[Yg͝-= m5o$s^p;6H9Si~ގx'HC1E/滁qu~wjglB0"i6J`W``c07+ u.ϱKLN/7{;_|; ਜԿ z^ݕu~`p5 Dj&xH<yֻŸ`<`m 29ugLeաJFN?C"`As㒭B38΀[7`#p|Uj tfO&$wŀ;ll3ن{p/zߙX|;8!HF#8ʠ:f]Y 0("" k \"[$J{}h:UUUsNNz~wH _Tf`.5{%EҧkS2cK*";YN2ڃc(R:Hi:0Hi"Ӏ-|Ypj?&V`&fZm<&c6,RFD3nY?祈ېӖsKs}b>DUFHPDIxe( t,UOtV{9͌n֤luڟFL|QeV_{X_N.Rzoz)RHDrFMov\\t{-0|- Oh6ѪYϝ28ֳAT}{wν̫eMAH8d@}6q9<2m:9G˥j9Z4ހs-k1 thKֆ9jRmV 䫕9P:KM- 'Fug_-sn%_jGG$84'9'GUxW]C%UDg)-@|G)ѝ|EeTt{.WU~P}oR1J0P|1 ܷf_C1f?3z[-N`f"0qՒII'*Fo9:;H5 <֒ו9Z[h2痶OW=vKj%FyػL0/s~euvMOM0K_1׮Jx_x[ݦkZpEuH2j:H#-no;g/$?vlBTLH:֦9{eMo!f_]2/ Ab p1F)m:X{܌{k+6ػ9C=Aȍ-lLD_7ָ"=&1Wu7Y@Lzl$)G['9侤S9Φcs˜6I?iƫ 37%j赚&?Hibs'ҁUeļt=f KMQ?=tvt[m]H{+S#L1&9Uu0Q}XXزHsI8mO1@ n6*u{KҵUFSܿv%.'U 2IljÁۈkt?)]'T/?O*Rz{iu"5Oߕ< ]&"i ڟc9bݗ>GƎf5߁5߀/'VY$ɀ|݊.n6} 8}O-ĐI:&n%,DnX@ Z$8/SdJ?Z/}Kv*R6Dս7vɅuc]O沵|HT_mަCf1s'y˜GTO0?^lZt\=|/lD\o5zy10H6n.E v2pY`jJl"̿yDYKtI2/@2a~+`:Hi6=>U*Rz=RONRJGK`4-R:m-ވΆn 2D峡mg2'`MwED#"ɀ_} ?)ĄicqPEJ[4+VAIJO6i*Rޓ{I.'oS!ɀ߁} ')^ϱ)6V$R~^ +^Ìj`.5{l~ $'V`_vM;9|h&&ivFuUttC+cI0XpJҳ j4`CdkcUpS$=52㩿 k>pLzhl\wAపB$t:X3ߖcɔׁo̹"/%*=gVIݴ`+Rӫ[=V1m.4S`^/ɀ/m x0U lץ~1|^;6R :4HZZro_9 wO$Ey ^U9Xc-)O$kwkiN,R:WnB0Kʜ2jx͸pG$ 3\ZHd't8Hiv倽 vLj{)Rr]Rz{|شſ_XZ{[_MDB+zii.5\Pd}j.T*s}'hqDn)epIe+ *MV~SX2&f)s6mj"=O_D\#?op'%ՒzCP&5db9[#~B@Ku[q::}=v1{_lwZT=tu3@̺nfGEJ:b=["tEJOxdI2kiҜH)kY "mҰӹ2WeMohԏwL ,4"]ύ49GwD0x]Π{/GNsItuңp V"|-/#.+l|b" =t$;'2ϒ&֓_ԃ{2O$Ŝ1<K䠟#ɀ^Z"o~KʜW>'͗5HssU$ɀ_v*wEJ,by#DYӵ; 1ap("AHIt'ImEH k}#oѡ&tIrN\wBIt# ^9E eUJ鵯I_꙯ԡ`"3ʜŲ P`{p[PZիy Y`NҹeWuL{z5qZ)_LF x2O9oG]ķwgǁ 撖ErTѓxwuNEJ` Na=> SW/I*ܗN|Ab]=|q1DZn6kKjhwzTIZ9tNIeU{.uNwMs7"] d@_j-R|.pOY2 z=3hBߏsi``"_x$I󼆾t9ՍjNm4i;2Á/YuTbLsEJyHҒޣʜ'9ˇ h)^DK|S jYYĒP!֧oXM1C~18:gw)-}F syarߏ-sMuxHiζJ imbWo}Ryi')=!I)/Od8۫[l ukd5,5,BL[PժrcDZʜ KE7êWG$5\H <`RI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IZܫmB{IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/yellow.png000066400000000000000000000002571356460210500303640ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<,IDATc'+???K]?2?^Y2`$IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/CrossInstrumenting.xml000066400000000000000000000277231356460210500265650ustar00rootroot00000000000000
    Generating Instrumentation for Other Computers cross-instrumentation building kernel modules from SystemTap scripts cross-instrumentation generating instrumentation from SystemTap scripts cross-compiling script from here: http://sourceware.org/ml/systemtap/2008-q3/msg00310.html kernel modules from SystemTap scripts, building building kernel modules from SystemTap scripts instrumentation modules from SystemTap scripts, building building instrumentation modules from SystemTap scripts compiling instrumentation/kernel modules from SystemTap scripts cross-compiling above; add short description, significance, howto, script (test first) When users run a SystemTap script, SystemTap builds a kernel module out of that script. SystemTap then loads the module into the kernel, allowing it to extract the specified data directly from the kernel (refer to in for more information). Normally, however, SystemTap scripts can only be run on systems where SystemTap is deployed (as in ). This could mean that if you want to run SystemTap on ten systems, you would need to deploy SystemTap on all those systems. In some cases, this may be neither feasible nor desired. For instance, corporate policy may prohibit an administrator from installing RPM packages that provide compilers or debug information on specific machines, and thus prevent the deployment of SystemTap. To work around this problem, SystemTap allows you to use cross-instrumentation. Cross-instrumentation is the process of generating SystemTap instrumentation module from a SystemTap script on one computer to be used on another computer. This process offers the following benefits: cross-instrumentation advantages of advantages of cross-instrumentation The kernel information packages for various machines can be installed on a single host machine. Each target machine only needs one RPM package to be installed in order to use the generated SystemTap instrumentation module: the systemtap-runtime package. For the sake of simplicity, the following terms are used throughout this section: cross-instrumentation instrumentation module instrumentation module cross-instrumentation Instrumentation module — the kernel module built from a SystemTap script. The SystemTap module is built on the host system, and will be loaded on the target kernel of target system. cross-instrumentation host system host system cross-instrumentation Host system — the system on which you compile the instrumentation modules from SystemTap scripts in order to load them on target systems. cross-instrumentation target system target system cross-instrumentation Target system — the system for which you are building the instrumentation modules from SystemTap scripts. cross-instrumentation target kernel target kernel cross-instrumentation Target kernel — the kernel of the target system. This is the kernel on which you intend to load or run the instrumentation module. To configure a host system and target systems, complete the following steps: cross-instrumentation configuration host system and target system host system and target system cross-instrumentation configuration target system and host system configuration Install the systemtap-runtime package on each target system. Determine the kernel running on each target system by running the uname -r command on each of these systems. Install SystemTap on the host system. You will be building the instrumentation module for the target systems on the host system. For instructions on how to install SystemTap, refer to . Using the target kernel version determined earlier, install the target kernel and related RPM packages on the host system as described in . If multiple target systems use different target kernels, repeat this step for each different kernel used on the target systems. After completing these steps, you can now build the instrumentation module (for any target system) on the host system. To build the instrumentation module, run the following command on the host system (be sure to specify the appropriate values): stap -p4 -r kernel_version script -m module_name Here, kernel_version refers to the version of the target kernel (the output of the uname -r command on the target machine), script refers to the script to be converted into the instrumentation module, and module_name is the desired name of the instrumentation module. Note uname -m determining architecture notation architecture notation, determining To determine the architecture notation of a running kernel, you can run the following command: uname -m Once the instrumentation module is compiled, copy it to the target system and then load it using: staprun module_name.ko For example, to create the instrumentation module simple.ko from a SystemTap script named simple.stp for the target kernel 2.6.18-92.1.10.el5 (on x86_64 architecture), use the following command: stap -r 2.6.18-92.1.10.el5 -e 'probe vfs.read {exit()}' -m simple This creates a module named simple.ko. To use this instrumentation module, copy it to the target system and run the following command (on the target system): staprun simple.ko Important The host system must be the same architecture and running the same distribution of Linux as the target system in order for the built instrumentation module to work.
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Errors.xml000066400000000000000000000671041356460210500241560ustar00rootroot00000000000000 Understanding SystemTap Errors By type - http://sourceware.org/systemtap/tutorial/node23.html This chapter explains the most common errors you may encounter while using SystemTap.
    Parse and Semantic Errors understanding SystemTap errors parse/semantics error errors parse/semantics error parse/semantics error understanding SystemTap errors Parse and semantic errors occur while SystemTap attempts to parse and translate the script into C, before converting it into a kernel module. For example, type errors result from operations that assign invalid values to variables or arrays. parse error: expected foo, saw bar understanding SystemTap errors parse/semantics error invalid values to variables/arrays errors parse/semantics error invalid values to variables/arrays parse/semantics error understanding SystemTap errors invalid values to variables/arrays invalid values to variables/arrays parse/semantics error understanding SystemTap errors understanding SystemTap errors parse/semantics error grammatical/typographical script error errors parse/semantics error grammatical/typographical script error parse/semantics error understanding SystemTap errors grammatical/typographical script error grammatical/typographical script error parse/semantics error understanding SystemTap errors typographical script error parse/semantics error understanding SystemTap errors The script contains a grammatical or typographical error. SystemTap detected the type of the construct that is incorrect, given the context of the probe. need more clarification (example) on this; could not replicate. how to replicate? For example, the following invalid SystemTap script is missing its probe handlers: An attempt to run this SystemTap script fails with the following error message showing that the parser expects something other than the probe keyword in column 1 of line 2: parse error: expected one of '. , ( ? ! { = +=' saw: keyword at perror.stp:2:1 1 parse error(s). parse error: embedded code in unprivileged script understanding SystemTap errors parse/semantics error embedded code in unprivileged script errors parse/semantics error embedded code in unprivileged script parse/semantics error understanding SystemTap errors embedded code in unprivileged script embedded code in unprivileged script parse/semantics error understanding SystemTap errors unprivileged script, embedded code in parse/semantics error understanding SystemTap errors unsafe embedded code in unprivileged script parse/semantics error understanding SystemTap errors The script contains unsafe embedded C code, that is, blocks of code surrounded by %{ and %}. SystemTap allows you to embed C code in a script, which is useful if there are no tapsets to suit your purposes. However, embedded C constructs are not safe and SystemTap reports this error to warn you if such constructs appear in the script. understanding SystemTap errors parse/semantics error guru mode errors parse/semantics error guru mode parse/semantics error understanding SystemTap errors guru mode guru mode parse/semantics error understanding SystemTap errors If you are sure that any similar constructs in the script are safe and you are a member of the stapdev group (or have root privileges), run the script in "guru" mode by using the option: stap -g script semantic error: type mismatch for identifier 'foo' ... string vs. long understanding SystemTap errors parse/semantics error type mismatch for identifier errors parse/semantics error type mismatch for identifier parse/semantics error understanding SystemTap errors type mismatch for identifier type mismatch for identifier parse/semantics error understanding SystemTap errors identifier type mismatch parse/semantics error understanding SystemTap errors The function foo in the script used the wrong type (such as %s or %d). In the following example, the format specifier should be %s and not %d, because the execname() function returns a string: probe syscall.open { printf ("%d(%d) open\n", execname(), pid()) } semantic error: unresolved type for identifier 'foo' understanding SystemTap errors parse/semantics error unresolved type for identifier errors parse/semantics error unresolved type for identifier parse/semantics error understanding SystemTap errors unresolved type for identifier unresolved type for identifier parse/semantics error understanding SystemTap errors The identifier (variable) was used, but no type (integer or string) could be determined. This occurs, for instance, if you use a variable in a printf statement while the script never assigns a value to the variable. semantic error: Expecting symbol or array index expression understanding SystemTap errors parse/semantics error expected symbol/array index expression errors parse/semantics error expected symbol/array index expression parse/semantics error understanding SystemTap errors expected symbol/array index expression expected symbol/array index expression parse/semantics error understanding SystemTap errors SystemTap could not assign a value to a variable or to a location in an array. The destination for the assignment is not a valid destination. The following example code would generate this error: while searching for arity N function, semantic error: unresolved function call understanding SystemTap errors parse/semantics error unresolved function call errors parse/semantics error unresolved function call parse/semantics error understanding SystemTap errors unresolved function call unresolved function call parse/semantics error understanding SystemTap errors function call (unresolved) parse/semantics error understanding SystemTap errors A function call or array index expression in the script used an invalid number of arguments or parameters. In SystemTap, arity can either refer to the number of indices for an array, or the number of parameters to a function. semantic error: array locals not supported, missing global declaration? array locals not supported parse/semantics error understanding SystemTap errors understanding SystemTap errors parse/semantics error non-global arrays errors parse/semantics error non-global arrays parse/semantics error understanding SystemTap errors non-global arrays non-global arrays parse/semantics error understanding SystemTap errors The script used an array operation without declaring the array as a global variable (global variables can be declared after their use in SystemTap scripts). Similar messages appear if an array is used, but with inconsistent arities. semantic error: variable 'foo' modified during 'foreach' iteration understanding SystemTap errors parse/semantics error variable modified during 'foreach' errors parse/semantics error variable modified during 'foreach' parse/semantics error understanding SystemTap errors variable modified during 'foreach' variable modified during 'foreach' parse/semantics error understanding SystemTap errors The array foo is being modified (being assigned to or deleted from) within an active foreach loop. This error also displays if an operation within the script performs a function call within the foreach loop. semantic error: probe point mismatch at position N, while resolving probe point foo understanding SystemTap errors parse/semantics error probe mismatch errors parse/semantics error probe mismatch parse/semantics error understanding SystemTap errors probe mismatch probe mismatch parse/semantics error understanding SystemTap errors SystemTap did not understand what the event or SystemTap function foo refers to. This usually means that SystemTap could not find a match for foo in the tapset library. N refers to the line and column of the error. how to explain N in previous? "The divergence from the “tree” of probe point namespace is at position N (starting with zero at left)." (from tutorial) semantic error: no match for probe point, while resolving probe point foo understanding SystemTap errors parse/semantics error no match for probe point errors parse/semantics error no match for probe point parse/semantics error understanding SystemTap errors no match for probe point no match for probe point parse/semantics error understanding SystemTap errors probe point (no match for) parse/semantics error understanding SystemTap errors SystemTap could not resolve the events or handler function foo for a variety of reasons. This error occurs when the script contains the event kernel.function("something"), and something does not exist. In some cases, the error could also mean the script contains an invalid kernel file name or source line number. semantic error: unresolved target-symbol expression understanding SystemTap errors parse/semantics error unresolved target-symbol expression errors parse/semantics error unresolved target-symbol expression parse/semantics error understanding SystemTap errors unresolved target-symbol expression unresolved target-symbol expression parse/semantics error understanding SystemTap errors target-symbol expression, unresolved parse/semantics error understanding SystemTap errors A handler in the script references a target variable, but the value of the variable could not be resolved. This error could also mean that a handler is referencing a target variable that is not valid in the context when it was referenced. This may be a result of compiler optimization of the generated code. semantic error: libdwfl failure understanding SystemTap errors parse/semantics error libdwfl failure errors parse/semantics error libdwfl failure parse/semantics error understanding SystemTap errors libdwfl failure libdwfl failure parse/semantics error understanding SystemTap errors There was a problem processing the debugging information. In most cases, this error results from the installation of a kernel-debuginfo package whose version does not match the probed kernel exactly. The installed kernel-debuginfo package itself may have some consistency or correctness problems. semantic error: cannot find foo debuginfo SystemTap could not find a suitable kernel-debuginfo package.
    Runtime Errors and Warnings understainding SystemTap errors runtime errors/warnings errors runtime errors/warnings runtime errors/warnings understainding SystemTap errors Runtime errors and warnings occur when the SystemTap instrumentation has been installed and is collecting data on the system. WARNING: Number of errors: N, skipped probes: M understainding SystemTap errors runtime errors/warnings number of errors: N, skipped probes: M errors runtime errors/warnings number of errors: N, skipped probes: M runtime errors/warnings understainding SystemTap errors number of errors: N, skipped probes: M number of errors: N, skipped probes: M runtime errors/warnings understainding SystemTap errors Errors and/or skipped probes occurred during this run. Both N and M are the counts of the number of probes that were not executed due to conditions such as too much time required to execute event handlers over an interval of time. division by 0 understainding SystemTap errors runtime errors/warnings division by 0 errors runtime errors/warnings division by 0 runtime errors/warnings understainding SystemTap errors division by 0 division by 0 runtime errors/warnings understainding SystemTap errors invalid division runtime errors/warnings understainding SystemTap errors The script code performed an invalid division. aggregate element not found understainding SystemTap errors runtime errors/warnings aggregate element not found errors runtime errors/warnings aggregate element not found runtime errors/warnings understainding SystemTap errors aggregate element not found aggregate element not found runtime errors/warnings understainding SystemTap errors A statistics extractor function other than @count was invoked on an aggregate that has not had any values accumulated yet. This is similar to a division by zero. aggregation overflow understainding SystemTap errors runtime errors/warnings aggregation overflow errors runtime errors/warnings aggregation overflow runtime errors/warnings understainding SystemTap errors aggregation overflow aggregation overflow runtime errors/warnings understainding SystemTap errors overflow of aggregation runtime errors/warnings understainding SystemTap errors An array containing aggregate values contains too many distinct key pairs at this time. MAXNESTING exceeded understainding SystemTap errors runtime errors/warnings MAXNESTING exceeded errors runtime errors/warnings MAXNESTING exceeded runtime errors/warnings understainding SystemTap errors MAXNESTING exceeded MAXNESTING exceeded runtime errors/warnings understainding SystemTap errors exceeded MAXNESTING runtime errors/warnings understainding SystemTap errors Too many levels of function call nesting were attempted. The default nesting of function calls allowed is 10. MAXACTION exceeded understainding SystemTap errors runtime errors/warnings MAXACTION exceeded errors runtime errors/warnings MAXACTION exceeded runtime errors/warnings understainding SystemTap errors MAXACTION exceeded MAXACTION exceeded runtime errors/warnings understainding SystemTap errors exceeded MAXACTION runtime errors/warnings understainding SystemTap errors The probe handler attempted to execute too many statements in the probe handler. The default number of actions allowed in a probe handler is 1000. kernel/user string copy fault at ADDR understainding SystemTap errors runtime errors/warnings copy fault errors runtime errors/warnings copy fault runtime errors/warnings understainding SystemTap errors copy fault copy fault runtime errors/warnings understainding SystemTap errors The probe handler attempted to copy a string from kernel or user space at an invalid address (ADDR). pointer dereference fault understainding SystemTap errors runtime errors/warnings pointer dereference fault errors runtime errors/warnings pointer dereference fault runtime errors/warnings understainding SystemTap errors pointer dereference fault pointer dereference fault runtime errors/warnings understainding SystemTap errors There was a fault encountered during a pointer dereference operation such as a target variable evaluation.
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Feedback.xml000066400000000000000000000022371356460210500243620ustar00rootroot00000000000000 %BOOK_ENTITIES; ]>
    We Need Feedback! feedback contact information for this manual If you find a typographical error in this manual, or if you have thought of a way to make this manual better, we would love to hear from you! Please submit a report in Bugzilla: http://sourceware.org/bugzilla/ against the product systemtap. When submitting a report, be sure to include the specific file or URL the report refers to and the manual's identifier: &BOOKID; If you have a suggestion for improving the documentation, try to be as specific as possible when describing it. If you have found an error, please include the section number and some of the surrounding text so we can find it easily.
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Installation.xml000066400000000000000000000236321356460210500253410ustar00rootroot00000000000000
    Installation and Setup required packages, installation thru yum, repos (?); possibly, a script to install all required packages notes in ~/Desktop/SystemTap/aug21chatlog and ~/Desktop/SystemTap/noted_wcohenmeeting Installation Setup and Installation Setup and Installation To deploy SystemTap, install the SystemTap packages along with the corresponding set of -devel, -debuginfo, and -debuginfo-common packages for your kernel. If your system has multiple kernels installed and you intend to use SystemTap on more than one of them, also install the -devel and -debuginfo packages for each of those kernel versions. The following sections discuss the installation procedures in greater detail. Important Many users confuse -debuginfo with -debug. Remember that the deployment of SystemTap requires the installation of the -debuginfo package of the kernel, not the -debug version of the kernel.
    Installing SystemTap To deploy SystemTap, install the following RPM packages: Installation systemtap package systemtap package Installation systemtap-runtime package systemtap-runtime package systemtap systemtap-runtime To do so, run the following command as root: yum install systemtap systemtap-runtime Note that before using SystemTap, you still need to install the required kernel information packages. On modern systems, run the following command as root to install these packages: stap-prep If this command does not work, try manual installation as described below.
    Installing Required Kernel Information Packages Manually Installation required packages required packages packages required to run SystemTap RPMs required to run SystemTap Installation kernel information packages kernel information packages SystemTap needs information about the kernel in order to place instrumentation in it (in other words, probe it). This information also allows SystemTap to generate the code for the instrumentation. The required information is contained in the matching -devel, -debuginfo, and -debuginfo-common packages for your kernel. The necessary -devel and -debuginfo packages for the ordinary "vanilla" kernel are as follows: kernel-debuginfo kernel-debuginfo-common kernel-devel Likewise, the necessary packages for the PAE kernel are kernel-PAE-debuginfo, kernel-PAE-debuginfo-common, and kernel-PAE-devel. Installation kernel version, determining the kernel version, determining the determining the kernel version uname -r To determine what kernel your system is currently using, use: uname -r For example, if you intend to use SystemTap on kernel version 2.6.18-53.el5 on an i686 machine, download and install the following RPM packages: kernel-debuginfo-2.6.18-53.1.13.el5.i686.rpm kernel-debuginfo-common-2.6.18-53.1.13.el5.i686.rpm kernel-devel-2.6.18-53.1.13.el5.i686.rpm Important The version, variant, and architecture of the -devel, -debuginfo and -debuginfo-common packages must match the kernel you wish to probe with SystemTap exactly. The easiest way to install the required kernel information packages is through yum install and debuginfo-install commands. The debuginfo-install command is included with later versions of the yum-utils package (for example, version 1.1.10) and also requires an appropriate yum repository from which to download and install -debuginfo and -debuginfo-common packages. You can install the required -devel, -debuginfo, and -debuginfo-common packages for your kernel. When the appropriate software repositories are enabled, install the corresponding packages for a specific kernel with the following commands: yum install kernelname-devel-version debuginfo-install kernelname-version Replace kernelname with the appropriate kernel variant name (for example, ), and version with the target kernel's version. For example, to install the required kernel information packages for the kernel-PAE-2.6.18-53.1.13.el5 kernel, run: yum install kernel-PAE-devel-2.6.18-53.1.13.el5 debuginfo-install kernel-PAE-2.6.18-53.1.13.el5 Once you have manually downloaded the required packages to the machine, run the following command as root to install them: rpm --force -ivh package_names
    Initial Testing Installation initial testing initial testing testing, initial If you are currently using the kernel you intend to probe with SystemTap, you can immediately test whether the deployment was successful. If not, you restart the system and load the appropriate kernel. To start the test, run the following command: stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' This command instructs SystemTap to print read performed and then exit properly once a virtual file system read is detected. If the SystemTap deployment was successful, it prints output similar to the following: Pass 1: parsed user script and 45 library script(s) in 340usr/0sys/358real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) in 290usr/260sys/568real ms. Pass 3: translated to C into "/tmp/stapiArgLX/stap_e5886fa50499994e6a87aacdc43cd392_399.c" in 490usr/430sys/938real ms. Pass 4: compiled C into "stap_e5886fa50499994e6a87aacdc43cd392_399.ko" in 3310usr/430sys/3714real ms. Pass 5: starting run. read performed Pass 5: run completed in 10usr/40sys/73real ms. The last three lines of the output (beginning with Pass 5) indicate that SystemTap was able to successfully create the instrumentation to probe the kernel, run the instrumentation, detect the event being probed (in this case, a virtual file system read), and execute a valid handler (print text then close it with no errors).
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Introduction.xml000066400000000000000000000174261356460210500253650ustar00rootroot00000000000000 %BOOK_ENTITIES; ]> Introduction Introduction performance monitoring performance monitoring Introduction SystemTap is a tracing and probing tool that allows users to study and monitor the activities of the computer system (particularly, the kernel) in fine detail. It provides information similar to the output of tools like netstat, ps, top, and iostat, but is designed to provide more filtering and analysis options for collected information.
    Documentation Goals Introduction documentation goals documentation goals Introduction Introduction goals, documentation goals, documentation Introduction SystemTap provides the infrastructure to monitor the running Linux kernel for detailed analysis. This can assist administrators and developers in identifying the underlying cause of a bug or performance problem. Without SystemTap, monitoring the activity of a running kernel would require a tedious instrument, recompile, install, and reboot sequence. SystemTap is designed to eliminate this and allows users to gather the same information by running user-written SystemTap scripts. SystemTap was initially designed for users with intermediate to advanced knowledge of the kernel. As a consequence, it is less useful to administrators or developers with limited knowledge of and experience with the Linux kernel. Moreover, much of the existing SystemTap documentation is aimed at knowledgeable and experienced users, which makes learning the tool similarly difficult. To lower these barriers, the SystemTap Beginners Guide was written with the following goals: to introduce users to SystemTap, familiarize them with its architecture, and provide setup instructions; to provide pre-written SystemTap scripts for monitoring detailed activity in different components of the system, along with instructions on how to run them and analyze their output. above, Short description on the underlying goals of SystemTap_Beginners_Guide, what we want to teach users.
    SystemTap Capabilities ** Short summary; when is SystemTap suitable vs other popular monitoring tools such as top, Oprofile or /proc Introduction capabilities of SystemTap capabilities of SystemTap Introduction Flexibility: SystemTap's framework allows users to develop simple scripts for investigating and monitoring a wide variety of kernel functions, system calls, and other events that occur in kernel space. As a result, SystemTap is not so much a tool as it is a system that allows you to develop your own kernel-specific forensic and monitoring tools. Ease of use: as mentioned earlier, SystemTap allows users to probe kernel-space events without having to resort to instrument, recompile, install, and reboot the kernel. Most of the SystemTap scripts enumerated in demonstrate system forensics and monitoring capabilities not natively available with other similar tools (such as top, oprofile, or ps). These scripts are provided to give readers extensive examples of the application of SystemTap and to educate them further on the capabilities they can employ when writing their own SystemTap scripts.
    Limitations of SystemTap Introduction limitations of SystemTap limitations of SystemTap Introduction The current iteration of SystemTap allows for a multitude of options when probing kernel-space events for a wide range of kernels. However, SystemTap's ability to probe user-space events depends on kernel support (the Utrace mechanism) that is not available in many kernels. As a consequence, only some kernel versions support user-space probing. At present, the developmental efforts of the SystemTap community are geared towards improving SystemTap's user-space probing capabilities.
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Legal_Notice.xml000066400000000000000000000017171356460210500252250ustar00rootroot00000000000000 This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. For more details see the file COPYING in the source distribution of Linux. systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Preface.xml000066400000000000000000000011411356460210500242340ustar00rootroot00000000000000 Preface systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/References.xml000066400000000000000000000103561356460210500247600ustar00rootroot00000000000000 References display links to other useful, more advanced systemtap docs - http://sourceware.org/systemtap/documentation.html, http://sourceware.org/systemtap/wiki/HomePage This chapter enumerates other references for more information about SystemTap. Refer to these sources in the course of writing advanced probes and tapsets. SystemTap Wiki The SystemTap Wiki is a collection of links and articles related to the deployment, usage, and development of SystemTap. You can find it at . SystemTap Tutorial Much of the content in this book comes from the SystemTap Tutorial. The SystemTap Tutorial is a more appropriate reference for users with intermediate to advanced knowledge of C++ and kernel development, and you can find it at . man stapprobes The stapprobes3stap man page enumerates a variety of probe points supported by SystemTap, along with additional aliases defined by the SystemTap tapset library. The bottom part of the man page includes a list of other man pages enumerating similar probe points for specific system components, such as tapset::scsi, tapset::kprocess, tapset::signal, and so on. man stapfuncs The stapfuncs3stap man page enumerates numerous functions supported by the SystemTap tapset library, along with the prescribed syntax for each of them. Note, however, that it does not provide a complete list of all supported functions; there are more undocumented functions available. SystemTap Tapset Reference Manual The SystemTap Tapset Reference Manual describes the individual predefined functions and probe points of the tapsets in greater detail. You can find it at . SystemTap Language Reference The SystemTap Language Reference is a comprehensive reference of SystemTap's language constructs and syntax. It is recommended for users with a rudimentary to intermediate knowledge of C++ and other similar programming languages, and is available to all users at . Tapset Developers Guide Once you have sufficient proficiency in writing SystemTap scripts, you can try to write your own tapsets. The Tapset Developers Guide describes how to add functions to your tapset library. Test Suite The systemtap-testsuite package allows you to test the entire SystemTap toolchain without having to build it from source code. In addition, it also contains numerous examples of SystemTap scripts to study and test; some of these scripts are also documented in . By default, the example scripts included in systemtap-testsuite are located in the /usr/share/systemtap/testsuite/systemtap.examples/ directory. systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Revision_History.xml000066400000000000000000000043471356460210500262210ustar00rootroot00000000000000 Revision History 2.0-1 Mon Jul 20 2009 Don Domingo ddomingo@redhat.com includes 5.4 minor updates and additional script "dropwatch.stp" 1.0-1 Wed Jun 17 2009 Don Domingo ddomingo@redhat.com Building+pushing to RHEL systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/ScriptConstructs.xml000066400000000000000000000653701356460210500262410ustar00rootroot00000000000000
    Basic SystemTap Handler Constructs handlers SystemTap handler constructs SystemTap handlers SystemTap handler constructs handlers SystemTap handler constructs syntax and format SystemTap handlers SystemTap handler constructs syntax and format syntax and format SystemTap handler constructs handlers SystemTap supports the use of several basic constructs in handlers. The syntax for most of these handler constructs are mostly based on C and awk syntax. This section describes several of the most useful SystemTap handler constructs, which should provide you with enough information to write simple yet useful SystemTap scripts.
    Variables handlers SystemTap handler constructs variables SystemTap statements SystemTap handler constructs variables variables SystemTap handler constructs handlers format and syntax SystemTap handler constructs handlers Variables can be used freely throughout a handler; simply choose a name, assign a value from a function or expression to it, and use it in an expression. SystemTap automatically identifies whether a variable should be typed as a string or integer, based on the type of the values assigned to it. For instance, if you use set the variable foo to gettimeofday_s() (as in foo = gettimeofday_s()), then foo is typed as a number and can be printed in a printf() with the integer format specifier (%d). handlers SystemTap handler constructs global SystemTap statements SystemTap handler constructs global global SystemTap handler constructs handlers Note, however, that by default variables are only local to the probe they are used in. This means that variables are initialized, used and disposed at each probe handler invocation. To share a variable between probes, declare the variable name using global outside of the probes. Consider the following example: timer-jiffies.stp global count_jiffies, count_ms probe timer.jiffies(100) { count_jiffies ++ } probe timer.ms(100) { count_ms ++ } probe timer.ms(12345) { hz=(1000*count_jiffies) / count_ms printf ("jiffies:ms ratio %d:%d => CONFIG_HZ=%d\n", count_jiffies, count_ms, hz) exit () } CONFIG_HZ, computing for computes the CONFIG_HZ setting of the kernel using timers that count jiffies and milliseconds, then computing accordingly. The global statement allows the script to use the variables count_jiffies and count_ms (set in their own respective probes) to be shared with probe timer.ms(12345). Note The ++ notation in (that is, count_jiffies ++ and count_ms ++) is used to increment the value of a variable by 1. In the following probe, count_jiffies is incremented by 1 every 100 jiffies: probe timer.jiffies(100) { count_jiffies ++ } In this instance, SystemTap understands that count_jiffies is an integer. Because no initial value was assigned to count_jiffies, its initial value is zero by default.
    Target Variables handlers target variables target variables The probe events that map to actual locations in the code (for example kernel.function("function") and kernel.statement("statement")) allow the use of target variables to obtain the value of variables visible at that location in the code. You can use the -L option to list the target variable available at a probe point. If the debug information is installed for the running kernel, you can run the following command to find out what target variables are available for the vfs_read function: stap -L 'kernel.function("vfs_read")' This will yield something similar to the following: kernel.function("vfs_read@fs/read_write.c:277") $file:struct file* $buf:char* $count:size_t $pos:loff_t* Each target variable is proceeded by a $ and the type of the target variable follows the :. The kernel's vfs_read function has $file (pointer to structure describing the file), $buf (pointer to the user-space memory to store the read data), $count (number of bytes to read), and $pos (position to start reading from in the file) target variables at the entry to the function. When a target variable is not local to the probe point, like a global external variable or a file local static variable defined in another file then it can be referenced through @var("varname@src/file.c"). SystemTap tracks the typing information of the target variable and can examine the fields of a structure with the -> operator. The -> operator can be chained to look at data structures contained within data structures and follow pointers to other data structures. The -> operator will obtain the value in the field of the structure. The -> operator is used regardless whether accessing a field in a substructure or accessing another structure through a pointer. For example to access a field of the static files_stat target variable defined in fs/file_table.c (which holds some of the current file system sysctl tunables), one could write: stap -e 'probe kernel.function("vfs_read") { printf ("current files_stat max_files: %d\n", @var("files_stat@fs/file_table.c")->max_files); exit(); }' Which will yield something similar to the following: current files_stat max_files: 386070 For pointers to base types such as integers and strings there are a number of functions listed below to access kernel-space data. The first argument for each functions is the pointer to the data item. Similar functions are described in for accessing target variables in user-space code. kernel_char(address) Obtain the character at address from kernel memory. kernel_short(address) Obtain the short at address from kernel memory. kernel_int(address) Obtain the int at address from kernel memory. kernel_long(address) Obtain the long at address from kernel memory kernel_string(address) Obtain the string at address from kernel memory. kernel_string_n(address, n) Obtain the string at address from the kernel memory and limits the string to n bytes.
    Pretty Printing Target Variables target variables pretty printing SystemTap scripts are often used to observe what is happening within the code. In many cases just printing the values of the various context variables is sufficient. SystemTap makes a number operations available that can generate printable strings for target variables: $$vars Expands to a character string that is equivalent to sprintf("parm1=%x ... parmN=%x var1=%x ... varN=%x", parm1, ..., parmN, var1, ..., varN) for each variable in scope at the probe point. Some values may be printed as =? if their run-time location cannot be found. $$locals Expands to a subset of $$vars containing only the local variables. $$parms Expands to a subset of $$vars containing only the function parameters. $$return Is available in return probes only. It expands to a string that is equivalent to sprintf("return=%x", $return) if the probed function has a return value, or else an empty string. Below is a command-line script that prints the values of the parameters passed into the function vfs_read: stap -e 'probe kernel.function("vfs_read") {printf("%s\n", $$parms); exit(); }' There are four parameters passed into vfs_read: file, buf, count, and pos. The $$parms generates a string for the parameters passed into the function. In this case all but the count parameter are pointers. The following is an example of the output from the previous command-line script: file=0xffff8800b40d4c80 buf=0x7fff634403e0 count=0x2004 pos=0xffff8800af96df48 Having the address a pointer points to may not be useful. Instead the fields of the data structure the pointer points to may be of more use. Use the $ suffix to pretty print the data structure. The following command-line example uses the pretty printing suffix to print more details about the data structures passed into the function vfs_read: stap -e 'probe kernel.function("vfs_read") {printf("%s\n", $$parms$); exit(); }' The previous command line will generate something similar to the following with the fields of the data structure included in the output: file={.f_u={...}, .f_path={...}, .f_op=0xffffffffa06e1d80, .f_lock={...}, .f_count={...}, .f_flags=34818, .f_mode=31, .f_pos=0, .f_owner={...}, .f_cred=0xffff88013148fc80, .f_ra={...}, .f_version=0, .f_security=0xffff8800b8dce560, .private_data=0x0, .f_ep_links={...}, .f_mapping=0xffff880037f8fdf8} buf="" count=8196 pos=-131938753921208 With the $ suffix fields that are composed of data structures are not expanded. The $$ suffix will print the values contained within the nested data structures. Below is an example using the $$ suffix: stap -e 'probe kernel.function("vfs_read") {printf("%s\n", $$parms$$); exit(); }' The $$ suffix, like all strings, is limited to the maximum string size. Below is a representative output from the previous command-line script, which is truncated because of the string size limit: file={.f_u={.fu_list={.next=0xffff8801336ca0e8, .prev=0xffff88012ded0840}, .fu_rcuhead={.next=0xffff8801336ca0e8, .func=0xffff88012ded0840}}, .f_path={.mnt=0xffff880132fc97c0, .dentry=0xffff88001a889cc0}, .f_op=0xffffffffa06f64c0, .f_lock={.raw_lock={.slock=196611}}, .f_count={.counter=2}, .f_flags=34818, .f_mode=31, .f_pos=0, .f_owner={.lock={.raw_lock={.lock=16777216}}, .pid=0x0, .pid_type=0, .uid=0, .euid=0, .signum=0}, .f_cred=0xffff880130129a80, .f_ra={.start=0, .size=0, .async_size=0, .ra_pages=32, .
    Typecasting target variables typecasting In most cases SystemTap can determine a variable's type from the debug information. However, code may use void pointers for variables (for example memory allocation routines) and typing information is not available. Also the typing information available within a probe handler is not available within a function; SystemTap functions arguments use a long in place of a typed pointer. SystemTap's @cast operator (first available in SystemTap 0.9) can be used to indicate the correct type of the object. The is from the task.stp tapset. The function returns the value of the state field from a task_struct pointed to by the long task. The first argument of the @cast operator, task, is the pointer to the object. The second argument is the type to cast the object to, task_struct. The third argument lists what file that the type definition information comes from and is optional. With the @cast operator the various fields of this particular task_struct task can be accessed; in this example the state field is obtained. Casting Example
    Checking Target Variable Availability target variables variable availability As code evolves the target variables available may change. The @defined makes it easier to handle those variations in the available target variables. The @defined provides a test to see if a particular target variable is available. The result of this test can be used to select the appropriate expression. The from the memory.stp tapset provides an probe event alias. Some version of the kernel functions being probed have an argument $flags. When available, the $flags argument is used to generate the local variable write_access. The versions of the probed functions that do not have the $flags argument have a $write argument and that is used instead for the local variable write_access. Testing target variable available Example
    Conditional Statements handlers conditional statements SystemTap statements conditional statements In some cases, the output of a SystemTap script may be too large. To address this, you need to further refine the script's logic in order to delimit the output into something more relevant or useful to your probe. Do this by using conditionals in handlers. SystemTap accepts the following types of conditional statements: If/Else Statements handlers conditional statements if/else SystemTap statements conditional statements if/else if/else conditional statements handlers Format: if (condition) statement1 else statement2 The statement1 is executed if the condition expression is non-zero. The statement2 is executed if the condition expression is zero. The else clause (else statement2) is optional. Both statement1 and statement2 can be statement blocks. ifelse.stp global countread, countnonread probe kernel.function("vfs_read"),kernel.function("vfs_write") { if (probefunc()=="vfs_read") countread ++ else countnonread ++ } probe timer.s(5) { exit() } probe end { printf("VFS reads total %d\n VFS writes total %d\n", countread, countnonread) } is a script that counts how many virtual file system reads (vfs_read) and writes (vfs_write) the system performs within a 5-second span. When run, the script increments the value of the variable countread by 1 if the name of the function it probed matches vfs_read (as noted by the condition if (probefunc()=="vfs_read")); otherwise, it increments countnonread (else {countnonread ++}). While Loops handlers conditional statements while loops SystemTap statements conditional statements while loops while loops conditional statements handlers Format: while (condition) statement So long as condition is non-zero the block of statements in statement are executed. The statement is often a statement block and it must change a value so condition will eventually be zero. For Loops handlers conditional statements for loops SystemTap statements conditional statements for loops for loops conditional statements handlers Format: for (initialization; conditional; increment) statement The for loop is shorthand for a while loop. The following is the equivalent while loop: initialization while (conditional) { statement increment } need simple, simple examples for FOR and WHILE Conditional Operators handlers conditional statements conditional operators SystemTap statements conditional statements conditional operators conditional operators conditional statements handlers Aside from == ("is equal to"), following operators can also be used in conditional statements: >= Greater than or equal to <= Less than or equal to != Is not equal to
    Command-Line Arguments handlers SystemTap handler constructs command-line arguments SystemTap statements SystemTap handler constructs command-line arguments command-line arguments SystemTap handler constructs handlers A SystemTap script can also accept simple command-line arguments using a $ or @ immediately followed by the number of the argument on the command line. Use $ if you are expecting the user to enter an integer as a command-line argument, and @ if you are expecting a string. commandlineargs.stp probe kernel.function(@1) { } probe kernel.function(@1).return { } is similar to , except that it allows you to pass the kernel function to be probed as a command-line argument (as in stap commandlineargs.stp kernel function). You can also specify the script to accept multiple command-line arguments, noting them as @1, @2, and so on, in the order they are entered by the user. handlers SystemTap handler constructs variable notations SystemTap statements SystemTap handler constructs variable notations variable notations SystemTap handler constructs handlers
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Scripts.xml000066400000000000000000001125621356460210500243300ustar00rootroot00000000000000
    SystemTap Scripts scripts introduction SystemTap scripts introduction For the most part, SystemTap scripts are the foundation of each SystemTap session. SystemTap scripts instruct SystemTap on what type of information to collect, and what to do once that information is collected. scripts introduction components SystemTap scripts introduction components components SystemTap scripts introduction scripts introduction events and handlers SystemTap scripts introduction events and handlers handlers and events SystemTap scripts introduction As stated in , SystemTap scripts are made up of two components: events and handlers. Once a SystemTap session is underway, SystemTap monitors the operating system for the specified events and executes the handlers as they occur. Note scripts introduction probes SystemTap scripts introduction probes probes SystemTap scripts introduction An event and its corresponding handler is collectively called a probe. A SystemTap script can have multiple probes. A probe's handler is commonly referred to as a probe body. In terms of application development, using events and handlers is similar to instrumenting the code by inserting diagnostic print statements in a program's sequence of commands. These diagnostic print statements allow you to view a history of commands executed once the program is run. SystemTap scripts allow insertion of the instrumentation code without recompilation of the code and allows more flexibility with regard to handlers. Events serve as the triggers for handlers to run; handlers can be specified to record specified data and print it in a certain manner. Format scripts introduction format and syntax SystemTap scripts introduction format and syntax format and syntax SystemTap scripts introduction syntax and format SystemTap scripts introduction SystemTap scripts use the file extension .stp, and contains probes written in the following format: probe event {statements} SystemTap supports multiple events per probe; multiple events are delimited by a comma (,). If multiple events are specified in a single probe, SystemTap will execute the handler when any of the specified events occur. scripts introduction statement blocks SystemTap scripts introduction statement blocks statement blocks SystemTap scripts introduction Each probe has a corresponding statement block. This statement block is enclosed in braces ({ }) and contains the statements to be executed per event. SystemTap executes these statements in sequence; special separators or terminators are generally not necessary between multiple statements. Note Statement blocks in SystemTap scripts follow the same syntax and semantics as the C programming language. A statement block can be nested within another statement block. scripts introduction functions SystemTap scripts introduction functions functions SystemTap scripts introduction SystemTap allows you to write functions to factor out code to be used by a number of probes. Thus, rather than repeatedly writing the same series of statements in multiple probes, you can just place the instructions in a function, as in: function function_name(arguments) {statements} probe event {function_name(arguments)} The statements in function_name are executed when the probe for event executes. The arguments are optional values passed into the function. Important is designed to introduce readers to the basics of SystemTap scripts. To understand SystemTap scripts better, it is advisable that you refer to ; each section therein provides a detailed explanation of the script, its events, handlers, and expected output.
    Event Events introduction SystemTap events can be broadly classified into two types: synchronous and asynchronous. Synchronous Events Events synchronous events synchronous events Events A synchronous event occurs when any process executes an instruction at a particular location in kernel code. This gives other events a reference point from which more contextual data may be available. Events examples of synchronous and asynchronous events examples of synchronous and asynchronous events Events Examples of synchronous events include: syscall.system_call Events syscall.system_call syscall.system_call Events The entry to the system call system_call. If the exit from a syscall is desired, appending a .return to the event monitor the exit of the system call instead. For example, to specify the entry and exit of the system call close, use syscall.close and syscall.close.return respectively. vfs.file_operation Events vfs.file_operation vfs.file_operation Events The entry to the file_operation event for Virtual File System (VFS). Similar to syscall event, appending a .return to the event monitors the exit of the file_operation operation. kernel.function("function") Events kernel.function("function") kernel.function("function") Events The entry to the kernel function function. For example, kernel.function("sys_open") refers to the "event" that occurs when the kernel function sys_open is called by any thread in the system. To specify the return of the kernel function sys_open, append the return string to the event statement; that is, kernel.function("sys_open").return. Events wildcards wildcards in events events wildcards When defining probe events, you can use asterisk (*) for wildcards. You can also trace the entry or exit of a function in a kernel source file. Consider the following example: wildcards.stp probe kernel.function("*@net/socket.c") { } probe kernel.function("*@net/socket.c").return { } Wild cards also work for other types of events, for example syscall.* In the previous example, the first probe's event specifies the entry of ALL functions in the kernel source file net/socket.c. The second probe specifies the exit of all those functions. Note that in this example, there are no statements in the handler; as such, no information will be collected or displayed. kernel.trace("tracepoint") tracepoint Events kernel.trace("tracepoint") kernel.trace("tracepoint") Events The static probe for tracepoint. Recent kernels (2.6.30 and newer) include instrumentation for specific events in the kernel. These events are statically marked with tracepoints. One example of a tracepoint available in systemtap is kernel.trace("kfree_skb") which indicates each time a network buffer is freed in the kernel. module("module").function("function") Events module("module") module("module") Events Allows you to probe functions within modules. For example: moduleprobe.stp probe module("ext3").function("*") { } probe module("ext3").function("*").return { } The first probe in points to the entry of all functions for the ext3 module. The second probe points to the exits of all functions for that same module; the use of the .return suffix is similar to kernel.function(). Note that the probes in do not contain statements in the probe handlers, and as such will not print any useful data (as in ). A system's kernel modules are typically located in /lib/modules/kernel_version, where kernel_version refers to the currently loaded kernel version. Modules use the file name extension .ko. Asynchronous Events Events asynchronous events asynchronous events Events Asynchronous events are not tied to a particular instruction or location in code. This family of probe points consists mainly of counters, timers, and similar constructs. Examples of asynchronous events include: begin Events begin begin Events The startup of a SystemTap session; that is, as soon as the SystemTap script is run. end Events end end Events The end of a SystemTap session. timer events Events timer events timer events Events An event that specifies a handler to be executed periodically. For example: timer-s.stp probe timer.s(4) { printf("hello world\n") } is an example of a probe that prints hello world every 4 seconds. It is also possible to use the following timer events: timer.ms(milliseconds) timer.us(microseconds) timer.ns(nanoseconds) timer.hz(hertz) timer.jiffies(jiffies) When used in conjunction with other probes that collect information, timer events allows you to print out get periodic updates and see how that information changes over time. Important SystemTap supports the use of a large collection of probe events. For more information about supported events, refer to man stapprobes. The SEE ALSO section of man stapprobes also contains links to other man pages that discuss supported events for specific subsystems and components. is reference appropriate? too advanced for readers (it seems so to me)? please advise.
    SystemTap Handler/Body handlers introduction Consider the following sample script: helloworld.stp probe begin { printf ("hello world\n") exit () } In , the event begin (that is, the start of the session) triggers the handler enclosed in { }, which simply prints hello world followed by a new-line, then exits. Note functions (used in handlers) exit() exit() functions SystemTap scripts continue to run until the exit() function executes. If the users wants to stop the execution of the script, it can interrupted manually with CtrlC. printf ( ) Statements printf() format strings The printf () statement is one of the simplest functions for printing data. printf () can also be used to display data using a wide variety of SystemTap functions in the following format: printf ("format string\n", arguments) printf() format strings format strings printf() The format string specifies how arguments should be printed. The format string of instructs SystemTap to print hello world, and contains no format specifiers. printf() format specifiers format specifiers printf() You can use the format specifiers %s (for strings) and %d (for numbers) in format strings, depending on your list of arguments. Format strings can have multiple format specifiers, each matching a corresponding argument; multiple arguments are delimited by a comma (,). Note printf() syntax and format syntax and format printf() format and syntax printf() Semantically, the SystemTap printf function is very similar to its C language counterpart. The aforementioned syntax and format for SystemTap's printf function is identical to that of the C-style printf. To illustrate this, consider the following probe example: variables-in-printf-statements.stp probe syscall.open { printf ("%s(%d) open\n", execname(), pid()) } instructs SystemTap to probe all entries to the system call open; for each event, it prints the current execname() (a string with the executable name) and pid() (the current process ID number), followed by the word open. A snippet of this probe's output would look like: editorial review: does a clarification that "format specifier1" is to "argument1", "format specifier2" is to "argument2", or is this clear enough? vmware-guestd(2206) open hald(2360) open hald(2360) open hald(2360) open df(3433) open df(3433) open df(3433) open hald(2360) open SystemTap Functions functions SystemTap script functions handler functions SystemTap supports a wide variety of functions that can be used as printf () arguments. uses the SystemTap functions execname() (name of the process that called a kernel function/performed a system call) and pid() (current process ID). is "handler function" an appropriate term? wcohen: use "SystemTap functions" to match up language in man pages The following is a list of commonly-used SystemTap functions: tid() functions tid() functions tid() tid() functions The ID of the current thread. uid() functions uid() uid() functions The ID of the current user. cpu() functions cpu() cpu() functions The current CPU number. gettimeofday_s() functions gettimeofday_s() gettimeofday_s() functions The number of seconds since UNIX epoch (January 1, 1970). ctime() functions ctime() ctime() functions Convert number of seconds since UNIX epoch to date. pp() functions pp() pp() functions A string describing the probe point currently being handled. thread_indent() functions thread_indent() thread_indent() functions This particular function is quite useful in providing you with a way to better organize your print results. The function takes one argument, an indentation delta, which indicates how many spaces to add or remove from a thread's "indentation counter". It then returns a string with some generic trace data along with an appropriate number of indentation spaces. The generic data included in the returned string includes a timestamp (number of microseconds since the first call to thread_indent() by the thread), a process name, and the thread ID. This allows you to identify what functions were called, who called them, and the duration of each function call. If call entries and exits immediately precede each other, it is easy to match them. However, in most cases, after a first function call entry is made several other call entries and exits may be made before the first call exits. The indentation counter helps you match an entry with its corresponding exit by indenting the next function call if it is not the exit of the previous one. Consider the following example on the use of thread_indent(): thread_indent.stp probe kernel.function("*@net/socket.c").call { printf ("%s -> %s\n", thread_indent(1), probefunc()) } probe kernel.function("*@net/socket.c").return { printf ("%s <- %s\n", thread_indent(-1), probefunc()) } prints out the thread_indent() and probe functions at each event in the following format: 0 ftp(7223): -> sys_socketcall 1159 ftp(7223): -> sys_socket 2173 ftp(7223): -> __sock_create 2286 ftp(7223): -> sock_alloc_inode 2737 ftp(7223): <- sock_alloc_inode 3349 ftp(7223): -> sock_alloc 3389 ftp(7223): <- sock_alloc 3417 ftp(7223): <- __sock_create 4117 ftp(7223): -> sock_create 4160 ftp(7223): <- sock_create 4301 ftp(7223): -> sock_map_fd 4644 ftp(7223): -> sock_map_file 4699 ftp(7223): <- sock_map_file 4715 ftp(7223): <- sock_map_fd 4732 ftp(7223): <- sys_socket 4775 ftp(7223): <- sys_socketcall This sample output contains the following information: The time (in microseconds) since the initial thread_indent() call for the thread (included in the string from thread_indent()). The process name (and its corresponding ID) that made the function call (included in the string from thread_indent()). An arrow signifying whether the call was an entry (<-) or an exit (->); the indentations help you match specific function call entries with their corresponding exits. The name of the function called by the process. remember to add a reference later to "tapsets" from here, to clarify that thread_indent is defined in tapsets as a special function of sorts name local variables name variables (local) name name local variables Identifies the name of a specific system call. This variable can only be used in probes that use the event syscall.system_call. target() functions target() target() functions Used in conjunction with stap script -x process ID or stap script -c command. If you want to specify a script to take an argument of a process ID or command, use target() as the variable in the script to refer to it. For example: targetexample.stp probe syscall.* { if (pid() == target()) printf("%s\n", name) } When is run with the argument -x process ID, it watches all system calls (as specified by the event syscall.*) and prints out the name of all system calls made by the specified process. This has the same effect as specifying if (pid() == process ID) each time you wish to target a specific process. However, using target() makes it easier for you to re-use the script, giving you the ability to pass a process ID as an argument each time you wish to run the script (that is, stap targetexample.stp -x process ID). For more information about supported SystemTap functions, refer to man stapfuncs. will need a complete listing of supported handler functions? also, SystemTap function descriptions seem ambiguous, please advise.
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Section.xml000066400000000000000000000004471356460210500243030ustar00rootroot00000000000000
    Section 1 Test Test of a section
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.ent000066400000000000000000000005011356460210500277160ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.pdf000066400000000000000000017016031356460210500277150ustar00rootroot00000000000000%PDF-1.4 % 1 0 obj << /Title (SystemTap Beginners Guide - Introduction to SystemTap) /Author (Logo) /Creator (DocBook XSL Stylesheets with Apache FOP) /Producer (Apache FOP Version 2.2) /CreationDate (D:20191118154555-05'00') >> endobj 2 0 obj << /N 3 /Length 3 0 R /Filter /FlateDecode >> stream x;mtTd4Z=~mZtI:"@ZcAf>31,ͱV]kuk=e5*mtaΝX~>}yg8R[XNc{*&K#|mɒNU7T׺UON_ }PY(_:_ĠA>sqy*\eP^e#)yс\ Y27T `]R7RBTD ktV2P{\3SF>(|R5]1n85oL*(e& Ϛ<B}9* w<TB@i.ZbŨ h:딚l*eqLMd R0yykNMiO2\v2s񇹂qJ.p>ϸݭԧEߵa`ղBB=22C%5߆B)aⰎ m8:%l_ ƤMQCX&`XR[0.Gc]bYQh--_PoØ`8: 8n>4&RP:GNZv G|ʺ^"q0N8=(^^9E`-ށ,`}D]NxPA9gg '.~ h@I[(i^! :c5>|9xH wwwgpsp;7C sSгKe>*솕Clg'탖0~{k,2#B|+T%މeHeҘ1}F&j{N=ҳa W$ap<Njz]jF`Ń"yej&p]f <@((V;5s ;gq=gQEPJc9h) ZC ͅҼPsP'B PPSZxܬP>͡F6hm̈́M0= zq0`5t3 C9C[&%rI{|E.#Ū>U<`(j+BMe/@y&45WN} wOd.|RSI dqhFA:#R}LZEJ"TdߕBI>Q,;z8;}4L}z,ҧr6i$Kxx#%|7FQZ`l^);3B3ͮKozo?:^-wJ>{|UsJJ-R*+uLo̊O^oR>?_'|gu)|WntYnSa3dwEEgE3vj#96Ԣ1U'2!i~=[c:ZӒtcIgwMtf1wqB\$w:OQy%~yͣʳ_^e{/~ k˃_nC;G9!5?ֱo-})g?b:ctQ/\57^~s _o`9r;7i7`履5=EoH~S~gpF*O7p5ja^!,,/HddHa,c{-/kӭfHg^gF4!X9q7r&)ŭ@e4ۉ*[Vg+[59'EKGբWȆыARᮇ2R~&*M+/؂M<4K4[uK#YR[-0siUMC"$Qߠ[֏q$f ʥPF*]DW6Q!Ȯ2HRy}7OI})ywKFDNNic 1[`J)} (Au9eEMMZȂfʦ-jud{ȑ,E2핽yrW&EWЕ ()1V }ґc;!~/m\5+|ޢ.wD]ZL ҆G^^"P- oG§=#VePՒ5L /4Cadhk<2tƱ`bĉOGN>Xʟ!=Wcԑ2ٞui)6so;a-h9RUY;_wB^"m&dʋ߰"G'3JZ${Yӣ'x%z&5k6ћn >GPJ9M99|H5W@g>Xy#p~P^w{}*gP8oaa]D+ ɫfΆ4AD|y޼44{u M |nNor/K^W{^Fcm+B  v9joqSWT~cb=<`s!*8;-^0,aȔE2J~U{{f|~Yg# 9V/V4|qaZI9oY)qd䏉'0&'K"ro)#34&K1p6˜1 ܣIB)Pv7>):X InF_9;67Gm(7vٷC}1pr[Cضk/?62i87t`{¦k8zq8bHF[ Rڹv >煴6k+p Pvs1-՞q˻pCr/ N"T>R26OK/] yKN,ܯtg!͕ hZDV$ݏ08ǻA\aWӤ' {h%7B#0XE Q93K5JT"%1;_x(7)᜜Sub_\ PV*ʡ5hy_\a >R:Dk HkU[0.끄)=Qz+ c8vETu'J{vj,9(^Q,VӍ6wQ y0$Y{e9x } S4&)oLYS&FmhE^4V7^n|pU:׹/ E6},}<;f6d9c87];*'ҲH^ϓw[_ 5nB̷;-nlԋߘ׎xas$3o1fM|>hL&70q6J>kLZໝr$WrdE6P+j﹔*z46_צ K R;ɜKMЇ+4Q歡Ц1\@ij5sZnvBeFbLvvD0Qn,`f+R0nr.`vpUFs\6m&‡m#N(js ;I4ĎP&SEوkk '/4 Wn*" GƵHN*NY "?4;v6Y6(?Dv1w.@i*ɈMD^#v92(r-ByDKdҶVP ů?i6z xum>\)i 1i=>y ""M3MDR'о5>^Njq&,cg3d9ͭ -2;jhw/c7#@/n:"3ֲwf6%2緪y7+&BUW7}G{4蝾m4i'1.JGh?y?&6:""QKǿKggl+1Ό29._,8]rrc$ ٮ%}H*IDRUj!bú,/iieKiIV;p4}#KNb򾫣5j9_ޑ `JrzF~TY'%o"'k@_QcŢ|.>ؙ%q]𲈣q3D~{Un)Ñ0{xUn2k53-bJq+YhUJ#Z}Vi[=erZE> stream Logo application/pdf SystemTap Beginners Guide - Introduction to SystemTap en 2019-11-18T15:45:55-05:00 Apache FOP Version 2.2 1.4 DocBook XSL Stylesheets with Apache FOP 2019-11-18T15:45:55-05:00 2019-11-18T15:45:55-05:00 endstream endobj 6 0 obj 980 endobj 7 0 obj << /Length 8 0 R /Filter /FlateDecode >> stream xMO0 >磱c6Q0mDZ[u=.-0EQymی(Vu8"Gb CĤF0A *P@(Db(jxxe],?| mހdpL*5M~剋(9#]kU~]]$ `г6aDFNM՞Y`;;0NMZpӾ͈G#y{v&"@us endstream endobj 8 0 obj 277 endobj 9 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 7 0 R >> endobj 12 0 obj << /URI (mailto:ddomingo@redhat.com) /S /URI >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.37 644.675 481.37 652.535 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 12 0 R /H /I >> endobj 14 0 obj << /URI (mailto:wcohen@redhat.com) /S /URI >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.37 631.675 469.37 639.535 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 14 0 R /H /I >> endobj 16 0 obj << /Length 17 0 R /Filter /FlateDecode >> stream xVMs8+[8W.K leS)jvƖA2 ~[6$&2Y¸V[~``[F@4lmPIi6 @~[=rg 0l|6E ̬ƃ۸ CnXVĶ zSpcl*؊ _ws%3߉%o_.'фMFGtzK-~npaK8Y |~(dp,*WD/+fj-7r2vJOH퓌Xɳp+0zƱߌ$YsAkO:WE܋'Lϕck8p=u#%ď)Z+(v5ivO9ich-#.cC;}&LB-(k,j j7)5O!~3|!LTj%2J2S Ow2X)-1 ^ =QrC4ف) $2UѾI*~ex9ZnP Vֆ%,eaz}|/;v=qUeΡӪp`[Vd&u$P{]i` ЅIwz&y7`4LZ>(zO+V4`QZ/)$EQko˰[|Ʒ(E>ERAH]ՙF'TxQs l.;ٞ)tbA$er2UsI)0uTH *5yĠ> endobj 20 0 obj << /URI (https://fedorahosted.org/liberation-fonts/) /S /URI >> endobj 21 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.464 598.573 474.164 607.823 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 20 0 R /H /I >> endobj 22 0 obj << /Type /Annot /Subtype /Link /Rect [ 93.062 66.696 234.47 74.096 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 20 0 R /H /I >> endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode >> stream xXM6Wษp )$VR)DB#)&Ak(9%򘋟{>OǒI␅y#?/]7`^Z'wbh43䎾Ӈߪ\`4xĞWvVNLa ?CT= \e8I7:%Q81=”pE;5Oo׫ǀ![o\='|FlgFnE&iL<>2ᑓ&I&gM<}_e^}WUUZ.{,I|'IfS-ۋZٲVd/'۩]eBj2gdJF<354F#m-3U2Unf/ȅ3qy#1OJed ;ĺ5PKm=ޒ9 ã?aF؇S$3KJ=p~A?NǮ=/#&[$?id4Q,n??GX*[-/ű[-iJM93`hi&?u "eD#YںG;ߕo0Bw%J^  a@̊.eS,aDdsd9pt9ҺQX^`{$8]|nx- Άhz3ϕ*Yt _wHHaX7S QҖaD]GLzg0m[Ղa4;UYݷ5o" #]Ʊ5oK$5 QkwGȑA>Bo:)NF@>ʣu4FX!s}]7#Og9.r(-Y&ywvx=/>|6-|(,n#o!iH`GxY%m91I$٥>IH`[TSx!3>Odl^4 QX1#h~<7jd., SpƃI~7S]Y0&u%i 0Dz t j__^&fѴ@墘&v݉MAGӶ]虵$!aЧY8'@fU9ʬ?iDL ]S ZNr ao;.`vȊ&wBDFMR&R 蔤77(ޮh":lӸxDo$5鹍l<"*D3^vA=Cml~ ѥ|jT6foJl8uDF3 f͂)a0Na4EGwTdv m|2evnMmM<7Qi S! }rp :\{SE,hϴg@gc[$ QTOQv"wF#H:8ȫ,qaUuo2.^AVLmCs|6Z 0\ q|b~ ۋ0s{nۨWh\bwzS\ôVdF1*̻;VU#vv$w8t\8"/&txjG_W5BEi _r]9r3sm߿.ZU0@}xDQd<ÀN/ endstream endobj 24 0 obj 1996 endobj 25 0 obj [ 21 0 R 22 0 R ] endobj 26 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 25 0 R /Contents 23 0 R >> endobj 27 0 obj << /Length 28 0 R /Filter /FlateDecode >> stream xZKsFW1y\I[.k+8C+1dz Kv٢wO3t%%eO3A|"9%U s=mDŽ?~7VcG|kvϫ_O7xNƄ͇xq/АAZ=wަovo];=+c4~etfXuH>",T<&c޻ )/WǐiHU~?q׻2u10 إlHb {1'f%. "P6IZD]2fM|yRH΃P~8Tc_8UGSR)HC=kvӼd{].YS"ml&$YUinX˞ J%C걷|i2BCҿj*ŊT b?]j֤wBgͺRIOodƊmsKˍްj=_Tsd;=33ya3x]T+CĀd'RA'uOvg|ʳ}]>~OKL@ٶ{= it\n+]7,e栳<-ȴNFx=ӕJG%! tXM,oJ'R)ᐲm^k(^ eTp@M>p$)!u΅0b3!"2hSjEDDl\Xu~(M\5zlB6BAs1I8tD%.:ݚC$j|/$cKH,0ܺr억$^Q6%_x~@\mhtYu+dQ\+g8+}; ~<![f?L9}1g#V`µ2Q}zDyˬh7ڰl4?0c|jT+FD7m!N&:`uYqZm;ӔtMC5KQ6ˮPPդ@]o*,st\Ntls $-cȤ{ i`?51e'@ {E:mbp\/S : nn>ҾKTPJ؟;\OXB1v_7 ln%DeCt-ֹUF \Ǵj6Mj^ $چ&=S|}656Pkbs 3DU`+5*iR̝t(KwORKDDsWtLh>6/fHla0fcVZ+,rJ+jڌ k0qY"IwX$ڳPev֍j $ +1tZj d-ZA1zd]y1vFbe VyL # ʃS_Z6=N3p a7 '}\NH'u.'o 5=W琍:П՛k }ͪ㨤]/vv*؄ Hr3މ ժ!qυ'10VǢmt7=>-eY[׀h1yP(CzйzT:|K\H{vi%sed9MX릭KL[`H0@nEQ=k[01.ސ7.tv؉q}5Ewvπe,\~ylԶ٨d\aȜX f4A8gTqmWwEL)1-#$=ΌuEc|JLЈ`$BJ~{>6ySnGЇ룛ymR?'U*jJ5RK SR(12w4єsrħE! 7UkB;rv %΂q'| Y}M~$/v޵Eq<]q/ݺ $RPӜ6) KFm)Pt\WI۲ܴiJJMӤ5b(|vdZ@z46ּk1asb/@{7)r-Mt-kK &) endstream endobj 28 0 obj 2712 endobj 29 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 27 0 R >> endobj 30 0 obj << /Length 31 0 R /Filter /FlateDecode >> stream xYKs6Wl}3QoKisOK&: pP^TBJ;" <\*(B}sѴ9pٺi^+)dR$d@L%a1k_A0K8/X=^@[f{M"tOm=`f`b|ꉴ+}}"2 1Z۫r۴1b F)Z>ma>\%HKSq+>ErZpJY]XFb.!n9= 2 G,kT-WiNl#IM"*M|T}%OVb{I"UDf!9N_Y7#jZUTs%^6i4ʊJhyV(?j!0\(M3Y@<=®gebi>DJ=%$rl^lSߓ;*?eeĸuH_I *wx?ѓLR(o/a|^`F+PkxO#?l^II`\ovKYګP4- >EjZt|O3|K8_ cV?fαj q=c(Mgaۚ{ +ZC#Z7[L^jXҤ*.83o4xAGI/(nIOJ+|ԶZy@=}nf,XcbqT)aPE ZH94d`odZe%@`ك=,'icC:u<΍#v#Iq4Z&D1`+YFHAaHR#q 43 R`d9r~ 3܋[hX6aWliNc^NUΰDxfST `9MVNz`U`cX8'U/ǃUQ0IܧR(F(~(p@#xW`x2$/!\V!w jG@U2E> endobj 33 0 obj << /URI (http://sourceware.org/bugzilla/) /S /URI >> endobj 34 0 obj << /Type /Annot /Subtype /Link /Rect [ 351.758 694.175 485.148 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 33 0 R /H /I >> endobj 35 0 obj << /Length 36 0 R /Filter /FlateDecode >> stream xVKo@+a HmԪqCEkX`U`u}gv1Js 7,0x][TϽA(wISy>0j pC j-ʱ ᡀ;v(\;(MQrL:7ȝ)q1A@њw_x"?a=g$/zD_iX^[2z8~B4hd`Ъ-eϷS;A&8]r͛B& k0luXT':(4!Ngu'p+S(\CUe3ୀT`B-xeYKX$# 7INj0 cUNĖkAΗ}!C~ccč1Xs.̨ΞZB@U%f_ҙ \1tb^8Z#*Û +.qWHj dML Qad;\=uRv5"LpJag/bIaqy"fg: V$ 8ωKIW)b{ۓC1C+sc+r_5Z{N]6 endstream endobj 36 0 obj 785 endobj 37 0 obj [ 34 0 R ] endobj 38 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 37 0 R /Contents 35 0 R >> endobj 39 0 obj << /Length 40 0 R /Filter /FlateDecode >> stream xU0s뮴qmCrܮڪEK$b`'} ҽEH o P’bU9b xB| p6; ',ShCBO#2C ڻmb #Qy8ѣy>e^!lu:#sd ^֢rX#KI }φ:0.thYu]ߦANt'&ṫ&$ zLέZ Ҫ{pk@ZƁ YE 5(x 7f:0܃5 qh㞈vX[?^N둭6 Wd@6=GѢv<T\.=<֡D+A+uaA*_i|^BI}{ 'WF[3= & I9K~f{4g SgmI:a] K"iŒ endstream endobj 40 0 obj 502 endobj 41 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 39 0 R >> endobj 42 0 obj << /Length 43 0 R /Filter /FlateDecode >> stream xYI6W6CJ[4EZM2.zHrXX$:Z2{j$D=ˊ"՗v0aϡGWPz{Yu0ZbW3uX1'M`\Ǖcd OFu<֣bav荑~' |Q&d~>Zġ?o_ל7;} Dxwsw \s^CƄ^zu9uPq#bf1sR=:p E}Rv1ێ8.JX*-ݩeƄ /^0h|#=ٵ]ˢA=Z8ˆaI*=@"!cNb s|6<3I0YIi'#mZxl TծLu:" 0D3xfMrJ^}u ;Y7Oل;b[EyimAV$cZ*KYU{T&jߛęq\@M"UОQ pʹ¾n@=f\wiߙ)/ ̜D7iWшG kmFUy ›~N*΂όW%9$eY |joې;ɛNlTod0'[qaA%<;xxnJḀJ\kq_?>SL]*2~_@i7缳0p0֐pv:ш-8* rLla4ނ*ԣI;NIjT6djcv2i }`(ek4(VV-TȀuU рJ>}ӻi-ajͯp._Z` 1H?t#`'0}\I*{cDƴmV{UYEHZ=ׂ`ë@5c82B]uCx,>' X ~;N#:mZOܶt@[qB¾f[#7U ~bX_O1,N!枃z70O \CFcg:09az< %r<Ƒ󇪥)Kr S3Y.Sس2S0ڂtHLY̒m %W ў"'X[LraL-0>r#mhO &C÷rُ=\&A7c)/\D;tmƐh Yأ*?I]7q6fG[{{ QvpJ@KGA`_:#oˈ7Yvz( ].$y@13U߫ ^2A1w<؈&L,QyIe.|f X{X}=BM1"Akt&R_tB6& s-v|d#<_<&ܵ?w]O"PhZ> endobj 45 0 obj << /Length 46 0 R /Filter /FlateDecode >> stream xZݏܶ߿KcļE\h8"(<([Zi-i}CR")Hm(g3EޛD3?>5$ǩL`XR=ŸĔ B83 w&da'% ,OjGv?Xy7Xqn<-hHãS~ b-'K姇w-:pwL|חa:F!u -'Pkx3!HӠ-O91@3˘xCQ[|)̾$8Vs3g59 o=`*p&{ɸ&7 ضLkm`Wt<a gk(5`捣YB m1!F$J,¥N9o@cpnO[Ho\BR-͡p+|G7{j*2%e +L{Hy) ʀ1L>يNI,O^TkCKY*Ӣj,5`_S !LVq} _= w6?iZU<qJ_O‘m5blؘpfY>!th.le#T,,з~܍iҢº`BrR<$㒁*禇?^qtg "1\[Wt.֋RhM-ɭƮb>:_ kj*]092 2aMm| Qcڗ23crl!ȜfJpbJf'_lӐc(E׏n06Ԡ%͐X˶C5=;cJ&MtMNUr+v""|3]3k~l NͫԜ~JT%O(&OQhS<ڕ:my z\Q!4M"d5[2b}# 4ɹJaO|xwݶ~끤m0riS<9i8ԝI8]䳍:Z.M k4rxl($gT w2i,H9dCar RHSEjck$*@56P+-8DHS o^hf|nٻx|ߺ%r>93MhOC~. s˥OꒁXM*{ I׭xQ?w^UˮJG+صop4 sJ]<?#>h6g=ݛ}9jie`4ݡR˭"A(Y%l@ *ҥZ\;RfVk:j-M싢k(̱j]++BptA32/]˗S돚_5Mw] ?Z,5kO$DւGv_]`90窾Mrptdm ` endstream endobj 46 0 obj 2363 endobj 47 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 45 0 R >> endobj 48 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 433.4 null] >> endobj 49 0 obj << /Type /Annot /Subtype /Link /Rect [ 438.998 316.175 500.148 325.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 50 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.858 303.175 173.328 312.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 51 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 185.2 null] >> endobj 52 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.598 267.175 511.838 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 53 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.858 254.175 117.198 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 54 0 obj << /Length 55 0 R /Filter /FlateDecode >> stream xZm6_ eIJ$|5wCPtB[r$9ы-s="kD> e%bKL2HG,T\ 4A(Ddȕ-?~#IG /U~;x]Á/V٬ wsђmNzHuZ2ٿ,b_:=m柫7t+1&\[qy}IhA:00nIpR \UU]^Ni^'uV,X}Hٹ,iUbϞ<-P;T.ǔW_D(PQm\3(mWS.UWI^Q5gz#r-x,O@>#(iG(OsVvɾ&eV\*vJ,$ǝ Cv~N q I 9UݯC06XBp•(\2Gcb#kGN)߉[ z|ayF~^$xV@;ѽYkN6̐Q̵PY ^5ur~(/y,0zpSK%@e*W|̶Yv T쌲>P\j X[56jX3ce);HqkQ l0>uTAp3Wذ9( ؜m89/~dǚxG:?f@„o7CHEGΰv'IM7hFZugF5Ą{ΎGcZ:I y# `vܸG hE'0ÙvOA{%l\49½{[7֩۳V _Kz3Y(.r\by= C#6(еq՚RM(B3)i|<&bQW9sv2w>_W-x}z3TIVFKRPNvj>* J0ؐV}dx~ 2Ȩ6n\.ţ\TODK.8Bp+8̾Xcm TE:@BVu!5$9!T7F Mxr!`nI=+L^UE HhRΰѲJ`c3FU5+}N b6+E\Uehgm').\{-=R]=IO9e-Zl6X,՞2!>3`Yi qZv;x*i2ekl8lF2:ts9ہpsE#]F!XR{1Kل |0&Ԛ9 K咕ܿ~\yyF9|R{`8{g˱S-z)%EYZU[0gAiԻ 7 L(v8HfFi{jgfLWR4;07AI(4zeVc;ӡ_ j1?ː)SnþNz!fGX7>SL=u"0juZLHd'sY "$/i z|;\aA7w2x.ɟYAh&ӁfoWB+,$o9kuqFGP!|y ̙!7X8~%r F{_B!4fE`j(U!R^9ק |typ!!:6 235]7R4pׄ>Up|QW#{&z]ކ*o:yͤUxANo *(btt gZ\v)򴕠^I}<7lǘ1v)δ>z9nDE{?a!|\[t~>R{"i2۹[bvXvKs(ڬQchh\QQ4~Mˁ{^v{q(5hH8Vsw>%̽cXE5&9oZy} endstream endobj 55 0 obj 2513 endobj 56 0 obj [ 49 0 R 50 0 R 52 0 R 53 0 R ] endobj 57 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 56 0 R /Contents 54 0 R >> endobj 58 0 obj << /Length 59 0 R /Filter /FlateDecode >> stream xZYo~_l.oIA&H$< [z$X俧AQlx3%U,:N]O =l>c MEgGBjʥbL1a p' M`#0?5qklm.e2yW̗2(rUͷo8OF9d!SQ5BNnW:UUY=w_ڮ8Gn۔Ǯ}#7~'`_H.34q d(́eR4Dݺwig8z$k r?[γ~rC3p1&}P36YHۯh&%#F{`-rv2I2?=.4"lvogM9"2EʤKV i-y@*Ď;}OM1d7 &w &qDDdbsQFYSUs1լy?i75]ʪ cAfXvŶ;Wuwe]}T|OdW8nI3WF[S֎ԣ? SՇo}ޠ `|T-T0{25-"# ׌6s$\@4S-\LƅiYiLf$C%Hc"=hto%dTeD,& RU-ܾ +bL= f5b&`bRBro|-+[BcnGb~.yuBf9K[=˫W˧Z˧%<{N/&x|&Jܭp_5S^a|-nBXfXJ1!ud̄4 \ib+r֧Ώ3v%AihNI⌕|ಘ)AfW4cMzw*J@NNsP ]ݧyO/RփqeZA@BTRKVlGued,D8@<5t}޾=@ޑC4p&vDz+2ŚrwIB 8Ք'>G"qX #T3-I{%sE&ڽ{`+m2| DWְwX@IoWGob-a)Pm:t$O)Q l=:GD병f YϮݔUޝCuc+ MݶtAXC\1zaEm##gԄmKR{M > "}W̖ 9 |a0p^tl[.hʍ2vY| >W`Ƨ~> >>"D?2Ă|D rKo!Ү|j(L%}v?f  endstream endobj 59 0 obj 2242 endobj 60 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 58 0 R >> endobj 61 0 obj << /Length 62 0 R /Filter /FlateDecode >> stream xXKs6W1i->sk8vrHN@ I0]$ŗd8֌%ŷb@6_~ac \A7W\ R!ŷV p|kjfC!:yh7q4qnVv{|_ڬ^\"B ҐPץ8&~?DE%KI;]l?0}F ѡF)kFjljƘͫ~/X:.:H"\p]vD{ t]Wհrؖ2Epʷ(%\AĉQcC !G34k JT7Iu&s>m{]GwY<1T1#B}39Tټ[Dm8gwIh3֚a$gf5FxbUY1I.Fi dw=1j0ƐD"{ b[>%pE%9$$p&CV,[?! ~lvVE٪LŲ ( tJ qTE;\SCvTuk]ك&Ԯn$0j : [oA׽x!y N)glQ2Y&(ҠeQe'E/[K]31vswˢ$$bGF*VK.{>Xp:֌7cBoɂF9(e놤yHC[XbNzE,,rDT/xQ4g&ړ^\Dt~_E tac1Ԝ:C!Ʋ$ccQ)'Ik} {p<ssq6{J5 =,/ոSK_NMLp˻q`|1~W~[<&3xXD#)8f 8}za(Fx.kNF9 yָ;G@ 8ߪNpy1v c7N$]vᰭ;sA6π<ǥ4>Wƽ{,ذv \nKCtىR;7FG{әbz?C "eh?G" endstream endobj 62 0 obj 1649 endobj 63 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 61 0 R >> endobj 64 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.874 321.075 271.274 330.325 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 65 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.044 285.075 526.444 294.325 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 66 0 obj << /Length 67 0 R /Filter /FlateDecode >> stream xYr8+ʦٽJISY{2 _$EEO\D= 3?ס$v8`<|u} Lh}Rb>h]<l7hXLyƪ1͚?|͝>xeO^qR }~} lkOz&O6c߉:2=qbuQ⺡xs#r4S3u'a1!Od; aADa8NH?4o˦DjQϯm'{qd_5A%nl. Lx.~iYjҨN2Xf4VYKy,^aJdf흷6ĮX ґ)"{q/ ճwu? ]p30Q $pǍ4/YY>nxvP|Z֕j]~d5vzfuM{[ ]dS† 3"mS64+AhN$s +[ m' j#.o MaN#OG҂0;{h]&L`>LS< s Q{N k2SWHv} iyGhihHb@bEb$zƊvk1PUVГQG%$%l,Y ǝ@h@SRlrH,@fA`MvXg]o$ CAn"3GW +=QwE׎]MdMaya'faH({I@ 9v$J ECa$lgݹ- s ?M^fg|6>8;6 i$ˍSs2{{8u'jZuJl4؈ߌ^sk~誑{_Af2n29l J{+uXK_TQvb]WV%81jlcm \r";һ"Q[2(RXE;oƢʼG](]) '|Y=;Jl,AR;y\a ;pD7i QdOV5r0nF#vo2RF+a > U(|TSX/k8RU$mN8I\W8e:sEnd=ńK\P&t5jf(_pc"̈0f#oeзɕz( ֌ܺi*vޖ"\:n^Nň} 2n8aL~Ց m҂%%*b8qT"NU3ktz}hϥWk SKGJj'A2k8^u]ѹk(e~33%W-|8'aam>th-((i. ^d|Ϡ$(ᬂd*-F?\N^ ] X6۫*WN[J{~z9VuRCaw+#RWV(&P$KeXo)ל)*vA^N7D3wǑueE7!a]NT8\TrKsN !0r/wQ.oU"sR@rCI<EQ4x]D;ќ@*7|0ao(nG ŦϺ|0BRzdnFpa0km+<X:0A3L9p;݀8v~mkC0Lq [irw1wd^G'h};!h?)؂NCx^M9 endstream endobj 67 0 obj 2088 endobj 68 0 obj [ 64 0 R 65 0 R ] endobj 69 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 68 0 R /Contents 66 0 R >> endobj 70 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 446.3 null] >> endobj 71 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 156.449 251.824 165.699 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 70 0 R /H /I >> endobj 72 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 530.1 null] >> endobj 73 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.164 156.449 380.764 165.699 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 74 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 660.1 null] >> endobj 75 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 119.077 246.294 128.327 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 74 0 R /H /I >> endobj 76 0 obj << /Length 77 0 R /Filter /FlateDecode >> stream xY[6~ `+$E2-"6iup$zLDf2CR. Pt(sO+0?qJQV>uk%q 1pNoѐ$dr,? OM Kxv=eU0ao:G+c&)Viz<|D\}btnvC8 ( 4FnJ՛J5JFFUw/C7X}wY1]Š7ĉͻӘ V"YcP.I0X!;pFΉ`Q:١%M HGH0 !d0qEQ<ؙx+? ߑbp@[I@R#X ,T3 Q^DY'1DYB}hSծި4(G+Yl޾nC( ɆHd}-/Fu%Te=-ڋ{JQ CU"9jS4\DQI(EW\#VnaWEᏲq2B)aJcXD 4I8@;L[fY2e KقQ9=uJïV2$-I;-fm0b0fWkȱߣcbfϭ' K("ȂR@$AK5 hPY:Zd IsqWv1dEj-56-xjrUnS[TGM#qXg2Q!U2W T'AlnN@<%(Nc.EXtb,κCUxM$ ݸ-Ɓ@@P[@yGwH ZFFX NIb }jIP aשx׌F@mg9?(Mz>;M<QQ /O?=HO |/QW/AjAHz}7$?f{}o.4+żxWO&.6k@)j@@M|ʡsG *xϢqzIcʝvm%н tZ'B#<Ső40@.52wff8Y*\#LcP6AFN2ٌǀ[ `Fu2po<АhƠv?0,TP@ z)3b G` [a "0hMk0Vƥ/V حn% n~!/_<,Pi$4Hc Tk/R/ԩXծFU,o>ET1W~B4ua,j]@A QרѢ2Gw5z)l-P?~~x[S= endstream endobj 77 0 obj 2415 endobj 78 0 obj [ 71 0 R 73 0 R 75 0 R ] endobj 79 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 78 0 R /Contents 76 0 R >> endobj 80 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 718.3 null] >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Rect [ 108.888 693.175 330.628 702.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 82 0 obj << /Length 83 0 R /Filter /FlateDecode >> stream xYK6W QH9en`0Ai[,yD=F%J`;E,V}+e͇nLs f"rϹDŽ޶Jx_qQB C|N#eSn80xLͻ[8l{x\i -wȚyZ5iWuen~ի7o`E1qs[?~}{.CCuyacZ[;K#ωհwכmacyڝ%2'fZܹ p$IŶ!:m>l <3hQ +rЉBpa~0tύbi-)Iv9jϚk53/ɪӹ*e٨oU-%cX, {Ykq1d8ebnVDMd-U"1$D$K8Jdbںkz3|ʼjŚa::mhUMLese9QfFjݬ_KUYv8 =TC,1|tl*[ӏh`*C.'i!gC'i_xg J04`>hes:w#? Ɇ{ 8-ǪCцrd1NRcX̞ƅ-#mUV'(-z6P;q{dyT'xa4h185,/1N\o#,&t璩e'>ueB㚡yKY8 [NUu-V `(dO,X n:B@s]m*z(0tmY}k8T٧9aɁɟ.E ɴʱE$6J/4 ',Q˽DvTnd[6ضV#""עV,dG[.G&C@Nrz>yހVCy`EIbt >*?EZSTR5dh>uBެ䂘 >@LZdRMa'rI'm\)9 ;䇋F irQ*i͋h4o@ ݪ )W< fU-sR_y""%¨wU1^X]$%%l)gQ ȩڦ /|ys: w؛6 xkpt *1lʇLo}Zv5 8KTga"yӦF*eOJ[fQO8 aW`W)m`yIrmC/M}Yj7 1h<ၟ՜!wDtٵ8EnV T{o&Ns "qfOLGRBS;FvQ>Kf_ѿ5~q>,#ק,V|y'<@h{§,ӡX,tKX<)G*r3&/έ=QǪM6U+ 85-쎂?W[xNt,躜U Sqjla;YPKS_C] {hy{_9}O%UMF==4׼(z`4M[߈}"Yv5Ut4\d+G&H1ż=Qrf{v"B9u/{=/GJ߃jX)[nes̡pGG7~BN|?8I^G.355vH,u~/{~ ovFy<{͎8~3qeB㛡yKYq5ǻ)jdO"-o!,= Q ĉ GV}f-ĺ)pI.lxJ#PIt\&?Zc# pOJ35Ii6؍OQ"(/ K~t}Cxf_ˁjxF_d endstream endobj 83 0 obj 2080 endobj 84 0 obj [ 81 0 R ] endobj 85 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 84 0 R /Contents 82 0 R >> endobj 86 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 53.858 379.486 null] >> endobj 88 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.668 292.547 291.948 301.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 86 0 R /H /I >> endobj 89 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.728 266.547 482.088 275.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 86 0 R /H /I >> endobj 90 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 253.547 152.998 262.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 86 0 R /H /I >> endobj 91 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 53.858 663.3 null] >> endobj 92 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.788 240.547 276.378 249.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 91 0 R /H /I >> endobj 93 0 obj << /Length 94 0 R /Filter /FlateDecode >> stream xYkܶ>ȗ8Ɔ+%%_NH[( Ji,i^=W4cƻ)ux,Jsϕok c}&XxD̗<T<ńeV7`~=zp7,yK7clʍfXƞ15nfs4ֵ4^xxZ=К)Qfnڤcu~zhZIMU5_nyutFg=5T."-,acyU؝KS: U(mU=|L|R8QG jL}$'xDqtQZȒX<yWhHݝw'\Xai|g"g!9}{wqY}2"7>5VCp:v͹s_!G=6ux9`Z"<<^cP1 . pcfP"+=/S=r%(R@Y^ JWkzE W쭔jXsޭPˋzb,UV0EQU¯^+M:]sH[0)WdQt/Oוe /0$!ɾ6jl̾4l0Ne>m}i76H5{d)4.-FK=xW]Lhgly|q)MBwk%DZΞ-?m!Ȳ h j_ngX;C$ŭ+`v&Rr{,X  )o)yiijH%%$2\l^1.8P\ bm?)} {. máي&d;zq/Ϻ.^(e"â_b{$ #bhH斥@ o#BǺFv.N2xCgAhߐ!gJM)Kr 'Պ2:A/nsJObI02CmӮy(]]UME8 ,$zRY#:ARp&anHnߏ9[]%u*z M :A>Ń('JhVBZ˶C/z70khCPEۄ]m@,Eѧ@Ǒ{H5_1 ?q~ɵ> endobj 96 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 588.3 null] >> endobj 98 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 481.996 220.344 491.246 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 96 0 R /H /I >> endobj 99 0 obj << /Length 100 0 R /Filter /FlateDecode >> stream xَ۶_qЧHI( ЇN4l%G;!dmLgqŀk5qc$%HNW\(„T+|aM͉4E;@{yU(|WྂǕz?m8Qأ=WWW-՛w `D3)"MR&;ޥ'.-6zuyz+z{*ǡAlH^Ĩ4cAbj)w & -00Vgu٧ +Hk˲0ἣ*?3P nIjVlCZDgxÓIDɏYYSzW;$O:Y)3[lMN'J$gz</ IrkJzGvG +aT &J(;JZì50aH=J(Uv0ڐ9G InHPe5@8 :1d1C5bp^פnN(Sq Guz8‡өпv1){J_*3)1eV՞p7\ܱ7c񮴣-k"gcJuRVpXfhlߢ%k<>0kHF.!"`@l1T%NU_A3P$@i9H" NU^4_áDz:l/fhICD otfm!JL<s.X(U<'H+Ēl.%Ś8kϪӂ@loh-ߚsI*\6FÊz|}Vźbf%Eڅ5Ʀl!ؖ15G_&xTML!zFs+p86icjul,}6.iXcCG6W`bQP?TPԗ~|<\P] ;atBO-Q+4,hX,XsOPŠ͍qT 3R'c3 `pRSoW?~2$"13:1oJv`2I>[ $` %p٭IC^^smv0hk9VؔNK^B.&Vk|P[p*,fPX ҅5(m"`;oF=fF;C©бm(?Ħ.MYƸ֨]ƒs8 шr LYo3le7@8cpBWEGa{U8Xz@]1ږJڇ&^m튃ZME d=һO>h\7zb?zB{1L7riՂ 7$-&Qo60Whd_.- y8f1 o|Fx84Zh>]^|BȏH< g` m5?EQ)l LR  | Є__­`(t. դ"ҡ7OL_#* endstream endobj 100 0 obj 1949 endobj 101 0 obj [ 98 0 R ] endobj 97 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 101 0 R /Contents 99 0 R >> endobj 102 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 142.573 null] >> endobj 103 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 648.975 193.908 658.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 102 0 R /H /I >> endobj 104 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.788 402.022 475.148 411.272 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 102 0 R /H /I >> endobj 105 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 389.022 121.648 398.272 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 102 0 R /H /I >> endobj 106 0 obj << /Length 107 0 R /Filter /FlateDecode >> stream xZݏ_AC IؾkӇ (y\[,${gH}P&=8֤9Ùp~3C\1BQacDA,c"x ~CPP&.[DŽ`wWd> ~ؓV~f0/1baح|HHV3r ?vkS0 ?[SVuo|GZ<6H~*Vo~![}?5Uڛ7D}ӟvjY/VC C2^@ci԰h/Qh{(TAhgN #D1 CՒem#Pz OKC&{ZUY{U1::sG7ROoTRCk+E2g.*ih1wQcy櫽ɲ<e}xȿzxOT bPsZjخڭ[;6Z+v9qQW0AL1-ccS.N@kyhJU} 8{C'פm#ց(<./%Z0|OjVN&œJ tȱ{̔$#&dEe$F\>r ynJI%Gapؗe@Sɗ wr3[p*1/X+I]:" ws ]cRr2HXErw\!|\,0"[C-!6(&SYsN ky lҧTd_<_ (Q0fL:SKǝa 4lro"F: aġ@7BBF_}_i<8gF ~=FY՗egr|zŚ$ H;Mʶ`-V<ұn' x,) )SMXb%.Le/U )遛lND/P6r#X c՚lѸW"8$K+Bb@ #' 9:0951fuCٻiSg* \,w$OtCZMMq8$`DQ;&$ rͰ#tA S~xSozX_n9&:э== FGc/#ӨLsC(R7p]\F [WS.彌8J/?u%%b} -ɒ|wJv 6ǤmsE(mKxiulA2 \`$U8#p<( WJ<0i;sfaI.$Wv李vP]6/cpYvMjuAҧ 4-G}cY@zk\9lLj`h&͘h ~tˣtO5xG!b ,x"~4[KvMcչBp Ra!1MיE16X ¶2_WP@E;F >`uM?m& pxio~3l1d%D-LDgyl/XK_ڐ$Km endstream endobj 107 0 obj 2430 endobj 108 0 obj [ 103 0 R 104 0 R 105 0 R ] endobj 109 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 108 0 R /Contents 106 0 R >> endobj 110 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 183.209 null] >> endobj 111 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 669.775 300.714 679.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 110 0 R /H /I >> endobj 112 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 446.123 300.714 455.373 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 110 0 R /H /I >> endobj 113 0 obj << /Length 114 0 R /Filter /FlateDecode >> stream xXKoFW̭6`3&4iC Z \ID(ÎR_Cbj7ng_5 xI+ƥC ւ\0HBKdn -H~]|KxXXwc 2y鲺9׏Z r}J"ʨnf!RǫһeoA%x2ן`uA6\Tωg\n.wQT]GXH=5o!oO>pRqEw_A.Qy*@MdXMB6EH'ThX.=)il4΀8z8jc|2t+>8L2 􏂆хD(t(}R|ycs!lfc  8c\̙<y+}P]8͋8ַeiU:e.qз:2HOaqi8-N /; A**b]jlvYS0}mHj\\Űl(:qoXgXg ܂G7Wl؇uQ 1F㩆o:L^]2d !$2\!`ucU *%01mJRA@Plj;\:S1<}>TUفg<*ѣcԋA 0>͆a&h3#ILR]:9,]v,Z0&L#fhvFsSÉ͊.t;1-6&f.Kms@&||J`ui Eյ-m5Tp"kfӬVm Dxd _S%w*+ü>H_v_7'xl UtrZC}V1aF%qjۿA~2~:(@od*Y$< DFg(:*KuQ]B"J<1@ioHaߙc3${6enz6/?i'NͅN:GJ=y>;v+bë0Rib ~>*l3ϳ-oFGf38ٗ{F-RG endstream endobj 114 0 obj 1516 endobj 115 0 obj [ 111 0 R 112 0 R ] endobj 116 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 115 0 R /Contents 113 0 R >> endobj 117 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 529.3 null] >> endobj 119 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 87.874 521.675 null] >> endobj 120 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 667.175 202.574 676.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 121 0 obj << /Type /Annot /Subtype /Link /Rect [ 314.854 580.175 534.934 589.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 117 0 R /H /I >> endobj 122 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 250.746 null] >> endobj 123 0 obj << /Type /Annot /Subtype /Link /Rect [ 378.874 544.175 487.264 553.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 124 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 531.175 254.044 540.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 125 0 obj << /Length 126 0 R /Filter /FlateDecode >> stream xYMo6 r `3!)dwdE0;^fwk%u$ >%JݶxlQbի"J2+1ɢGf:FW2\*-bRmD 0@[A3c!=vǎ*VW1nؗUgSqa4@>KQ 8zkۮ_}s'~spU c$/>>Սg]ҲZ\qFj BF+^)k/& ׮΄]`>ձ'ԴKELmyd$z^W,H!?,Ή7^X9|6%5-ӕT|>gD~4%={đE/P3Lapƌ"ML1v[0RSލ.%0Ĵțхa.A^h@\1ŲsZ2g\b,b.D:߳ʁMUn[ hB)Cb{:8UeߵzMNF fJ+ao菌 Y!22:uW;Ss3_0 QAv¼`G}:iŮm}9&F8 p HKy3zN0ͨw*֨o5S,oԩXz)T3)|%> > R~<F c*!]nKC{|ͷUO{mO*|3_HXCєD|'?N endstream endobj 126 0 obj 2091 endobj 127 0 obj [ 120 0 R 121 0 R 123 0 R 124 0 R ] endobj 118 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 127 0 R /Contents 125 0 R >> endobj 128 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 53.858 515.254 null] >> endobj 130 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 365.384 216.928 374.634 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 131 0 obj << /Length 132 0 R /Filter /FlateDecode >> stream xYko_AXtRL4|Ҡ(v~l^ N$$O6-{(zٓ,Aآs/、?KO]`FT&JsЁ4xAx7z솃wӪXq_кAa+?{_v{0v;41ϯW1WMRl|d?>Սo=>׿=h/f~h/Λ!BZtT<"cϽԪҫ㺋麋hYIdaTl{(&+ OqPaDzszSy`YdҤ8mO')/l@nN)T./?EU氮y\SͮӦ塀W{נ+`cs#"Zu2wRT6IYh"ٕ=LNb8V;z; Uaf qO&6nC+ [:SYҽ'ۚ,w _xYZKbSݜF'4hm8d3d-R. }b_83﷗pSk[_j͊$w{Aۀznsl'SЮ1ͶOpۤ9{]Z5܆\Ӝi͡K]?B@(#+=w[/:hT-,ݯYS,݆l]6ORb5 .=' ^v)X^## E8R8Qz '8-rpTnp@Fp%3,g`i=Y)=hkJEsLVZȗfsޤ(Q8QY2 J9<n(}ϮR a!RƦ/ i[aΩs.T)͏Q5:Ys5yG1\Ɲf~ԢntBWhp-Ț,]*DXͦyA/1$kG@j{|(dxz[8ғs gm{u28T7ί}nk3U@ ~R8jV@O?l/ddo?&]$LXc'/i3:IJ!6 b+lA{ endstream endobj 132 0 obj 2150 endobj 133 0 obj [ 130 0 R ] endobj 129 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 133 0 R /Contents 131 0 R >> endobj 134 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 513.3 null] >> endobj 136 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.774 405.259 282.054 414.509 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 134 0 R /H /I >> endobj 137 0 obj << /Length 138 0 R /Filter /FlateDecode >> stream xY[o~ׯ.l gx[Imy)]TH^wCױ"Y9sVqпHlsXf#/S=ɗ'\2zl6ˎW}c=`OWzT/wR@?i9{X}}z^0DaHjϴǃNIm؏Nɑ}dyUM]]nX}{kd8k$<&k}Fi$~ZN־4v鮿,)UCmYvi`dgOIŒy]MRL!PLMG8 }/LbEi=EB67]<^2+c,:O.ٹ8M #CRov:l ٞ h,K&Ҋ=eNJ)2E~O +ot {!eh5'gwg|,MZMCl*G>`ZDH.L9BB0E8G |?HDq8O%(݈(=b!)>d6{|H5Bw$!Fe+ $LSUl"87evGkf7'uyu*r12娍 qMng&Trvq;E)?p{vR}JuaƙʇQSJbt$7TT B\}0b^s: j`hkWT9/ .eCsr8?wX$ڏQ\Y @WbKh* $a]4`JTuT_3o* cT5,@:8by.(%Z !=^|@:M/d:2Ȱ6bpZzU}Pr\'a;F\ևżOטUÔXռ43KL|;U48ϥl12,Z-H@OgODzA ţB5<Ł7Bv pV u=*SDD88i*˶"{]vr`Y^ooZ/ N%C@jKbtȰŲ.-$S(kt@N5JE0+tS&0w~s_<@}1HW@$\B;ؽCO Hz}Ai[KZxʵԳ@_F}h @MV8=@Cr?sKZ..4dD D%C|t3b$ItSvw ,)%ٔ8-2 |I\,MЗv 13@ܐAwmþ/%gL)/ɓ/8 >!ǐniRe[ DR 2[8yGxKґxT}V1XujTzv4Yu}rxԌ`E(}{U8 fasi.$ VSǢQ.3vuHْVZﻘX%G{.p_}#=ҹ AªB)eogwMw u_S:lPT6qpEOfbC31p7bqXʴ'"]V9;f&tRЭ!ai|Ck9בBV`-35{e4-hyqz QTf5 vo!HF^d55rVBcsExm{%)O韴6@%x\8v,xh+t 6L%q;‘w -^ϔɩ.9x, ~ I7ٝJx5ĆQ,(M%V+} KHF1AeM-IK ͍ pPҿJkَfs4֞8xl[)# 7uJ.b{(,w=UԡYwH;ح5.y=hpaJ(`Q)j&Hqh t|@^ل7mD3O\e! PЦ6Wpi7mvI~^m8XRsPvɼIG pP/R_/˛ʣEƯ!s5GlԛiWZt4Ho+8/z2wX8IV endstream endobj 138 0 obj 2349 endobj 139 0 obj [ 136 0 R ] endobj 135 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 139 0 R /Contents 137 0 R >> endobj 140 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 650.3 null] >> endobj 142 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 467.329 186.108 476.579 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 140 0 R /H /I >> endobj 143 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.568 372.429 280.818 381.679 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 140 0 R /H /I >> endobj 144 0 obj << /Length 145 0 R /Filter /FlateDecode >> stream xZܶa]|h#NR)\jwh9Rݥk]Rpf8ߌÊAևՇj%i ?RQ.=$ :" /H&`˞JW|W";c@;x[}}z8djەP՜\/cDRtE8ݑ3(Ux$?go__V\aLGu~|}wİ CPy7R_R5.st܇%#h܆y$QA<"Yܑ$[ )3XcD.8ц)%W (L KҙL|Ӹ$m.Q0Gcf%:}883RR؈@nEo lqJX'HmDp@#EQ- fLd7an\/l&٩, \ƶ7YӹfID&)x r_Y[5h.[Zk5qi 3r`c?c Iwp<79֫$pa[~TSM9?P7Nc J\Ǯ J32=Qj%(b4ns 5}?SA#-׵zqs0w5vU8eK{ўYu`ZIqQL}˧ {&m<>.oH0G` a%0D)-W&~Q  L".D FNt>B+8c} BP3ZaD0KHJB63󉭞 ҐC'A5H_^kSOT`7"\?{Rxͫ_|맛imid~!TG$D\n@{*}_X a@BB/Lz5dDט6~8ʨ r!u\z 25̧oŗ"*KU-(A&wQ#"4= !NY)Ei%6,GP!@[RP8>ja7(-I0HcΌESjA(P&1AqX/X& ?epK1d@Aqe|[CJYo9.KJSGZ_7}'d4SilЄf!0v{hrLX:vp7!Ygb =Ptݬ{cYh)A=T0,B:JJ5HW"*J Ω3+:_LfFczC. hKFitTJVSx%ȝ:T&f{#90ǐ4ـrv(9KA| 0o}b6`E0 4+mo4e'*Bh, [C"_H;BϪNB'sO~hӓox#aS-;-N׹]l#A&%Kϧozr0FY1R TPVt _n1v7 {3\sM5'Wg/CCe*h<"< _Æ۹B܅9E-/I)c9TFk,Lgl{+G!BGk58ԼʰˁpP) p!2ځ*:(8ppo}*.CU.usbrLR r, ["rAⲨ51ʳ :Oa7uUT :!aJ*PŴ͈8@8REo/<.Oi L)9`R"uv8mmcN%9m woX[j^NXT_0*&q>=2W ޡ5-k<' dCd//m^qW=pBˑiWg.jRw42Ɵbc~3 {9Mmn,4d,e[ ņ%sGo endstream endobj 145 0 obj 2517 endobj 146 0 obj [ 142 0 R 143 0 R ] endobj 141 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 146 0 R /Contents 144 0 R >> endobj 147 0 obj << /Length 148 0 R /Filter /FlateDecode >> stream xZ[o6~ MM,h݇b#GT_P )#QNj6'6`Kgg0A$fw{Ɖ'iD hHHr+*j-%^Ǜf8RεƁv#" 3r|fk!FT0Ԍ!T& *WQ cJ3$3aUj&Ƅ zQ6hlNj=OnRw;IQ?ġ!1ދVΏI(xu48౫I6 pbxV D؛w0Gcka|D‘;DSp#M4B-B紏'>H^\&`@9^}z1 ʣ JY>$j)Wr3 #TOF|M@ۑ@>M\/O5i=zSћ6]5PkD}(`f2wM|/0Гތ\&(%k3X@pψH\ lMPM+B $i6LiTPצ &q1]֬h 3l3z}ӥpGϟmO&y.P.@%{H'oK&d)4 hԠ%,4 t@,N#?IUTO٬a!O$t fHxzUm6G<H2'čv{ (jE1++3/%zyǔ0أO*!Tr jMp4zy*ap{{"kxڌMm;`Լ+cpS;x=L0T50h(sSjﻻh!-p$-@$zhF|aB#s1s_=K[3.hp h!̼E'+6yq{Py*5A8CI%6ۡgba5Va.*I=GO(䧇.pWg<ЗCM߷ҏqܖKO|͓'y0h)>lCs+})8J#y>tMXŃwPUuzVY8aўa#N@+>ԃ1w~03Di&iсf(b/}xqaH4d$8ѨELtop.E2V! kDrҪpYjzrgPt9d@^c";<*þLgpSޟ<(2ۮ(VY6܌]$g-D@e1C^Iwʎ9)9)\^wj]CD;dWtծ܌]r8]ǹg>h<ǽJ9}H/¾Һ>yOǺڐsYtZr?~9kwk7 暘sOaFE$b"٦_W9Vr 8)hm}xN< endstream endobj 148 0 obj 2585 endobj 149 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 147 0 R >> endobj 150 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 439.551 null] >> endobj 152 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 182.981 null] >> endobj 153 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.884 521.426 251.264 530.676 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 150 0 R /H /I >> endobj 154 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.884 251.856 364.094 261.106 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 152 0 R /H /I >> endobj 155 0 obj << /Length 156 0 R /Filter /FlateDecode >> stream xZ[ܶ~_AFk(QrINS%Ͷ~3Z#M$n C~N5Q:wF\pKC/'D8az1pAZ&_2|"M,}_vEzȷ? kX݅1`c]NeͻXWǩߴl/-'MDTJxa )<\O]|K/6ŋ/\Wf Ov)K%ޚׅib6920=~8};.E0ƽ ݐ 75G@?7aqR7${MTt[\}\5)3R¾>#Ք|V$ׇ\:-U4ɎXM18E?PX(U~ĩ&ELJhF Ց: iceUոSpLBc^g9.{ |p%1nOCl"`y!ÃnQH^SB܈m 8n ®υzlֹ=P!AE)jXe|M4䛐Dԓ T6q}nVGJ⢄o/q#tpI(Q玳knywZ9l 8*w@O{& e5c\AEVUvnblJ=0]0<}+QvLqSW]$j[\"f}W. gŕݥ@%YAuנ(VA&G\O])mz_UrJnTyYjY!Ve[ q&0pwpt[p(Pq(̈́-ԁTQBnؑtP\~ߥd%z]RSp{LъgH $}%q=,oٝ>Z*x@z OY&,ƃ/0l3jHP}?`9"#P@‚:b訅%ʱ:N*NP*%V ~c..w1,@}n5ف+Sa"/@kIM81"Ift#DEX*sH1i{p~+X8bp'Tlild2΋IZC@5cFkLs\Q:*VCvoXcv+- 2QNg8Vſ %Ս XC` '5qЄr0\JUu=XX':4Z> PyUQJ1̫ =#ސMK=&OMZJсe}_LpA㜷&Ns(7!I.qmu:wMc!a`z&8M>\t XALPc͆5کL Fcx7ڡE*˘t-K,Ý:bPoή,g)mvmU\MƶVv`5]`7TB;hg SƝ"iM(& ǠZ8:&*_ 2pPHqpŒСқ;oOS5PE.~uҘjna-,#2(~DiїnK}ۚ| ],bmkW,vs vT 1T (nYUf]:ԊP.f* ` ]S-A(];w\q|Үzn}65g|ݥQz74Rg)ƖaM|tlA0c8]JS487Fx巰 Oef;("`Cn.uZ{dLwvcR~b>T81W>L< edNv?+<딛gp^N"A^}/;ɶ'J(,VO \;T1ǓI\>6AwŒ>eIW-"\ 4նI[!0!&~mZ=-Ѓ&A$Z -XreQ;n]fB:X1)^QRcA  m5޺í7f~Dh+\Ǥl:8#n MvhH{-X_PWv⿃c>m9bkmkp>Hc*05rOcEEH:*;' *x*Ix5ٯ3hYC;U,0 eRNLD g'v`gN Ecҟ`sFPR{NLj&u%Cǘtǥ^Y$2]+׍1w@cW4:_ߜ9=Y3'|=K&f`bYP'06^(br BO ϕR~kӢjmOHHd0Q^á^1 }sx0ߋr. dB)C6@σPUAZ2.;D.Ob`n|lcJi |C3rxݣb =;S(Qnr,_U )ux,+S>&?u04 SrN{?nWUOCtٳB~2O}^uf`=y -5! ']oX@?}Ry5P>uTUx pX'?^w yEwMtz[py) lnq *&c]{b .߀E{?D? T CGޫw[?\s endstream endobj 156 0 obj 2951 endobj 157 0 obj [ 153 0 R 154 0 R ] endobj 151 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 157 0 R /Contents 155 0 R >> endobj 158 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 53.858 436.9 null] >> endobj 160 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 233.975 184.678 243.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 158 0 R /H /I >> endobj 161 0 obj << /Length 162 0 R /Filter /FlateDecode >> stream xYo6߿pu~T}i/p/A|nqw^!Zi+i7Dl?4 8u WĂl_5NV[<RS.cpE-_1ܑKln`?{a_`u ܯ3flޯ7oABFnvcMcʴfXHJo]YIM;cqO?T;$G(?VWh-gf4٠}תшuqh`dyG+8؃4"9,1L1 ) |y xut oO!32)'UqpdT&ޑTO5)v$T)cMu. %坣 v[x<';Mdw*eJ5CۥkoOkE.ݐ4'E .Ki=3aU!EH2)A*;eH rXzXc#:#h!$ߊQ1rٜT  ##NdeKwt𪽴1jIb5Ń)yc:+uZǀmxo9sN`Ъ>l.NLOąf ^j[%@nU3VG%S#6 "CpCw7qհ{|0c.Lc<)8 9/.+n n.]nO. FN>2wݝ VvNju}oiOa;s`(?Eʄ40ZC$.:@lbkA&@i>"!8-0X8TM'JZ_jh5ځX@޲pyJ(s}e;p޾'rEꢆv 60Y~q})$C>Ĕ ڋuMbVpMBs'8㒝L}RUd_ܓC?OiY DiQgEg0!p[l¥ΕKFpL°0nK ԛ)dk+wEy}F0~U9|ػz4ΎIMOIvr8k4͖O}e8)Ol} &iSwfa=3(@Mu "J4\ϖf>.Z-]_8O+w&;}\R<:i P.&SA>)-yo~Sf+׿k;OX9bXlGR?Ah eKArvA\uZHROϑhN0qitqp""M>, =A=Ggǜwq8<4;f>0w9U(Evwحu=4:Fk9gl&ZMx +r,j:_ё endstream endobj 162 0 obj 2132 endobj 163 0 obj [ 160 0 R ] endobj 159 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 163 0 R /Contents 161 0 R >> endobj 164 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 215.598 null] >> endobj 166 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 128.849 256.264 138.099 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 164 0 R /H /I >> endobj 167 0 obj << /Type /Annot /Subtype /Link /Rect [ 311.824 128.849 437.414 138.099 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 91 0 R /H /I >> endobj 168 0 obj << /Length 169 0 R /Filter /FlateDecode >> stream xY[o~_y n" ,P,EQyg44+i8A{m$=Es) x$|$?n8a l$صq,uV%r+*4|mb# {MaͷA5yش6fj>l6>ث?mvKN8#sq2")ID 9>o_8|]'myw:$y]\ NugdCOM+O+9ϏɊiGq8+."=B,"y)) R'6+ߓbO:&*$WBJ,z']'qd{%ɲ\0&žNrr59l.N?)!U%) h[|zc+!2~,{$]сJY?Fu(ɻ8VJg|XGH" |"XB71=n&BRP?7(A#nfDiޫH)9,X\Q{0e/ࢴB1ƞ!@5B\=0U(:Kh%ЉHM" CqSpI0BM"!o^ ˑdTIsXqrv ,BS#6@$m[G j0Bέ9r^%X# eB\}1x :7bP@ΖK:)E@2bј6kP#({,!^1yO6hͲ!:'O),?+ncY Xo,*87su0v A~>`q& \sBnL㋹Z i-I#9eρfΩBhZ4D<_訋1Z#dJe4Iz xDe̞/t@`TvwJpnHy0">f /f0D{a?IEّZܳ HV*a5$ie@׋xlĚ d'P,ⓛWQc".lHnrF98}`kcׁ^_ (- 8w7L/!^zv;wO!Lo(,Cjd]tIR`0,=$s[&oɇ &:>j[ƚe lGXH')=-)㳰cܠ\>#0! *ZqѰָۧ Pcf`QLw*%"jQ=P^L R迢#-|ChO U? tIF:phN6 Eph gwDKK WKQcY>)$SE:u GvN~iV J-TgM[®ޙ2q,r\i^!d` CZ%"w;4g!<[pF;BZu!v۸=c"q hp%5Ik2✉qɴSGo0ʹV(0xz8~P5n^"c6eCҐVP}ˮ:[pͯ+@0&hb* W[ZcLQ5ɖA|  [f< y eGmy1+ u̺KYcrkX(f\o[ JÂzrͭK;娞\ =e endstream endobj 169 0 obj 2063 endobj 170 0 obj [ 166 0 R 167 0 R ] endobj 165 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 170 0 R /Contents 168 0 R >> endobj 171 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 616.111 265.714 625.361 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 172 0 R /H /I >> endobj 173 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 535.867 null] >> endobj 175 0 obj << /Type /Annot /Subtype /Link /Rect [ 287.974 458.247 554.164 467.497 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 176 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.334 143.445 535.494 152.695 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 177 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 130.445 230.124 139.695 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 178 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 718.3 null] >> endobj 179 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.014 130.445 466.894 139.695 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 180 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 221.065 null] >> endobj 181 0 obj << /Type /Annot /Subtype /Link /Rect [ 161.794 93.076 429.104 102.326 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 182 0 obj << /Length 183 0 R /Filter /FlateDecode >> stream xZ[~ׯGX3s@6.҇7 p%jEDK$!ڦSXC˜7⧍`GI|j / 43"ߒxBiړwk&}78f~_M쯛úaZƄ;WW`@7>2xzM7o] 1ϊ `Ǎ}x]YwYݱ8cȷi\%;xN^dpݘ2#MPB @yv: hT$#T fԚ)[ g)G$Vs;6%s2VL*R> VX8g'($n>ք#x^0p-^GK,U ,܁zڏZ.RaE#rfd:- !DDZ~C!=R n6'5+|y5P\N/b>V-t(:㢈~͕hBdKKyU$Kf3HP!lIPSY#-x!Q*>ð-["'TMtLBb7R2ݲȄ}*qdU;zȡ{|,G +cbO֊H>tVBUnDm -yؿ3R;9;gcR9VpUۼ:\^pD na_ PZ6nYN̾ ͋Wkk!kzٹU}RVxlTSokgPc߼z<[knazݼmAm2"G4²ݕZ,Cʖ!QJ k hOJҝQ?+odu^H+AmqMj;d&(%DNkjhȹn]oCgH +32[]m_ʠ+h<w4&@N8K:zw)凃qV,M_& Rfx87dR/0-*ݼyM.FV**(Tdn,AsU!-fQzڌ am}k$5|w?n:Y:Nh (CT:֍]#Uiݼ1|CAEXݞR;t!wߡ*^慂Zm/bmډN7,FS"Cё\qj?rwyg; &.٧>]j 0|FDUr]RGӭ#^*8K;/oSNxYլS{tP"vJ%QAď6-ݯb&]V]Ϧ9*!;n}[b{6XFZp_[qšb/t°LZ'z~J :<#ۥ6.v5mޥY|?=?t 1Q@3c_F6hcm^ۑ?CDdN=RQ)-0~%=MÇSȟ47Fئ89fвq|!n^Qǿ(M2 e4 Ee4fx7lW@ ʡ&$1'iH"kӐ)jn҄Բ*`T%Q'1 i&4S+`3Lq1e>τϪÈy)mPۺ66Nwv-]W]EO0b=iV-O.+rmRclֶ2>/ր<6?6lm6/CJ'(AQ0)a|f\G hԅ8Grcq?&!x=vYwTFJ*mՖ0:As a%ߕDVjF4|_r@|>-gДgQ7hâ9Zqǰm%L~UZ\u^]bǾ`2x`D#y/Lf_^%/LL2o'*X:j4'qz7wFc endstream endobj 183 0 obj 2371 endobj 184 0 obj [ 171 0 R 175 0 R 176 0 R 177 0 R 179 0 R 181 0 R ] endobj 174 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 184 0 R /Contents 182 0 R >> endobj 185 0 obj << /Type /Annot /Subtype /Link /Rect [ 154.348 603.748 421.658 612.998 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 186 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 407.87 null] >> endobj 188 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 301.323 192.248 310.573 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 189 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.598 171.596 357.868 180.846 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 190 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.318 145.596 230.588 154.846 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 191 0 obj << /Length 192 0 R /Filter /FlateDecode >> stream xYY~ׯqo~ 68&1<} 5"L29俧7),lꪮ ' $okhIC%'!5R1& WTh3a,lLf~/|_7> krg|ؼn7ܼ| 2rkQ5ݜ\ɧgw%|olYq~o=Xv/Ez\}ri h}iXgWÉqFBT2JI;Ӥ$E^e$HSmmQ OszgI-9 bl^Wj+ ⧬ ĐBDH!uZؒ6!1QE&Sքn-qHEs챧@pV4f˩&Bl'zqDfy9/=@@ jyi[ >H%8[Fs,?QԶ7T%wP%& F㯃JBem'VtYȻeQlqo!ը1&lnmvqh;|w9O1HB8-֑hYۺT4bN$ e2KïPڪD,³Q Iq;(ML?'\$N2 e _xofTI,> 7?DGHch~(2i _x0y9o4 EYU` v9lk^a_yb"D-:Jq6I/UPUN8hZI m`,{$;%qF,&6Mȡ,@xwiY71#)ʍP~IrA*@TwۊGmkxȲE5A0(:rv^nxGO.*>N}0*r0ZFDyLQuX3̲үuG6(R/Z%C WѪ> .Z0SMCz1մM~Tm`w䈊I om99I\ruU-x-_}ջ݀ٮ2f;1AȐӰsۼҭN- JzIV K `hLax`Nq ;~pI;ZZ5v=RlvCUaS *21$ O띛V6N%ۇh4ԕO Zq.Z_OHGB.iOp N5fqPzr޼cW%;4$$Kե"nkRE3w#k[EɿQdu&k=5+Z⥍<.Ow$<Eshoo9,,n0}:|lKl+jT8;/ J^yJ8`j;Kd2+_W/IΰĠuK`Ʃ:|N2s䦀PKX?={nQ1=wiTdo|;ГO$`g~C몠C_G;3 PP5C `mB[X>>G'^0v_A 6k ĽύqMfr@$xJ'j+MBa 0+d`af>}{2LӗBQ.̓oi_l]kU4=~˫Pvww"\wlwXZɡx=K +? endstream endobj 192 0 obj 2357 endobj 193 0 obj [ 185 0 R 188 0 R 189 0 R 190 0 R ] endobj 187 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 193 0 R /Contents 191 0 R >> endobj 194 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 690.3 null] >> endobj 196 0 obj << /Type /Annot /Subtype /Link /Rect [ 190.164 520.08 368.554 529.33 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.634 470.962 463.024 480.212 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 198 0 obj << /Type /Annot /Subtype /Link /Rect [ 299.944 407.844 478.334 417.094 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 199 0 obj << /Type /Annot /Subtype /Link /Rect [ 197.374 143.195 375.764 152.445 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 200 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 247.448 null] >> endobj 201 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.104 143.195 543.054 152.445 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 130.195 184.014 139.445 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 203 0 obj << /Length 204 0 R /Filter /FlateDecode >> stream xY[oܸ~_A,RnKh-hQd ж44E{CJI6j,(s>wIg{&Xyq@$W \ &8=9 =$`ǃN=r\UV}uU>,-v'.WvVa5h2$cR']#E HB&:Qeɓ0 QF\hE5kAay@Y *=P}VAUݒ5<y!2k&=yl{m]tW{usM3,FG9-N$5 aֻ$=Cv>YTKTa9 7[SX7rZ"[o At:t0[ѫ@ec>-~/ 7E=f!:к]^ޤ93mzY#%CUhP%p'Q=җv_Hzs.ʋ$Zluu՛ y7C@ȱ1v[m.hXV Q!hA3v@hn7?X؏;?anuc BTt2 JD&v_ kVmc5U2˂94w(=?8$0tWx7ۏX#\9ksnćѤ.uk:J-PISٱ5!3'c&_yQX8Y)kJxԭt8n 6) {ʎE7DLMMU HY.zzٲa?' ,]x Zcm4U2`u]n3ޱ4?`3f8s婠-/2F >m#712nnZXkGΤ1#YFA5TfjR=յ\+=gŝ o4:YsmYU>@&I?tM%!@mI[HY7h U.|K̐o̗|dP$/%BN::P;AO@?4Z*}1ߧҡo6Lk3a(!8}j@ گjK* tTDrҗڌiQBhe7XfؾU Z` zP%9 =Rv}[Hd|e!ݺ1Ycd88}`(Ϟ([PD6itݗl*cV>*"-Sǭ1Nd")J$?#TN>-y݋*+wnҷ=:%ĚFc3Cm 1E4bG OjJ(vVR$`Q XhfgP@ F%0-i[&ы3޷} P1ٿ6~d]co> endobj 206 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 53.858 690.3 null] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 508.175 260.048 517.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 206 0 R /H /I >> endobj 209 0 obj << /Length 210 0 R /Filter /FlateDecode >> stream xWKo8W pф[wĻ=D9(6Z+)M͡El3K#4(A2 9Q,NqRLp;~/8fDt4 } (ޡtr_c&Ɖm2p),7}JQfLv.9VAlmJ>o#;X|\NQ B}?h_ϝQq: QQP\O4$?<рS^=EVux+j Q{;rQr"[m(Un|%sYϻuKL@aajp &h(rfrF{ $=,43<[=_6eauI/f iE9Xhֽ}#}Ke:\L)ㅈXa\g3l#ҹ֪þjb?d3OgvN}Vmś%oٛ ]4w>]p0ϵ=ʞ*f&3["v{^6׸O.a ь~sq lX,r7]Үl ꨗ<{Hno௫5p9c1Zٲ4Y[h8 VD3#f|<VCRCj}<;Z$ endstream endobj 210 0 obj 997 endobj 211 0 obj [ 208 0 R ] endobj 207 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 211 0 R /Contents 209 0 R >> endobj 212 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 638.275 351.744 647.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 213 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 220.638 null] >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Rect [ 373.984 638.275 517.934 647.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 215 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 625.275 221.684 634.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 216 0 obj << /Length 217 0 R /Filter /FlateDecode >> stream xY[~ׯ8`3 9vѢmjxۢF+’&)o Iq8rmXu;  GfRX=y&WP 1\&o;&l "[,Xv/a Z xw׸yؼYth?1_c'Z/^o <0&L”bH~ooєGO :˶rmmy^}>3Fc`ǝTQU| 0:ª8haܵBA'[T$x.-vk)&Еڵ?{l`SW.IK,INUQG@7vEA$*LSZ ]Wr3?"5\2YuN8fp>\4Au&E:9' r'?k'h'L9_OuzNp? b݀-V[:gr>x gY +l0~Y ^82Ӊ5Z>L4SubZ111Gv[5c$I)6m$MUѳ2,w*倌Քj42KTSOg둨//C"E,oNTb,ErSd%V<b#EఓK\VHŽ/@O7\0O J kK[h+L: JI:Z=I$BAETw?G^B+i6oOvu^,o#τk)$ ײK)mu,o]㱩 xn7_\ 2ծ/oVR_u228PO |_߂w۟[T*3aj)vتSbS=D._g=/kT:9 "vt?rQ4Y;^~zu#"|LJK8??@, ޺>Zt8)WAQ0Q-1N?H쁺quXbR^A,6a[[Q, _utY@S]Qæh,{QOhE{ \g_$&+Bv ?!~ۈو\ɒRaP s+ཱུO <&qLEOڿA q'F=LW]ڜ{Ӵo t+vMGETIڅ9Pia_n;99D񌑃PM-jGl LJ< ( eEB?v.jN+[~}n.@csq"0,8 pHS!E orh\>\títߟox16XQclh:/;@b ]+7wCҴOYK!$,e, 'F`9 G.KNS@_f(6J(}6J"=bClʌ?X/qH@ØȈTZG9\R 5qXs4,TXvN%CCh,$֘V1SING09Bp//#f/*!IF 8m`%lŸGEj{2Z"8 qeDMnzY endstream endobj 217 0 obj 1975 endobj 218 0 obj [ 212 0 R 214 0 R 215 0 R ] endobj 219 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 218 0 R /Contents 216 0 R >> endobj 220 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 87.874 197.421 null] >> endobj 221 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.568 596.975 328.398 606.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 220 0 R /H /I >> endobj 222 0 obj << /Length 223 0 R /Filter /FlateDecode >> stream xYk6_A(0Af> 6EL[ȴ-,y$9dS`wqxD^=W+Iwn_ȏ'+!}ʥǘ$ܣV 0WLm!=Xǖ(x}hxw@ڶ4fsr#/&FUDRKRU$*+6|xN䷲_ސ_Oa3\cl~v4Ӹصf8P!&JicO44?fE)zӓ4 < s,պ&! ɳ!$yeZ$/q>dvCxE hı o5nqv&&W;]d*N֯>QNT$2͒o?%A G")A!ɧ0<ul$Y㉯84fBl}6=$ z#ݮDVپAH"K1H8tw,R9I%]mK]G"&)CkU 1&R[dl?QDH@R,4I N^:Kɡ#wQgEBvf=3䑒wJ]v/5~$FP4[E5r6  97ءf&st :/xJ śA++TW% yŭ :3 &GɺQ*I6 ! |$|##q/#_ 4/" '#mbjT y0Ӥ嬧r^&FHgc~,&uswbq$"zOcʞyzS ݡp@ouRX6e9B ݄?{0̛ Ho̙[R+2?phkwm( ]@?DsK{йЃB2,gg.qƒa@;KO<Ӑp%&KQTjD1Юpg"v%9j:ץx5&SQ&U؈Z_4@(k۳ݾ0awȡwuB=U$w.˓j̱*lM:TV!eWGvKj{lċH,gn2SRemFR 5 =w?̢5j4؍Xh89b 0d?AJ1ͱ2jJH` _5Z/ endstream endobj 223 0 obj 2073 endobj 224 0 obj [ 221 0 R ] endobj 225 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 224 0 R /Contents 222 0 R >> endobj 226 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 676.3 null] >> endobj 228 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.994 542.575 257.954 551.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 229 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.814 434.675 331.774 443.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 230 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.784 292.675 303.744 301.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.784 215.675 303.744 224.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 232 0 obj << /Length 233 0 R /Filter /FlateDecode >> stream xYKo!Y[T2!a[n z$"=Uz$Rr{7nQŪWҗ ' >o+6_1NlDmTxzKHMTIJX2ClvN`{Maͧ`t|ݴ6fj~|6Fǿe؀\|2zGN8#w  ("1eZ3@>[q84ߓ$֮N:ݺ|ߗIo;O5:Qy`̢>qIex V3Cu]ۑRF\슜*☔XgFh.Oƾߟe')уh_9e%[s'9 506:OZq5lH#cs&8X^)ʡ]A(˘l|q6뿛h6Jl.I; R* !!R@^>p"ഉCTc? bt2Ópz,ֺ46%`G >*ʨ~ (pNC>482δ(iA@uӠ^(`q ^CՋƸ%FUV&nt Fqn,npWQ*i~pS I)yL;$7on@ 㟶):8u%!xl;缫+ Kû*9 8f\!ȍ2P%`XU?#W6RP.3DīaOK'XLWb5y#O+P Yv'@X3>РbgPn,G'&(V ]= }8eusq O* |S1EV? OX- e_= I* ?ᓯNtMHqc꧵B Q6n,%v^x1qQ$ZwQ5iФ"'9_@}3#aϝ-IuEI/qqB gj@Fu¼_LNֽAOrt 褧uPھលZ;'PWoV m@[}َTc.۹5 ܚ\M;4e`+ O͡(=) z@5{,= D<( '2^֭E%ۺe3L0\01whavM^+!\,yq܆%#*-+E@ZDI+Ͼ8dƄ vl]NGw\W$)T=JgߋsS l6Q5OH˲natex()}Hڊ\5%4BGڜJ7Ԛmy<X&d@Ӈfn:DJfY&E|1-Z> endobj 235 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 53.858 613.3 null] >> endobj 237 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 443.175 237.258 452.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 235 0 R /H /I >> endobj 238 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.798 394.175 320.078 403.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 235 0 R /H /I >> endobj 239 0 obj << /Type /Annot /Subtype /Link /Rect [ 139.438 260.375 255.038 269.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 240 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.488 113.375 300.648 122.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 241 0 R /H /I >> endobj 242 0 obj << /Type /Annot /Subtype /Link /Rect [ 322.888 113.375 419.588 122.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 243 0 obj << /Length 244 0 R /Filter /FlateDecode >> stream xYY~ׯ(,`d{l<$32N7%Ӈ=SE>(X:dW*R,Ν 'whwfz;cC/O w@)$tM %qƈC릨h~ A055Oúqhe nЯ2B0?1 #x)VN޿EL9ޚ,R61٘R(Y]*沉3& mW_xK|a_yVM̟eծW?i`u&_]&ժa Z4%1]].|2kf iImfw{zLٜK_Z Ir +(I׷Rp;>mjXKl$=VK'K^=,h"F2ưc|V .C ѡu3 Xs^ %֪.Q*$}5[zixԙ e!4@nkKh#>bPXa}23<4$ jͮ6 ?. X-Fز}k.E`ºijs[ڱ(Bc̢rQOǒ wV;뱰aE!!PHb0оus]?V ĎOފ}fSI,I-׭(iam e~ՕwA2?+m)?mQ8~ȳ N;+˙:=ēxI5ӚqiXaeuS9HTC>4-p[|)/N 4 jn%E53wJ~ȟ8ƸANȳ?5VX*P!;aLIe[heŮJ6퇹pJ?\ڎj]s X彘gزZ8ĂyK U(qPRϢiҀ; E*n=d9y Ro"3ޚuڌ`QW7U y9bͱqwZBW438td⥪vVJv sxQjm_.vI5Y?n%v5>ݘcbMcA eo,\bOutAwG}F0h䆪mjܱm6.L&: mC}aXP[d.x!9+jU!j.>B\ LHQD}U?GHaԒHڬ~z^TNBXZ jF!3JNhJٶtn}Frn2z/ S8rD %:/%fD>+PotzO=U=Y ǿA IYj;^B"> endobj 246 0 obj << /URI (http://sourceware.org/systemtap/wiki/utrace) /S /URI >> endobj 247 0 obj << /Type /Annot /Subtype /Link /Rect [ 509.724 446.416 534.744 455.666 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 248 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 433.416 255.144 442.666 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 249 0 obj << /Length 250 0 R /Filter /FlateDecode >> stream xZ[۸~_ASIQ%@4Mv/b"K.3q}!%Y"egRmdy\?' 0Hԏq4 }{Txr3&'†0?3颅!f}4UyWKpe^wjLaȧ)c#*FvW/W77Fۓo<0 1egCj#\^?|#pPp!L,üw144i~ "Ƥ<(8Pq#bf1%ŵ"[4@0˦vd4RHc_U4$U]]mrgΰzmO`ćFi~H^mőlkTF|Tu~ق*M`i BnԆE98]&y 6UӢIur&Fvu v]a\CʤUq&uW `b*Ћ+V{1cp_2"$ = ^8q|Fnă$σЧy1! ) S:&BRKҩz3|쏥O׀0+=Ȩ|&:ao 5K!2uWy߼_ojSU*m+"7^ -Dd9VUٵ˪k]K-|} ̤!&yXỵ!#k2>Ag9Et_g1aEz@Bm4mݥ 9Maj m϶T;{RP޵j' T= ZջU&C1_);G<͕YB{ȻO8S36ρ_mV-Hǃa':NH^?D/82qd|;4ƅbt'g'K6o>ycy"F%`^p]FūңA?yG=g\jx@`0 w ECìks+N!Kx$MY;={LAg?]Y b>oi ("DKGnv )pӏX/ʧBաZ/udMk=oټJgғ%y;2dkЧKxW|9L<rQ-,氕UPyHwHsPiӁ-8lR?Ig?ׄCR튤vQDB>k5[Tb4ów/?~~'δڪF9dr 8y]{dX\ޙff8qm*< 1,0CvRn $0i]wIsRMS]{N}]B+BJo/M")]Zl 'kҤAg<9j؃!tz`NFV2SnQmH%eRN6A {G,׽o-gTpm6}hT(sr`S oƗ҉}zKġgŃ9(|/}[wzાbêNwK.3=Tڰ$كT++Ē{<1/2W%?w_h@Xs)|gߝ-<>"^p10]d%cc bgQpΞ`X ̧Ǘ;OL"u|s ’V+gVRa8qԳX&ӕ d]ztiy3ciA"$`BvS]b/dDy rhɽk`D9q#.blɮFmBYY3Ʒ{$:jL~\g %\0baÅw?Ͽ0^<(/N/3`?eNT2-\bǯ%<O z/)D%D~l!'.& endstream endobj 250 0 obj 2392 endobj 251 0 obj [ 247 0 R 248 0 R ] endobj 252 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 251 0 R /Contents 249 0 R >> endobj 253 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 259.194 null] >> endobj 254 0 obj << /Type /Annot /Subtype /Link /Rect [ 411.788 141.175 507.948 150.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 255 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 128.175 98.868 137.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 256 0 obj << /Length 257 0 R /Filter /FlateDecode >> stream xYi_"6;(N[1 A6FH"ǿ3<$3v:׻|cw& ?7#Jv?5|E~D|;>>]ϲ\=1,ROc"Ò5/[yQ,,߰bݧE'c#nl.EҘYoi;߷|_![AWy&dMY!I,jKTк Q|,='_6qm90 1Zn3Ii FP>L8ދ1>!@A 1X#`T_Jg 4 λčawhJo,!xj%h_fE=vb*<%y׉)cAe;b6Xj'p8k~)Jxj~\iKq~խAf5D 2A LZwjA [SA V`*Sw'mVM&Xzl" 1$Bokr^ȾpZ7yKn'z'4:8ssf[6#XlLiu_sȗ2Ut/lK#bܪ/KUR>˄A j#)^=R;.Lsh*6Xlb{AMX&h E-)-ZD΀d4pD߳:\3HOG#&^wдeIܵ'~4:QPF]J]RU'U\|yܑ hC>[ qV$ ܮ.!i&TVGZPN (rzUw);Զ% BSoXuh6~8+ywɡISCTQ vsHl5>*zD}RCJ4>Pet8ng~M糃#@:x=̌\w'+kGU[ W d 4ZgBƶww$b , 7n 9lRf 8v0Sۊ|ߧF߾IubZaNy?:CP77`\!Ǟ\QnE)5 eSZ|]ꪸD=S^nXg6al*8;Ox{[jW(a?}uxL^zwp;~}ӽ,k4}Ab ihhZ&yA2as6p$78an_cm]lW|ڪA{ endstream endobj 257 0 obj 1943 endobj 258 0 obj [ 254 0 R 255 0 R ] endobj 259 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 258 0 R /Contents 256 0 R >> endobj 260 0 obj << /Type /Action /S /GoTo /D [259 0 R /XYZ 53.858 210.1 null] >> endobj 261 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.594 300.58 444.124 309.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 260 0 R /H /I >> endobj 262 0 obj << /Length 263 0 R /Filter /FlateDecode >> stream xZ[o8~ .7RtY`_E;A ˲-Ԗ24;琒u$'MĖx?~<7' ] W68 "JЀG[BKŘ$\Q]W GB{*_1Ͽ \1Rqj1.g b}TOΨO-#oV~3r팈kN$,rrs$?]Zeir7 -Ni9|470萱_%.7jN# S2hG)p 6Bފo27;{PfuJka̋76;U]i{>&)]7PTC'/Plwwn3 軐q'sύ"e&ݐ#/U u !Pb45/r6Ṭ̌B cx(}RSR?ާغϣoáx콑vF\i8 ˖AdB׳Q 7Ab c"_XW<\F= Ui=,X3`ORZۇYt ,ӒqvIY[3ܾyQrM>JM@ߝDD̩J˫>NB1GXnm q&qC0HC)v!hu.Úq K7[?iBB?\":G[zDł%ʬ9ZⲶ>VuzI]ɧMb|[غLŠv~`lMq}(A8^QCd\}?Ol$H!L| eS< zIJ(B8' R:B+y!s8j\=}v"M6!|pBΰf]F-HvC,yPBo`ns~nJ> 4>\u+ }D86e&V05ةa ׭AzL 4&tě ZɆ}CVQN95Nxf!Þ`B%xeث6RLAs׶944Wx PrgI/=s<2LRf`BE!ip1!$lhɄLCtYYi>4\ t`Ol_X`P^@H.xcpB)OcVIfE[ c*SWqт!ӆM;$#e.{.o@b"' I]^X.{J.R` OQA#,4=]YV{@I?Ɏ hvs X8J 2C'O.bxr[?nkǺci9o=@XW}PE΢7Oky锁Li5KBqŷwbs9tV_D`ϧ.Z5R3~?'h%?/څְ*5 j >xS 8 endstream endobj 263 0 obj 2515 endobj 264 0 obj [ 261 0 R ] endobj 265 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 264 0 R /Contents 262 0 R >> endobj 266 0 obj << /Length 267 0 R /Filter /FlateDecode >> stream xZ[o8~8˴!%ff.eQ4>4E Kt,T\]x.,r&Q:?++A7wg0)[+p=]s$vJe>oy" eUէM0.i1Qab  Ǩ?\~j9=~[ݾ$8mNF$\0q)9VbM(B.q]Lw_g޶Oeu4ou7;g*!S(IJ]U5c2WY%,7؉,OǺҼzZtp|lR Cw[6EahR5h_شMSsC[Ѻ2[*<53ej]?l\\j=A)* us1C黝 VD T5> J:zhC O~),޿MuZIG i}TidQIYl#Nڽpj-:ӥN'үM.&W<MfۇyӌVke+J.$MlG\`ežF`†6a(/LȠ挲Y`; Hy߰ .Ctg޳ DJXd-֢ @OpUDL@4Z˨3kπ`9$\pZCQF6 &Mr $K2C˶pIS~035q<$~f;Mt<^5g^ZIڑgq,ğhw23y*<2=z"ف. r<h!6SJslѝb39¤`t{A wĽ~-$oze@., ABNw<,! C {BB]-6!w Ersº+o_ʪWoX}=;<=7avVK ,MLn_]t{PȭMǭl݅J"m**zߠCmEdwF;m)LjFF9\p@?aaa.8a ^hcGL_ `8Z? m7 3T}P|#2>w:I#Bi^Sc<*U[TZ{a"NgBqTyFmZ?TpWe<ջi~nt9ʹ>?EG$NYQ?nD;tצFDUbeM5A'G% bN?Q;~?;>Q곭5gg6qHfE"&oQNhZkh"_6g]'PA^imӎҚ$״ǻcC^WO1| \5D]}w[u$?/څ!@W捋rf] endstream endobj 267 0 obj 2313 endobj 268 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 266 0 R >> endobj 269 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 87.874 718.3 null] >> endobj 270 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 707.175 124.004 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 271 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.212 707.175 560.772 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 272 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 87.874 686.1 null] >> endobj 273 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 694.175 229.0 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 272 0 R /H /I >> endobj 274 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.216 694.175 560.216 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 272 0 R /H /I >> endobj 275 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 87.874 557.698 null] >> endobj 276 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 681.175 270.62 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 275 0 R /H /I >> endobj 277 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.046 681.175 560.046 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 275 0 R /H /I >> endobj 278 0 obj << /Type /Action /S /GoTo /D [29 0 R /XYZ 53.858 188.662 null] >> endobj 279 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 668.175 260.675 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 278 0 R /H /I >> endobj 280 0 obj << /Type /Annot /Subtype /Link /Rect [ 552.879 668.175 560.099 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 278 0 R /H /I >> endobj 281 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 87.874 485.339 null] >> endobj 282 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 655.175 248.97 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 281 0 R /H /I >> endobj 283 0 obj << /Type /Annot /Subtype /Link /Rect [ 550.73 655.175 560.17 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 281 0 R /H /I >> endobj 284 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 87.874 189.995 null] >> endobj 285 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 642.175 217.333 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 284 0 R /H /I >> endobj 286 0 obj << /Type /Annot /Subtype /Link /Rect [ 550.826 642.175 560.266 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 284 0 R /H /I >> endobj 287 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 621.175 158.528 630.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 289 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.987 621.175 560.547 630.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 290 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 608.175 229.553 617.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 292 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.648 608.175 560.208 617.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 293 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 595.175 238.373 604.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 295 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.588 595.175 560.148 604.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 296 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 582.175 246.525 591.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 298 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.534 582.175 560.094 591.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 299 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 718.3 null] >> endobj 300 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 561.175 185.143 570.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 299 0 R /H /I >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.818 561.175 560.378 570.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 299 0 R /H /I >> endobj 302 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 548.175 230.597 557.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 74 0 R /H /I >> endobj 303 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.642 548.175 560.202 557.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 74 0 R /H /I >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 535.175 258.473 544.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.568 535.175 560.128 544.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 306 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 522.175 422.864 531.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Rect [ 553.386 522.175 558.946 531.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 308 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 630.03 null] >> endobj 309 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 509.175 224.815 518.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 308 0 R /H /I >> endobj 310 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.81 509.175 560.37 518.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 308 0 R /H /I >> endobj 311 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 496.175 349.564 505.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 312 0 obj << /Type /Annot /Subtype /Link /Rect [ 553.834 496.175 559.394 505.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 313 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 87.874 322.352 null] >> endobj 314 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 483.175 258.078 492.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 315 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.456 483.175 560.016 492.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 470.175 316.311 479.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 117 0 R /H /I >> endobj 317 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.152 470.175 559.712 479.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 117 0 R /H /I >> endobj 318 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 410.752 null] >> endobj 319 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 457.175 317.428 466.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 320 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.248 457.175 559.808 466.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 321 0 obj << /Type /Action /S /GoTo /D [63 0 R /XYZ 53.858 679.3 null] >> endobj 322 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 444.175 286.054 453.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 323 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.886 444.175 560.006 453.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 324 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 423.175 286.03 432.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 325 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.576 423.175 559.696 432.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 326 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 410.175 185.847 419.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 327 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.346 410.175 560.466 419.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 328 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 162.2 null] >> endobj 329 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 397.175 217.358 406.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 328 0 R /H /I >> endobj 330 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.132 397.175 560.252 406.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 328 0 R /H /I >> endobj 331 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 384.175 190.463 393.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 241 0 R /H /I >> endobj 332 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.458 384.175 560.578 393.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 241 0 R /H /I >> endobj 333 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 203.773 null] >> endobj 334 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 371.175 279.403 380.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 333 0 R /H /I >> endobj 335 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.818 371.175 559.938 380.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 333 0 R /H /I >> endobj 336 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 291.989 null] >> endobj 337 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 358.175 300.595 367.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 336 0 R /H /I >> endobj 338 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.57 358.175 559.69 367.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 336 0 R /H /I >> endobj 339 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 183.794 null] >> endobj 340 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 345.175 206.515 354.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 339 0 R /H /I >> endobj 341 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.342 345.175 560.462 354.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 339 0 R /H /I >> endobj 342 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 332.175 239.123 341.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 343 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.108 332.175 560.228 341.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 344 0 obj << /Type /Action /S /GoTo /D [149 0 R /XYZ 53.858 718.3 null] >> endobj 345 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 319.175 337.893 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 344 0 R /H /I >> endobj 346 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.488 319.175 559.608 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 344 0 R /H /I >> endobj 347 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 658.417 null] >> endobj 348 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 306.175 250.991 315.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 347 0 R /H /I >> endobj 349 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.153 306.175 560.273 315.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 347 0 R /H /I >> endobj 350 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 363.364 null] >> endobj 351 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 293.175 361.422 302.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 350 0 R /H /I >> endobj 352 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.308 293.175 559.428 302.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 350 0 R /H /I >> endobj 353 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 53.858 718.3 null] >> endobj 354 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 280.175 268.928 289.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 353 0 R /H /I >> endobj 355 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.892 280.175 560.012 289.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 353 0 R /H /I >> endobj 356 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 322.578 null] >> endobj 357 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 267.175 284.913 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 356 0 R /H /I >> endobj 358 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.778 267.175 559.898 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 356 0 R /H /I >> endobj 359 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 254.175 215.699 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 360 0 R /H /I >> endobj 361 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.144 254.175 560.264 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 360 0 R /H /I >> endobj 362 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 241.175 274.281 250.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 364 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.748 241.175 559.868 250.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 365 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 228.175 304.205 237.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 366 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.64 228.175 559.76 237.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 367 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 354.003 null] >> endobj 368 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 215.175 295.412 224.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 367 0 R /H /I >> endobj 369 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.704 215.175 559.824 224.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 367 0 R /H /I >> endobj 370 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 569.346 null] >> endobj 371 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 202.175 308.895 211.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 370 0 R /H /I >> endobj 372 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.606 202.175 559.726 211.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 370 0 R /H /I >> endobj 373 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 189.175 349.832 198.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 374 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.31 189.175 559.43 198.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 375 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 176.175 365.572 185.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 376 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.196 176.175 559.316 185.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 377 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 87.874 271.621 null] >> endobj 378 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 163.175 341.014 172.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 377 0 R /H /I >> endobj 379 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.376 163.175 559.496 172.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 377 0 R /H /I >> endobj 380 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 158.698 null] >> endobj 381 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 150.175 328.85 159.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 380 0 R /H /I >> endobj 382 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.462 150.175 559.582 159.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 380 0 R /H /I >> endobj 383 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 53.858 366.3 null] >> endobj 384 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 137.175 168.127 146.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 383 0 R /H /I >> endobj 385 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.466 137.175 560.586 146.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 383 0 R /H /I >> endobj 386 0 obj << /Type /Action /S /GoTo /D [252 0 R /XYZ 87.874 718.3 null] >> endobj 387 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 116.175 195.601 125.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 386 0 R /H /I >> endobj 388 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.156 116.175 560.276 125.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 386 0 R /H /I >> endobj 389 0 obj << /Type /Action /S /GoTo /D [252 0 R /XYZ 87.874 326.453 null] >> endobj 390 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 103.175 219.573 112.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 389 0 R /H /I >> endobj 391 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.118 103.175 560.238 112.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 389 0 R /H /I >> endobj 392 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 90.175 311.566 99.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 260 0 R /H /I >> endobj 393 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.494 90.175 559.614 99.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 260 0 R /H /I >> endobj 394 0 obj << /Type /Action /S /GoTo /D [268 0 R /XYZ 87.874 506.3 null] >> endobj 395 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 77.175 266.822 86.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 394 0 R /H /I >> endobj 396 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.798 77.175 559.918 86.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 394 0 R /H /I >> endobj 397 0 obj << /Length 398 0 R /Filter /FlateDecode >> stream xMwq=^̈ȈXJcI5"1Hp3$Uc^s5h@gTu__?X +4Įhkrzӓ/wO:x]|x ڗ_ܿhW{}|qO՞~Uׯ_?ocr W(-7/D.^Ԯ޾ݵW= ͬԯ^ի{dgUY忼8J۵f̃.Zm>Zm< Z~́7npK-[o7  zz>_"(% XH<~|'nSϚ)M:r MqtR{Cz:IՆ uvT#$5"5yeͣHM,kA,kEjd)R KA,Y*4diʲeџQφjADuNBPjE5Ld2e˚GX< ԝX<IJQ&5"5d)R"KE, Y4dir"ˉ,'tdґe @,Y&LdIJQ&5u'5"5yy KA,Y*TdҐ!ݾ}^} 7Ljj|Hͺt鏷O>7O>O7. uAE/ǭzAZOb&kIjCuz-7IvR&DY:td2e @,Y&LbYœXֆIJ'5MIM,kxR#KA,Y*TdҐ!KC,'r"KG,Y d2e"DI,k?yRQԝX֞&<}I,Y dR"KE, Yr"ˉ,Y:td2e @,Y& IM,kyRtIJ < K4Q4Q4Q4Q4Q4Q4Q4boZx\ ֊|.߮wm]W/ÛO=t}&)'Oqy^~tE HϏē :H 5aow;a8N }> KA,Y*TdҐ!KCYNd9#KG,Y d2e"$uà&uà&uà&uϯܮ5d)R KE,Y4dir"ˉ,'ґ#KG,YLd2eaPםXn Xn Xn Y d)R"KE, Y4d9DY:DAAA#A3ACASAcAsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsڿ8~f_إi?|X=7NY(-ITS L5j2dT^#պu(Gu%/ʑj]ˋr*LU0UeTS5Z绾?'Orcy;˕h,3`T&R|QT2_wZ֥$H.E9S*LU2UeTS5jLu2T'SuLՙ3`T&SMHF9RQTJ`#պ(gT SLU2UcTngf׉o:{w >;g~٧`Q~n77nt-"Bk<'9֭σu$DYT&SML5jMPTkZGTkZrZ:#՚֡ S*LU2UeTZǞU'@:HՊj'u4T e D,XxIJsIJFs&5 5#5d)R"KE,Y4dir"ˉ,'tdґ#@,Y&LdIJo&5{#5e@=eMH,Y d)R"KE, YIBI[ih&~=}ϓ=jwzwNW}&H88pwM'G

    ;˕ro,3UgTSML5jMQTkrZD#՚&| ՚& S*LU2UeTS5:dNLՙ3`T&SML5jMQTkHTkrZD#՚& S*LU2UeTS5:d:SuL5j0`T&SMZD#՚&#՚&44LU0UaTْْْْiGorǶ+~x"5_==o(9TFfq'ZLN:jADuEPbX;A݉eIJޅ A,=ؤF,Y TdR"KC,묓 }N^W4\Y(+I.,,O$73dT۰QT(GVl#z36Rc S*LU2UeTS5:dNLՙ3`T&SML5jQHުMT(Gvm#z6ʙ0UaT*SUjL՘1Ucۆ%lϟlo/W;9;ktzv- /gNpOwoΏۇwOWܼx~o?'q2D?K<;.{qrGrady|}E:SuL5j0`T&SMZPT;Rsf(GuΌ933UaT*SULU1UcT Y#[_`ȏok)z\?;xR,/_3VDn=yrٺ-s`?x'_~/~`wzpNm Dkrcy|v+T:SuL5j0dTe(Gu?ʑj]ƏrZ| պLU0UaT*SUjL՘1T'SLu2UgTS L5j2dT2~#պe(Gu?ʑj]Ər*LU0UeTS5jL՘dNLՙ3`TSML5j$QTk$ITk$rZ#IZ#I3UaTْْْْْْiStoDfk:>\۝/gG_$ç_O~ϷO>?=>|ܭU$Ws~qvrfh̃K@re| D|qrgz.t=1Xn,'(W;t=ʑjG9R(Guz3UaT SULU1UcT'SLu2T:SuL5j0dT&R(Guz#:]rZQT SLU2UcTSLu2T:SuL5j0`T&R(Guz#:]OTt=ʙ0UaT*SUL՘1Ucu\be?;ש[8c۞j?:m^ϋa߾{}vJk9kncw+qݚfy@zre|A|m9+sX(k3H,w׵$3`T&Rݮ 9RݮyG۵$G۵ Hu6LU0UaT*SUjL՘1T'SLՙ3UgTS L5j" # # # ]Ar*LU0UaT*S5jL՘j]y:QkZ֭qyR˖i^[o?:OYּymV|Uj"v=}3ݾi'/rk'ӽ^N$wN$O'k' T SULU2UcTN:dT:SuL5j0dT֍PTF_(Gu/#պR} S*LU2UeTS5:dNLՙ3`T&SML5j HnETF_(Gu/#պʙ0UaT*SUjL՘qP{BZt}N/+W]|dΨ4?P|^7o|3}?f}{>6ןE7s= /adk3cw]?!H^E\Y(_/?Q.,,O(GQ$Ʌ SLU2UeTZFk9y"QDy ˙j2dTkH#zʑjmrZE| (LU0UaT*SUjL՘1T'SLu2UgTS L5j2dTkH#(F(GQ$ʑjmr*LU0UeTS5Z?h1(2U[k~qvKm.~9zG z뛏w^޼¾>|ç׻^Z>ZO|~qp|'j PT S*LU2UeTSLu2T'SuLՙj0`T&SMHi(G5L#yG5LC9Raʑj PT SLU2UcTSLu2T:SuL5j0`T&Raʑj Hޑj PTkFTkr*LU0UeT*S5Z֚̉R]>Ўi]ǧ?ݿ=?r>q[%zdzσO}~qrm"σ˫:I]@mRy)P+uR Ԃjd2e"$ۦ&ۦϯ;656}~=嶩, KA,Y*TdҐ!KCYNd9#KG,Y d2e"$ۦ&ۦ&ۦ&ۦϯ65d)R KE,Y7jQ ium}}=8nh#,\i0}|~Z]u&v= }] )Yo(O',ʍHNɒ| :%rZdI.LU0UeTS5jKufFˍr,W;ʣ\XT&SMHNɢ)YwZdQT,RS(gT SULU2UcTN:dT:SuL5j0dT)Y#:%rZdQT,RS(gT SLU2UcFk=ȶ-B ^߻n7zxpRElu؃'??nP7{Drcy|}AQ.LU0UaT*S5jL՘dN:3UgTS L5j2DʑjFTk6#ڿ HoC9S*LU2UeTS5jLu2T'SuLՙj0`T&SMHoC9RHޑj߆rZ| ڿ LU0UaT*SUjLn->Ȓ.&w ۭc7Я뻛ǻn>pnV1s͚_魹xSsE\X>Y(f$7'SLu2UgT:S L5j2dT&ɑ6$9RF$Gn#L3UaT SULU1Uc5œs=Dy0In,rL5j2DHua#mIr0IT&ə0UaT*SUjL՘1UcN:3UgTS L5j2DHua#mIr0A>6$9S*LU2UeTS=.FM0p[<b-.vjnUԴ?pSkx~wm}i>s`7Ԩ:Z'˓4u6+T=h(gT SULU1UcTN:dT:S L5j0dT{PT=h$HރrZA#@43UaT*SULU1UcT'SLu2UgT:S L5j2dT=h(G4#zʑj{PT S*LU2UeTEbZ_GqD]$.+qpnRoY۾G]XNw]$v_ڮ}yv"7">ۗCwGuޚrcyb'Q^[\X>YTSGG?;ɕڊDymKrc9SML5]/ɑ]/ɑ]/ɑ]/Rݶ%9S*LU0UeTS5jLu2T'SLՙ3UgTSML5j"m^#m^wmKrmKrmKr*LU0UeTS5Zub>Q}􃣆ඝw\#׍ye=-??Ç5ZݷoG>:_Z[?۽]Q(_Q.,,O(7ʕ*SUjL՘1UcN:3UgTS L5j2Du^H˓#:/rZI>jG9S*LU2UeTS5jLu2T'SuLՙ3`T&SMHˣyy#:/rZI>jG9S*LU0UeTS5Z[kVyñvXtT^v=gGzRi^[/cೝז]/ʅ@rjLu2T'SLՙ3UgTSML5j" H6 yGAʑjmrZ S*LU2UeTS5:d:SuL5j0`T&SMZ$H6@9R H>jmr*LU0UeT*S5Z-Ҏ?ΞK_fq#.ɧmNzo?~H>==}oޝ|{~movz}i_/|ͣ+@Qre|B|@#:HT| ʙ0UaT*SUL՘1UcN:3UgTS L5j2Du>H@#:HT| ʙ0UaT*SUL՘ZԻncrYԃW.f+fL\Zoo~9w5o\/K_[b^;6o5mwt $y@h6vk+n5X+^z=̨E)~y oa Fb!$qjCuwTމc"Y d)R"KE, Y4d9DY:td2e @,Y&Lb9XҠrtbYw"5IXm@-R KE,Y*4dirs>'rG7 '1Xn,gT&RGͣPTQ(Gu(Z7B9S*LU0UeTS5jLu2T'SLՙ3UgTSML5j"UmHURՆT#UHU;RՁTu UHUS*LU2UeTSq#2V׺]+h-z[wloV9+=('ß~cf>9`~x~ƋrGwrady|EY(X(\Y^ٺF>'\X>Y(X(\YT&SMHrZ #yGu0#պoʑj7 LU0UaT*S5jL՘1T'SLՙ3UgTS L5j"պoʑj7}PTa$Hr*LU0UeT*S5VWd3?Vmg_k8`|^˶ _szǛ9*v機oDg<.mxkkApVcy<;˕N˅TGG#1Hf6$*LU0UeTS5jLu2T'SLՙ3UgTSML5j"՚٠̆Hf6(G5A9S*LU2UeTS5jLu2T'SuLՙj0`T&SMHf6(G5!yG5A9R R ʙ0UaT*SUL՘~f69ֿ>8SW/__H:|8_^~-%鯞m=Gm;vǶޝ#-v)h_W|q߽XY8}vN> endobj 401 0 obj << /Length 402 0 R /Filter /FlateDecode >> stream xWn6}Wc4آ)P@uQA`ű;|d} HF0{xJ~\$;dHaG %<|ӳ۶~͚F3whEq~]ۼ>~0"@ Ԇ`\,At-*iJTf6j+I5z`RswҰè ;SQzB.x, .jH:P!QG&FT,u(95CeRsH C5a8 ЃDnS}Gb%RJau`^4])0CEpHg*GجeӺ]<"\2<' чL{d9Ay8=D@Fpi%1:c wkS[)+hT,_U6oH<VhwnSLኃMo9bv6  :|)WuѐݾU  NM>3W7U~;p<("LhݶmCzM k9}6qBeS]K$C0mUOO;SPu&?}iZ_.\wūP&p4<ѹ=<ϽsGս)ML{fpLU;e ;J?p} 7?4;= endstream endobj 402 0 obj 921 endobj 403 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 401 0 R >> endobj 404 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 500.712 null] >> endobj 406 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.734 515.587 369.654 524.837 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 407 0 obj << /Length 408 0 R /Filter /FlateDecode >> stream xXmo6_q0 b_$ ].mn@MdɵdŰ,`9p,Qs=wq@ʇz^p':3Q a@ Z̏?$掤;gX 9Xt@k㸀AeÂy;xr-9u=wH#-+` F`8?O AyDcFaOWѦ[ރk6x> .(Bux##q浛O !!2FRnnS Ku.hNjXy>:wymqZ7|d޻\/vqm)*&%FP;pofu*tۨ9zG]ye>g;E)r E,l Q:8뼈PXܲ< infr' d (V8 P@ks˷|xbmFnB2@Tײ<)ZoZ.6J Y:ӥqz`Kx)ON| e]VQBLH.n_w$!5RB\ YdqܛqbYIb/JV[`aKY&8Cm1g0..ƑMd!>.>^4j>=UICԓ4BkI`S\(Y~wrPE=N~1&+=6^^lNCR!bXcY&z!SdoXf+'(>e.Ab@G<ThSSLNz1\y>%c4×>iD@ &A)G$4qjSԲcK6ER]/i9۾hi' ݕV{1'MPl:hއP*\7._[1QvX1'u(4NG:piTӖI6/>zwa0q'%B˱ciz1Zy,OXB/&g??C*$=pQCfų 8{W<{yb|sy}y*fex~yճq>ٹȶe薑Zsj |TPt7f9hbr~Xߎ>̄*5y~$Wrѣe's(u/G^S*`Vp۵+].jWz];X%GMl {dKacEA %DX2吙Dn. nΌC_rΗza c`)Y`7D)`IJe?a@P;fX$G.*~VN  2 endstream endobj 408 0 obj 1586 endobj 409 0 obj [ 406 0 R ] endobj 405 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 409 0 R /Contents 407 0 R >> endobj 288 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 718.3 null] >> endobj 291 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 634.1 null] >> endobj 294 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 363.94 null] >> endobj 297 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 146.068 null] >> endobj 411 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 718.3 null] >> endobj 412 0 obj << /Type /Annot /Subtype /Link /Rect [ 291.844 199.943 456.344 209.193 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 413 0 obj << /Length 414 0 R /Filter /FlateDecode >> stream xYM6Wv!MiJ.V0$4B E$(Y@J)-P>k40Wy_ib<,K,Xx1/ a! ⏿~>g]|زWgV%rs̆j1M^߁|OQ} Bj*/{cEq%ϣA`? `3-tG iQ}]S@~UueE P&=nBԋ Q^.+NxhlKnHhPY9Z9.%>rDU-Dd^jX%wJz`tlqA؎n1"C,J(^!zPRY*z)l'3$)D<׶#J+6؅nO,+^- 2Hig0^߉i4áUz+Z՘n􀶼ԇ . +"9-P;.P9{s^k} _ i!fA_[ydg+7I-O(f Xb( E+~0lʾ؎_RqdyD4K?qB.P5;g`Ú vURD[a°RfC[<('nG@R9h1+F|QuMГ\kFDxBBn1}q,)Y3~x%>h"+ѪR8-UhI7PX} 9L dskZy\mM,A)键t؟aq4f*lnB q;.wl!}ÌA8nTBxFȳ~@ÿg půtx_hlwa8,F8#B}]A"T4ͪKd~09EY'HͥGC.@9kqƞ'tQf5{,S,V[A\֗[aMv)N2X$&! GEm9< >Ή5|ٕ6fajt45>NL[t`RearOkWވ wvg|u368t&ZbC;YQ)3۸?Xr98v%nyx9V]X/5Jɓ8{V"\X2K}5{G6ׂ̉zyJ |M<Ћ߰;~q xW$P@iк+ l=TnNb"ȶahJu'vpr>MgsB"t ޱ6ˋ=׷kವqּ]OQ&y r(L}_NudF2V;^Ԍ(tCyݓ?T!7U,<6x7ğ+\/te,"V5d:|HK""hF;: ~p-.Odzۣėui=jtǙǣ૗o7zrx7a ]E] endstream endobj 414 0 obj 2174 endobj 415 0 obj [ 412 0 R ] endobj 410 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 415 0 R /Contents 413 0 R >> endobj 241 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 485.641 null] >> endobj 417 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 547.144 245.034 556.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 328 0 R /H /I >> endobj 418 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.354 534.144 530.164 543.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 419 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 521.144 182.784 530.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 420 0 obj << /Length 421 0 R /Filter /FlateDecode >> stream xZKFW4|I$Sv/7cfL`p w)RclaU|d7)$6XW%}qw#I'a@@%-!5R1& WThxc†p?>Md5]BAb͹Pԫ P&5@ ëoQhc[P^/J\!iKODy5F 붇9V(^Z6(7negCw%!-K3z̡ f!>^&^qڎ`qNwi`qD=6ՖI*UL.Cn!ByhW4ȗݿUQ>Bx"JB }ZƮe4PD6N 9z(hh58 sx8⌼YxWZs # a|ޭ"As漜Ra2fVFS-By7tPA :/lD:!6)mW@iR> z=IC薤mo}rBqNaTugK7'YE[䝪le1zb^ǵhYj4K/Vj#7_S{;TA7i$0-C#ɺI!hq'atF$5|.mO`&dE>ׇbAێ5\moӍSereq6w$ W[S;_Gէ9ޏ؀ ކ9lVEx(=,[w[\x(C=j^ŷ9P7-jQ)d+_6j+)D\scZЪU=_x{C ŊJ*?#*> D;bݗx_D[%\]ZW:N'g8.g*?F` endstream endobj 421 0 obj 2516 endobj 422 0 obj [ 417 0 R 418 0 R 419 0 R ] endobj 416 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 422 0 R /Contents 420 0 R >> endobj 423 0 obj << /Type /Action /S /GoTo /D [424 0 R /XYZ 53.858 197.312 null] >> endobj 425 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 437.328 97.778 446.578 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 426 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 240.187 97.778 249.437 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 427 0 obj << /Type /Annot /Subtype /Link /Rect [ 232.768 227.187 413.968 236.437 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 423 0 R /H /I >> endobj 428 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.898 214.187 167.818 223.437 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 429 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 186.187 169.918 195.437 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 430 0 obj << /Length 431 0 R /Filter /FlateDecode >> stream xYm۸_1.Iz ph\rw-Ai[In3dK"^ b[gpL+%ݘHEKD<%=ńsTxU//|iz(vg_g?<5&j{DaZ3x]R6Z/aW7z3OJxVYO?oWs0#_|hyfoO5!@]8c !.D+vpF i5hZe~۲Âƃa+88A<&ZF:\qx|GG~#Ajq`c(}55pfO1D!d< 8d ֍lJ/lH-ȿ)^$i핖UqP#7Opn^QUEe#`5E!wa/,o>&igSK #7`{aŘ\vXk%{ h a+XnsDWG:p1u0xeשZ&ic3 ,q PjB{$Mc= {ornO1{#W 8(˿89r`" ?o 'ْ.ߗRB#|lŇׂKYN BLГJty^7 Ss?cww܅""kO|u$=&L d(2s eKxPiIbb(ˆƁFzj[1HRłBcP"o8)ˡԄF4\4"yЋ|1bpшRI%:N\idM#sЈh0ݻlϖ%I98$$D_ .1<)`*Jy{O b_!a+4Qڄ#֎9wĻ'MSn^UXĢX[ 4U~.Kﰬ)Rd/rJJ ZEf/Y XQR |AbZX%c1ˢ$Jnm:9`yniBCgDz)ND~~(!Hhl{X~34#e6R,/Ejz%"źB G5KP1A0* 㲪(-$Ke|ۣ޲ZoaNi60/ȈFRkX$M7xVHɦ\+Rͧ:[iǟ8j|pX(1uSSN5VYʷx "z 1>Fl)rKĸEn ȓM"C,Oٺ5aVM`ן0r0;f4ˈg5Vr8 RV^W;P tYl!MrH|E ey`h2?v4&'8Pt)$Mjw̪Aq/qR8Tj WӶ) [q\ѹMQK#M*)W\N$) U9rҡTZMgm@X[h(yXphdBHS2=X;Z0{``eİlƆ, iQ75 8OrIP7վ'͸@mm)Nh<.0;Z0ąBp.[?a|Au=ۣX6KaT.2wl%]@}Aߗ0rq//z1^{&0gkSIc&H(bO? `wXuU!tt t>͛o|ЎGg|zY?CȁQ<=FNRWntKm/Oh{E#sR-g%vW2&dz'?J ;CO|wk ^ܳ.`O;uw÷};ƺT?(B]C|ryɋ≚70GٓQ|VzXU)> endobj 433 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 486.5 null] >> endobj 435 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 321.366 158.454 330.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 436 0 obj << /Type /Annot /Subtype /Link /Rect [ 221.814 321.366 366.884 330.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 437 0 obj << /Type /Annot /Subtype /Link /Rect [ 486.924 321.366 537.494 330.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 438 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 308.366 131.224 317.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 439 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 280.366 230.594 289.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 440 0 obj << /Length 441 0 R /Filter /FlateDecode >> stream xY}۶ߟPn8R $- Mx]888,DI0Gɲ)2h/@dQÇo>("o.24_>(2-`XR}ĸĔ B83 O^]czdH nD#~} hvs9y_gu=gu߿݌.4>[k5E) hBo&l7m>u^dz,K(OIu.>7B׋8z:ى,;@{7YͱdXwxA>n-RJ$`렸=zAve-s޽m,AD]wL[{:&Ahc1O)f.TW1iI(R.QnezA kR r%Ւ]IZIqs7o E )vd\o.; si֘nweuy-hgB.XCW;"!%r 9j+E8JVwaa'ĵ>RUHZ S1 љݓ%'t-i~PY6'k)Tm&06^M~y4=.!PfYtS_#D㿣o4t^$U1= ٸYgys,2ف#x k*j[UIxqPaYkg[JHXd"tjx Ah:lKcEF@e%}ԧg+cu`24cPud tL!J;EB.ږM?m ƏЁͲm Z%u>.(5/Pl12sOwj#Q>&SYp&Nz9u&@Rxb͝n Lj7A2p&>"]zj;FBXREο.R"Ml+X:/;;L}8wƅFC>x|twݠhƫ1B:xďNڐ (cEB1T^nv:@/Fӄ;  Wx$v-wy0RcSd~ PX\}ҝXwY*+*g<u&)0=6ҚȖU9OWEI`q 0P esW^5,E+Vfq,!@Z̕{@qXG X-/U9TPtEgq[VHAQ ]9"83v1#IBJL~7Sk>6~ZZJi"C>0c ^e{쓨UTZxe磨GW endstream endobj 441 0 obj 1959 endobj 442 0 obj [ 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R ] endobj 434 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 442 0 R /Contents 440 0 R >> endobj 443 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 291.491 null] >> endobj 444 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 669.775 261.718 679.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 443 0 R /H /I >> endobj 445 0 obj << /Type /Annot /Subtype /Link /Rect [ 465.168 669.775 497.398 679.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 446 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 656.775 92.208 666.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 447 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 643.775 150.558 653.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 448 0 obj << /Type /Annot /Subtype /Link /Rect [ 153.338 643.775 298.408 653.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 449 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 563.997 null] >> endobj 451 0 obj << /Type /Annot /Subtype /Link /Rect [ 81.638 353.134 170.018 362.384 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 449 0 R /H /I >> endobj 452 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 198.431 214.378 207.681 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 449 0 R /H /I >> endobj 453 0 obj << /Length 454 0 R /Filter /FlateDecode >> stream xYoFb)`o%y@q"QMQadovIJK.%K86yog (^r]O @rp8ąG `pG[&`~WTD]tl'e βf?a=x2Fl_ר!ʶ4$(f먨<d Nqu'Xgjju3Ly4LOLOQT/W]M摾H|F eԗhE+?N/c a,<::UU3@BVi IhU(6i@C[wr>ُ%Q_vF]1QOS]t<Ј ِvOovU߰aaUտ9 endstream endobj 454 0 obj 2022 endobj 455 0 obj [ 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 451 0 R 452 0 R ] endobj 450 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 455 0 R /Contents 453 0 R >> endobj 456 0 obj << /Type /Action /S /GoTo /D [457 0 R /XYZ 87.874 718.3 null] >> endobj 458 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.654 465.777 185.124 475.027 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 456 0 R /H /I >> endobj 459 0 obj << /Type /Annot /Subtype /Link /Rect [ 279.644 362.167 349.114 371.417 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 456 0 R /H /I >> endobj 460 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 174.557 229.484 183.807 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 456 0 R /H /I >> endobj 461 0 obj << /Length 462 0 R /Filter /FlateDecode >> stream xYo6_qP-E>8eWeaK" Vtn$OF (;s_rG9! 9QvqRLiń6_83VD)V h # ?+U2zl.Fo|%4=y/F0xt~R0M^3`˃1nZE:5&MM0gq?_Fn*.Ȭ=i11&ƆclYMGVv[oWǘvᜰ(KuDjV97l(J;n?/󡖔p1,;Y~oxiXCHxX)J`ZV B7mqÖ#r1 Or5/$òw/}0Z:ncG`o`˳UN3Ŭv҄d/cE pN,*CUlsU|c(u|y=|Q,/=9{2}rܓi N&WH>]6sh>/(盬qPMӿpD$*&cN+п5_oؒ,^0yc7t/&;2 OբC>yiZyT?lư-G+{`YPX's-> +3~ưˮǀ%v f Ys2IX yLy F1IV1T$őœ׼Ogi8Kr$>Hrvig1$&Ue (nnVͭ;$rgEIav;(޶}ViA$E٪t#E6x`2ZW'Yf$brƏ. tDA3K?:jnfp\.( 2Qt1(Ab8\piQ {,ïؖz\fvHDV ] t~-AZUXf~d %{˧4Fg$v1Fʙ*LLC.גSX8(Vd:]:w^YBdҠC$< qZx0#A ҤU!`S$Xlkh<GuzGh0Br9G'A8AM?`ɠ<< $M)&p5F躄O1Ngx$(}#>XQ.K1 gΎma I$Jft!B(6ۛSXʴ6dNlE03N7+k%]q]5eJ+ʻr 53nw5i(?n9X̵x:R.*h:8:7ac8nPai-q y 7uCCINCeSJ-.]>P lLm.LEnA G@9B8Jk$@疬> endobj 464 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 543.7 null] >> endobj 466 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 558.575 116.108 567.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 464 0 R /H /I >> endobj 467 0 obj << /Type /Annot /Subtype /Link /Rect [ 366.878 139.496 429.128 148.746 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 464 0 R /H /I >> endobj 468 0 obj << /Length 469 0 R /Filter /FlateDecode >> stream xYok gkIEUW(Y-!.!E kג5 CsA_{Nȃn'@KǴ*}䅁$*VUѺ 纑꼯T+DQ$a#E$/ 2g.Erf< ( =<al3ϋP*Ȅ6!A.T}"`*D b,,T\,$2I̷ q/aNe1v!& mCq*U.=ƃ fQuyTyd7nMU·E/!oL0 QH|A.d3X'*.ְom"sT\Ym3 ͭ$ZڌDS$*IVGOP`ejMaϖg)$?j e>X)oKg071Yѡs7eknՖ}Ҕ',ES2Cafʝgcv*\i[/(鿦 !G*3l;s^U1 Svs9՟6 ֆPm@'a,\"n $v)2QNˤךD02߸<}.o=<H6E]Iva;*ѩE2-XD=TC ~$IU5pt>l)m^ja{mWYo㊭`vu1.a%deݵw |c]6JҤz2$dPw:njbcyos`,/n.: 9!=55kQ6OV4)+R[ⱂbJƁmo:N JXG> UUuYAv<BL|Z"&`K6X{CtUh̰jSYB8I`V* VyMek\WhN]jԹ~Tz兓p r7yT; %Q(9dg xld*򇶀s4X<cXHt9'MB>2M'/=P5q_X|9:pʆJy/Za;tsuSno6eqP>4Sp@ּ?e~լqd.j|}4ˮ;d'<ﺧ}C/=+ n)_(G0w!s/ΑvUYm/QKK?k endstream endobj 469 0 obj 2146 endobj 470 0 obj [ 466 0 R 467 0 R ] endobj 465 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 470 0 R /Contents 468 0 R >> endobj 471 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 572.432 null] >> endobj 473 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.684 615.307 556.404 624.557 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 474 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 602.307 157.904 611.557 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 475 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 561.307 222.264 570.557 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 464 0 R /H /I >> endobj 476 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.994 307.521 298.524 316.771 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 477 0 obj << /Length 478 0 R /Filter /FlateDecode >> stream xYmo_1NEW  ȇ$phXEGRV%),qə}vv^YsA_^ a-~= Z2#T 9W 4JxE/8=f}?6~/8^|/9FjoXLa _|ipMvrq7r}t") >̥qcTw˿/^-;S4B$ݹ)ANṢ[IPQ\}\VIWPꡪln*aWPobXiZVEyuqKú}]N=[!<3"LӋvi\ `0E/ݳ>f0}, 8,FWCfY`$.Dp\@Fr6{gjOE%혵;h=Mjaf؃#Ah/Ag:8ǗOG7w |=0^]\q ?N?) kܖ겋-;W' o]_~~e"zsSx)Bz"*>WV3+8Ӂ{sJ!/-Pd[0Pū"*4 vi &]P%Y%ST0[!'G sg W_l`y T3IVMUЕ9JbDt+MS5,*uQB6P*i;IHwnL"hUpMw:qA$MIv%EEIe06`%Y dF@MAxVjuUq]>ngaPNU@5a4Cb@5'__oB?ِ!%2F(8V+0YP$|vZjyڲFBmR_[cF>e:[F ϵUĮCֺZe~8o8C nU&)*GZR1dY,LL 8^jzIsJT!hH{±-GQ!1ܗ̡ ߤ1(CX1zȈC^"LS׮m*6p , ⩝0ϺG~;%QYRCޥ/ɏG!=$Q(.̴7EQ_ , w +(?2S k6]r`F.79cXK7K:!GbX(4\,h1R!&:@ɩ.IO<7c )x̫GF~}+:elpYwAcŹ>$>pnryN&GhpO0`c-`i0q1tFu{:I\`[k>asr.n`Gpj&dاɩ4 CGnK-f0TNJMTDKͅ 4UuG (10p#ds}({\k&_o(- `ZdI]Tb jR YRuи/@"IN/@`XjjearReRǰ,5GVhz1\jPuAznN(a'Q+=˶%r?I}#jOMDu'h' ami2k :Fsm4؍e ZmLxsC|tu#57mV Bў~I ؅1yv+(lx endstream endobj 478 0 obj 2103 endobj 479 0 obj [ 473 0 R 474 0 R 475 0 R 476 0 R ] endobj 472 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 479 0 R /Contents 477 0 R >> endobj 480 0 obj << /Length 481 0 R /Filter /FlateDecode >> stream xX[o6~8 iH]6t@fAWg"ѱP[R%91PdYO/Hw>R2@s,OoA}(p29w,f@iqUJHsyDXvHV .GɈ[#lul|ǎhzH`:Fꛄs)LWpuxRM(|6E)V ageqt GS*N3y"+ҍaa6LQ#@x2:9]teD@<2;DLe>eEdزMcV\xmmsxHvڿm%*iYٶ3or XV5M si#AvAEtBO]-&ߚtwӆ&86xP &]++5X%=]VჷlǤEEM~z2Y&N&" ґb}>!1} s8IM.J̎{]xR`_5midz}v\t+WE(nCh%+E0fhez('I#w.[=k9ɣO7RPךEoYT:O_]n9&IIWY^8+XJO㬊閮 …x:ѵ2*#!QݬƬ_ón-ǘzuȺ lls?] ?}Uuh;n`/0=hV16uR~NV>SjԤZg׋uF\UbJ򛄲oP ?~f`n*eT1W"7WP>7 Tsv'ir,R p1Q:Xzny;ۯ.*W8iCQFu!8224&r?w qTcXƫĭP m#h=ܣ=CkG}4>(!n߇€Vi9i%e+}tl_s;A>Cv^#XIk_g8ۨ>ƺ I(ݡ&һ}kW٢(j9;4(e[&g endstream endobj 481 0 obj 1517 endobj 482 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 480 0 R >> endobj 360 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 718.3 null] >> endobj 172 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 417.9 null] >> endobj 363 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 149.8 null] >> endobj 484 0 obj << /Type /Action /S /GoTo /D [482 0 R /XYZ 53.858 718.3 null] >> endobj 485 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 292.975 101.658 302.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 486 0 obj << /Length 487 0 R /Filter /FlateDecode >> stream xY[oF~ׯ Ns#EK"Aa-,"($eY~ϙm/4 jC7g<ᇜl՗z#J@Drp E=!ē+x똰IhfXeO>#n>9xqzhoiHR ~|>:T f[SUmչLzǼ\Dz kto5oog;gUЇ 1Q + hIхX.?A%%o2Q?(sLoyHKࢤcEK9)C^T%KCzB"+8^TCT,Pd$"%DebR=5?R!Jf=#l@H8n$1*3ҁ>WqzHp֨ՄA>5 N!c9ٜmęucJE+l)$D‘ȫ8ۘ9ã,/(AÊ|cXT\ w$߃'RlMgeU$?5*|Hr-3e[P8BIT\jyΪDtBC&ΦCfSp.L18T9hU jj_9ϗ}%R ꭍ MT8((Z`uP$5c C@tuoا*PavOBݠl~i{ iwj {C1r.ĝ^6zK,+( ^]_-lK۳on '^@;5 +RH8RjͨR.C.gbMG+%KBmjJԄ˧|*yARܕ>  fJ2p*`kHvwCz z~e%yQK*zĖŷ0;SL8lD?q0xoz |е@<6&@CĎ`=.T}}d\vyDZNm)CGcB`rD M˃|yp˱Y1C^*$ 6,J,Ѻ^ :chߛ!î/"1@>o_ۘ@LIU]U0w\ߵ!׸\A g0Ikm-GI4XddNG#t L_ *'aRb_x_tT^[Aj4A1:ҏthf.U g<рLpk=F)"%?G%${F#WD|l%OU IS3EMEh6$=,VF"xBA\l_='ƿ;\j"O "my-'TQmC 0%zh N >-ԎH-0GE3?کky83BA{l@[4ngxPNliA~ чgt[_4I#zʡ1!ܣ|-Zc:tl&pRb`thpgͻ =1s@8ς`j1ŲD5Ҏ?6WG9Vvzho}sFUC C->}͆d SOIgo93D&TvtMt)I_g$[jƏ}, _ D|Y¸ AlkmKѥF17x{ uqɍby -dN6n C6m;}c я$b˪evi5 k/[Raefv; Z $UiC@,zBUG3)b` GgԼo:O;ŔVN=3եr҅ex{.Etj擷e"v_<1q5|$]lnAcYB" HT k&s:#g%H&K:*u| 8 Hq?SX$gn{M6x{責LvL-2OHeeAr%g7s.aqk>xXq#{JS_0%#6֌=,z>D,[ [4 B[VQ endstream endobj 487 0 obj 2308 endobj 488 0 obj [ 485 0 R ] endobj 483 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 488 0 R /Contents 486 0 R >> endobj 489 0 obj << /Type /Action /S /GoTo /D [490 0 R /XYZ 87.874 234.868 null] >> endobj 491 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 576.431 135.674 585.681 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 492 0 obj << /Type /Annot /Subtype /Link /Rect [ 488.624 576.431 546.984 585.681 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 489 0 R /H /I >> endobj 493 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 563.431 211.814 572.681 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 489 0 R /H /I >> endobj 494 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.194 353.087 287.994 362.337 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 495 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 223.743 207.814 232.993 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 496 0 obj << /Length 497 0 R /Filter /FlateDecode >> stream xZm۸_1 46 IEܢK{ lP[I&ۢCҲ%֮QzDq^p83o3^/m8׳vc RMR-@p">$,&z&evƪO[?vwiV(u .p\י1bs1t 4_ѾVOSz^h)~ Fryp"1r0JI>?خY](ou>姺hs岘??\r,-#jT%C:!婔R2N .+b u2:@ad:3h=1:VX!sfa>yy\ Joq_>ˣ$\"Jё.{ O{5=4FMWE9}1Ͻo3MD+EFyh 4討Bu @@[:̐,[MMyW0X8nFVYTM6ӸtK) hJKH1A1武c#+IEkqBGL шfgڐtLncANhb."\ڶm@{6/-2ϛ\ͦ*fݬ 9A?F luBxjSDcV70 SnQ̡rvKARA 7>0gT,dQM O)#Cc^Dq`1P^N0,m rþ[;Y)m?Rvwԣ.m3E )Gl/cm°Gj{wL`R(J4/0?ڕ endstream endobj 497 0 obj 2188 endobj 498 0 obj [ 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R ] endobj 490 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 498 0 R /Contents 496 0 R >> endobj 499 0 obj << /Length 500 0 R /Filter /FlateDecode >> stream xXmD_1OTm)B@!BrMb^_8Uw&9Z*Ti/3os&Is_QRyXxNN |!<5J KCg 6f^j3cc lg.f@(hz8"%-&iPV:hk.5N^ٓ mqŇq})3npС"z"fg^yN[0 p ϼ?ɼt0z-4{[Tkz>VӺ'iE愕ߚB+S \`Ү.%Edl,6EKtQWT-m=隶uUhE*M4c(4-DWW fԙj[>0USoמqa@ \ :SP+t7ZJEmi5ŭ9d>ry@]/6p=uZu!7Jŏ:9gr$rz9:פ(ؒ&G}:Q$q8jTy/S<cl`o' + X`{Axǁ`Lˏ4rF7}C PrbQE|So_|FmˢZ&Mcp$?@H$w=)M7o+Dx ArM[Wdq$A-{l1T,lS4q4ܦE.KBEa 6KZ7buw[diT^l鞬nh21?'`kmKqa  J5nYPdj݂-]pBV;j7uWIo<.ӱdq=;YiY#Bot=_QUK E_o]YWS7yi̴oθyVl!߷sS LCYZb']C [;c㌇ kT'зlT)r ]Uq/f2Ӥ}eRe]ã6F{of 8TgHH@OP"A[>X/ؼDJ8Mq=-Sf~o"dhr#;XLt?*VEd>.ϏpQO ]gX@Ѯ/u:]2iċjUw;Tju3 (# ƞ4NxVӬo|}!܆w5E"l3qbhfLR&fxҍ[7+궐'ܖ$^XF⾜xugo/a*s~5]SZiޮWyzk+ĉfkS m_r}<+.Jp̶-,dYOhs@%nbo]ݶ e!1\h$Bp/GWhw gWJ5[O83eCvL&HIsJXR@Um@ufu~ɝAxD{fEɰijnqIawswnQ_=}ҳxhX|Nbt7顟XTwg]҇> endobj 502 0 obj << /Type /Action /S /GoTo /D [501 0 R /XYZ 53.858 659.1 null] >> endobj 503 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 188.975 130.664 198.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 504 0 obj << /Type /Annot /Subtype /Link /Rect [ 187.344 175.975 230.134 185.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 505 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 123.975 130.664 133.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 506 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.084 110.975 388.884 120.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 507 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 145.882 null] >> endobj 508 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.444 110.975 540.044 120.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 507 0 R /H /I >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 97.975 193.994 107.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 507 0 R /H /I >> endobj 510 0 obj << /Length 511 0 R /Filter /FlateDecode >> stream xY[o6~8Z 7]8C1- ] ! ŖJr9,"})ЇN"; js! (TsIHR1&+OU¶7lf# 9aRLa}x6FjOپ<>WzLJrtrg0Mw$C˴1Gaۋi?e~ *7eN`ˇ*k;1y= 3JG,"ل 0] qAĘo0x lWltƖF CJ sE|go7ς26PM.:^.D j_[2yU{ ,95p|#|`Ϲ8I!pǢPk׺ʊ&]|k)|6+~9]7j=]^D9oRweK)z*BֿV'6n;]TP]yyx1]WHӊ-Y$"H,z~@THK[TQI49¸ djژnĹ- 0""J,t?}dUR4Յo -|E/-_fv3bq/^hgG|CajeAO jf )sH{xBV܏^Q$zP0M{apdЊxsq;I{# H{-,O^r=Ưe4^J}r j;e2Xvl] 3ևXI;Eܑ,~l5ѓYgmNutQ_1;+׫z]r@v;}wHqa1ռI]BڄJ3q=̇HW﯃Hw?e d'#glb0P`Gc \`8*:PJbszTK~x 9֛nhm)zcajF?P mkHhg(Siũ\'֩& „uUjrD13G^b#'LCCFcz6B84)|,ԕZqCfuTP2/ $k?!)G!/=D6J" ]\d"dr71f|n ə/-,%u :idWY|hR;"AI ڡ H/mx0uDCyAFtPg*pM}STUC<X?KJ55=>f[볶<*8BUKqɂ;T.SSORM2yHpypGROy#¡}2ol̄7XZ39Ho8$sxvcN`ZiQ:Xq:PfA.r?4'^С%78?L\wg <VJ8J:ԞǤqjP`lYv$RnS! s7VC#%z25R3iO\z>? I;cƱf7 ~x7KS endstream endobj 511 0 obj 1753 endobj 512 0 obj [ 503 0 R 504 0 R 505 0 R 506 0 R 508 0 R 509 0 R ] endobj 513 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 512 0 R /Contents 510 0 R >> endobj 514 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 692.175 168.788 701.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 515 0 obj << /Type /Action /S /GoTo /D [516 0 R /XYZ 53.858 703.3 null] >> endobj 517 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 534.269 233.928 543.519 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 515 0 R /H /I >> endobj 518 0 obj << /Length 519 0 R /Filter /FlateDecode >> stream xYmo_1E?4jqmri|8(VJ"B:riǸ?ߙ%)\JѢHH&3;o  ^W$\Hvߺ{ω| ?rϘwJX7>_0Zfnel_b'`by2]# 9[ת_knPcVCRe{]?[s`bfO76fh_/YqB{DV,d,lCB^ԯ!Kτw0Ax&Ѝ6 t c?L1c]k7&m9m@= ֎i:!Tן` 19ТubҴvj"+$'l}YrjwZ>F !qNqy_Lk][}0{~+?h'cbOrqh-16CE?nqqO-0 @GBCY}Ir D5,z䲮KlȪʰ{UJ/!Cim7NDő{']Zm+fͅԚ\DQB∐ONA Ru\5WKϻ}LF'37LYi#ftsĴFxP:*w$ی/ΌUѝ0VA#y3-S; K$b,- eup8Jn[Iô_H:FSH!ۄtF&B7k> 5p% Vˬr}^ɹ ]R-m`xڶ" l |o^P5۲SX&b`ST.ik*AG6>uKd8YoƢn{U+ID_@ ;Iɟ@BQrW6E,%M#wϐVZw/e*xq3]C#P`LVCJ&h2MYeR:ᔰWպvfh; BZ" ;,"̠ʖ4S0nSaW(u<qdQz|.t;%N~]TqvꜘH<3ȌGT8!+|ͮɥ 7>PG#-1{Ǽ#tV:ҕA.nscNVXYɠ6/Dŧ?dLeq\dxfǣh,"0r$58" }{8:8y?d89r~Ɲ0;bG^.O2Zf|blpCWɱ7_x8#᷀Gjʊ*m'7wG1sboBp='n֣_?Vf_#pR'܏R_M8W(d[UwJJH͊i$2#>쇦Ⱦ3jU&I}:BVͦkċ9TMyY yzR {MNo8{Suʵ~Il5 292?2SZG;Qh4c:jWg? ofg #KTQ+# đU=۶EkC\#;cAӶD4&8\TmtK-g-˘ƹҁ ݖ;lPn%e~ A=0#/qWp7FtH^&7{0G0F6h\>5#^ieG6Q~Q8qk} endstream endobj 519 0 obj 2105 endobj 520 0 obj [ 514 0 R 517 0 R ] endobj 516 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 520 0 R /Contents 518 0 R >> endobj 521 0 obj << /Type /Action /S /GoTo /D [516 0 R /XYZ 53.858 280.295 null] >> endobj 522 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 345.224 134.004 354.474 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 521 0 R /H /I >> endobj 523 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.234 280.473 177.364 289.723 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 521 0 R /H /I >> endobj 524 0 obj << /Type /Annot /Subtype /Link /Rect [ 447.794 280.473 495.594 289.723 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 525 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 267.473 322.374 276.723 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 507 0 R /H /I >> endobj 526 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 239.473 206.144 248.723 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 521 0 R /H /I >> endobj 527 0 obj << /Length 528 0 R /Filter /FlateDecode >> stream xYm6_1HU > rkf^$X#I.E )z>ɇ!g+6|cjj +.aBR*I~ۂv~MpNzg?;M_U4規`>Y]FY]/-ճ3`n1) 4F`UbMW7U>j)|cM'L Hi\ZzZ+Ը T9pd8iv'& gvvDEj֯NFI(zB 3m@ н!Xk4 F.ΈH.dCN->}1T]@8T PcB'J=dj:EqnU1۞yL#6efT诳A"$崕harw)|S5)iY/aD jD 糵p+n Brw23eQ:3ZR.)ly{,&+ .#wA1rAG)(6\P|#TPeE\=*'kp,\* P(HuOo+2W(恲Oș~JPE-swjWL$ p^ٷ(W3QiP1*@ڄ!EiEJNDw:8G5xLe5[IX9'T8ں )ӸmoG7\"”U' ]!UnDE \fv)t4`K ml9xPZ{}G{t*v<tjlO}>1VwY;K/SM`g0 ƂMx~qC5m.}m24z 'ߤm:'l śc_K}$'tg?[χ6p|4r\e@ \/%, puXKKKذDLQa&Cpl5;\2qgqΌ5BioK`)E5]`Ha<s8@ DxR|ulf چp<&G8 gѼ3їRg+ Vk,s}p l}s)߳ ǰp> endobj 531 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 572.3 null] >> endobj 533 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 281.359 105.548 290.609 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 534 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.568 182.417 167.258 191.667 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 535 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 92.446 177.688 101.696 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 536 0 obj << /Length 537 0 R /Filter /FlateDecode >> stream xYk_1uk`G#?Ե:k8޴,cIjE3J| h]{;^r>8a}n>Px;q% t@KBjʥbLиjA} eM=f}f0:0fqvj62rzR5ݜ\mNj]DSS@/d{ȇHwU~ʍAkg=""of'o]_Y7jsAMQ8MN_R?3k=jzHxyz k9bufZu3؆lxJxU/$U~\x:?:K7pu]w-řlS^?T:<1&uQFlI2$qGSa’ir$ŷ%9ǖܧ*0&EE*&emw ˠQDӠFTaF }ڨyю]D|6^NvqZy3Qԫ!..xHCf1->D(?@T^1Nx+;6Z-"z)nmSǹL4JSPfͳʋ4%UrYO &w&G C2yNKR&qY&%*MRu~ UNVM2=wiuOpcD]4LŇ6> B(&"4vCƝ-@+{}0I{My',%jQ.}l{vPyhX=gclLۤ?}`b[ 1>gkRTJn|_4']M0-Ĵ4l|ufQ(\Yihd!]$&M3{`dߐ5BC?,Hm^V$Y$!7q1- y7].}%$%YisOv{n7W◤8R_DG|pQBwU'~$O5[Xjs)|g5䛹  .S yx>jgy\Wx0.7&9s$%W9Mzc7sHڄX쨖XBZG7"c eyE-IIZRئU \I}_ W&*Y87$+Yi;%gM]0[#+zETс3PhUKU]C-V}EYܛ ɞ6cou%;Y8 CR.#!?dV^Zcli]&:8n!p)<9Ьd(ŶZL)y!20e˩c6# =;En PN)z~㏱ Sfs4ȹgRҀ{X@Gf=ɤ2 s;g@cx-z9i }^vhMm5 endstream endobj 537 0 obj 2256 endobj 538 0 obj [ 533 0 R 534 0 R 535 0 R ] endobj 532 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 538 0 R /Contents 536 0 R >> endobj 539 0 obj << /Type /Action /S /GoTo /D [540 0 R /XYZ 53.858 213.077 null] >> endobj 541 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 692.175 198.258 701.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 542 0 R /H /I >> endobj 543 0 obj << /Type /Annot /Subtype /Link /Rect [ 74.978 343.808 141.678 353.058 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 542 0 R /H /I >> endobj 544 0 obj << /Type /Annot /Subtype /Link /Rect [ 167.238 343.808 405.108 353.058 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 545 0 R /H /I >> endobj 546 0 obj << /Type /Action /S /GoTo /D [540 0 R /XYZ 53.858 568.415 null] >> endobj 547 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.668 343.808 482.928 353.058 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 548 0 obj << /Type /Annot /Subtype /Link /Rect [ 296.178 317.808 511.828 327.058 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 545 0 R /H /I >> endobj 549 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 304.808 73.298 314.058 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 545 0 R /H /I >> endobj 550 0 obj << /Type /Annot /Subtype /Link /Rect [ 118.898 281.952 191.158 291.202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 551 0 obj << /Type /Annot /Subtype /Link /Rect [ 277.298 281.952 343.998 291.202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 542 0 R /H /I >> endobj 552 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.258 281.952 473.518 291.202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 553 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 255.952 268.958 265.202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 539 0 R /H /I >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Rect [ 361.238 255.952 433.498 265.202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 201.952 203.818 211.202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 556 0 obj << /Length 557 0 R /Filter /FlateDecode >> stream xYms6_K=#Cx'i/M.]?T-ATHʎ= )ofZN,.v,N8ap^ 4>Tq%OGBjʥbLxZ at椁.iV˂|0_~E ܝTkt|8y7'_!#eZ32&m Mɿs;_C}^2\,Z'/6(umtGX5=Nmø-(8@y(ywNORkQ +jq- /ߵd_Sc@9hpJ@=U@!Ϙve-|1nY>wqlV:Ζ$d\ K j]vrUǿ_¿9reVѕy1 tfby ASJ'S}CݺXf " mu2 6n9n(oWs6\ s _ssV:aUtՔtzi-6 熻K!rz xZ᷇aa{?6( ~; ^ <ګ3n&v_e6_~nn̙KTQHO 3IiJަITYɍI7"Ȣua #L(U \D9҄l靓WkhN䞬tjCDԡpp%I1avc ;#s(Xҝٺ["-o.7Ø2˔bGuE`yo.coJ4[|.489Sr3g(gml ۆT0mQk0q0w| Vn~ Ca~<"GAA p(#᛿:Q2-ɋp CL>tP32F ~wyw^o Oj7-`j kK>,K:_'%LΞ%iJ@ m\t{dX&EvrvU*x_aH_]Bor~ap  ܈ַ?_9=8̡'V2ޱ)^hJٟyD{Hxu.yۺy_=0{NgtNsbǧkrtMg*Yq(dlI|DVѬrQ}L9j>jhkDմ!-1ǞU=Vȴ\C_ ˇ_ߣ>Ad8Gq="!d#y dF~΢"2@uP9\qt$p3\Z"A:J?Hu|m3y {o3`K \HMY,ظ/1~̥G$sEGq *a#M:.>A"`CWf|?w$(o[2*8q4fȄ2p,7M"}9׺h{A}?r㾭sDXfU5ni8.fH;]=>ROq{ª ~krūM` b.Uʣ]"ڭ|@c< +5[w[kw;+.{}dg""qN 30`mRy~\eO߻(Zfe] F⎝ހ <6tR˘Buv<лnd`|%כMރ0Hxf8u]HiLk75 /*k={*}sD>pe#7P^ Tޅ]{=0m6gu GW09OVbxZ}+rVp6Hb~[&qNUۉ r]짵 HZ70*\Q3Ҵ!LSV%%[Wo#Y%N` {P){d~y JW6+L}$'&Exlra|}<κ{} .i>~GL+an=V-lkb-h%wuyUu74 endstream endobj 557 0 obj 2304 endobj 558 0 obj [ 541 0 R 543 0 R 544 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R ] endobj 540 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 558 0 R /Contents 556 0 R >> endobj 545 0 obj << /Type /Action /S /GoTo /D [559 0 R /XYZ 87.874 648.9 null] >> endobj 542 0 obj << /Type /Action /S /GoTo /D [559 0 R /XYZ 87.874 582.7 null] >> endobj 560 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 397.09 154.574 406.34 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 542 0 R /H /I >> endobj 561 0 obj << /Type /Action /S /GoTo /D [540 0 R /XYZ 53.858 703.3 null] >> endobj 562 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.794 93.075 386.334 102.325 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 561 0 R /H /I >> endobj 563 0 obj << /Length 564 0 R /Filter /FlateDecode >> stream xYmoF_č(}n~9$)z␫qZ,IJRfb,ع/33>KW'pl{؀@%HHMTIV 7Ch\VXaO~\$ F]|wp_EckS6{BOcQ="?~jYjz gj9#,qi#p}E gns&[cQN]|^~$W[SU"z]#ń 54qbgLTYzYl+YH Ƙ͒,s!W] ~@Q:P$Xtsilcv 0xp+o*PJ?VF`Y! ,noEX,Ŕ4퐒'.Wh) j}<qmo+$+Xzx݁W'8@a8:]WN.,6{nNVP)dOp=ζgէ3eZ:'=rJ {A=S:(<7ax9&y(Jy¹)-r쯓IVPȪg!sd%$/Ӏ;"B씥%6/0Ԡ?kß1c"tmw$F8S";WU`;Do!/s c4[cMcj 0@ PK 褟?4:eWb A\@z|;g?6Ix֗Krl0%9PjKCQڊ(ے;a_i}sq RE.CzLBx9R}Ovs>FIx6Ery=7 NBʺBBx;ظ鋼^Hr>^G=qq]Oʜ`~'\S5V[2-B(xh Bq"rWB G3s!qSFP jC^\!+{:IfLtuKrh& s— 5'1j8<=fOaY#S Zc^wU̚0 T^**6M&Ex=9MӐ$9 A@2 Gl,jG0ϲԸ7mEs~30lt.^r a9 \@)Rk .{V!y|L*Ǜѿ0Dݮ|AGe9I.F_-ZT3Т(UUu[& ,hvQAA[iv#p&>aM}eK6T1-{ Dϧ!KMxaO(y\i>cK3o4ClOPn7"s$ou99~Wbszuƃg|#]Ҳ  }5pƌس靎9K8>B7amx8G+ (ךA}´HT_7L 9:ES {xO7Q1X:ahUZG]U8{,!\u.m o@1'J0E tf9K'-)otH9UK~:[8zL)q>aoYQphy;;}羴{xkշZ~rm`O nS ­?IKN̕P3{-k%y endstream endobj 564 0 obj 2108 endobj 565 0 obj [ 560 0 R 562 0 R ] endobj 559 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 565 0 R /Contents 563 0 R >> endobj 566 0 obj << /Type /Action /S /GoTo /D [567 0 R /XYZ 87.874 718.3 null] >> endobj 568 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 282.875 143.444 292.125 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 566 0 R /H /I >> endobj 569 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 164.875 221.144 174.125 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 566 0 R /H /I >> endobj 570 0 obj << /Length 571 0 R /Filter /FlateDecode >> stream xY{o6ߟ▭@2$ XCtm,ӉPYr%9nV輻- C)eRwޝ?N(;7_3_`qQ.@$>f?ψ}#L~_n$erysk ؼuedLGHFR=L<r%p3br%pfg\k_(\,lGaÛTsZW-8_GFnG aa{R~l1’vÑj]<4%5Tw !RyD)2>c?SK*'}=@~陠 b endstream endobj 571 0 obj 1963 endobj 572 0 obj [ 568 0 R 569 0 R ] endobj 567 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 572 0 R /Contents 570 0 R >> endobj 573 0 obj << /Type /Action /S /GoTo /D [574 0 R /XYZ 53.858 175.963 null] >> endobj 575 0 obj << /Type /Action /S /GoTo /D [567 0 R /XYZ 87.874 176.0 null] >> endobj 576 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 707.175 252.268 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 575 0 R /H /I >> endobj 577 0 obj << /Type /Action /S /GoTo /D [574 0 R /XYZ 53.858 533.372 null] >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 268.302 144.458 277.552 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 577 0 R /H /I >> endobj 579 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.568 218.838 206.168 228.088 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 577 0 R /H /I >> endobj 580 0 obj << /Type /Annot /Subtype /Link /Rect [ 288.948 205.838 522.388 215.088 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 573 0 R /H /I >> endobj 581 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 164.838 222.158 174.088 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 577 0 R /H /I >> endobj 582 0 obj << /Length 583 0 R /Filter /FlateDecode >> stream xY[o6~_q6AvסIJ"AӦm1-DJ;FPҌDi|CXϕ G%lݚcQ/Y &T06=rx]%|TIpWSX[Ň>l~z}G֚a! q#248C􊄢,;w5 yK)X_$3n7~Z_+5ۤ.%y (JSMR5_g,3KD9ϛ:O[_@S4qڒ&>N 'A8M<o9MZ˳}m{/bgXy`LGN"I% \Yِl =,ΚC]MK6?7*tij[CdJoTdC2Iնb*.ZՍi ۧMRk &X^ǎL8B1#}l]1Rj&(C!upXL>#C\6P_鞓К"ۍz$ZUV8m [[ };x=R@Hc5$Np?D!хOK|. h!HR+6_.uuNKAĥzHH+ud0X l,ΈR] #*Ru[yJ7dE@ mlS>}Qˮ]O[f]]~6&6xLs~xh=T"?KGN⏸͞2Eăb| u tܗ STM`6TF%_ r)Ǘ:0P3 1]r= eRuXPs8ni^pGJbv޶38-oig+{肁zV?#}0{?__vvJ%I.0CvΌ)L0`"&0;7#P> fzKkKs#aڋ pvFx}tx  ={E䝄--–"(C`}ۂ 8<#ѺA׃mgpj Ƿ|nLcTTf8>V܉gX{7x`DfXt<:AyH6 F r+>Bs} py|pT4|0nj>XkڿYCDi^vcN u*wU|B/lm!<.^(5pCyD̊p,%"D7țUydžV_77nO;#z_8beLr׎/I>b>>R=y'x;lb"P,  %<(8ِvtoe٪oʡ 귬- endstream endobj 583 0 obj 2097 endobj 584 0 obj [ 576 0 R 578 0 R 579 0 R 580 0 R 581 0 R ] endobj 574 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 584 0 R /Contents 582 0 R >> endobj 585 0 obj << /Type /Action /S /GoTo /D [586 0 R /XYZ 87.874 437.1 null] >> endobj 587 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 91.099 167.904 100.349 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 585 0 R /H /I >> endobj 588 0 obj << /Length 589 0 R /Filter /FlateDecode >> stream xXo6~_qK j)[ l -=āXmT\IN:wdY4y@$Q>}<ޑ<@7um,MP X b\ B8P0okr`Sz$]Hp?'.iR1Zi&{GVn PJ5ݵq*:Q>Rv؀ס(thUsv!Bn |TNEim"]6r>HsxteҗOk{F!耄#:duGq(.Z2Z-PSrEu B '`$߃"wA&q6- PC0r&&IF*i[Ԙ!L<Ӽ+~ږF9&8ƤYE 1ʠ<QKNC=#۳Mڋf| rז}9 !]FN{J\8}t{NV1EB԰;̱ur϶WսUطat񢪆_U;,$ =x&{;hU"ߤ6}v^RAZyX-%n`` 94 4O%OG5jEɊmbK5DrM0kHءXKWcVZAH9ֹmgdxLLӊn=rueگ 8bB*eM$̝rt8Be 7S[Vac Qoݱ](9K<'m72Ʀ  T7cM{|SVk9dg>. (bH$uk< endstream endobj 589 0 obj 1441 endobj 590 0 obj [ 587 0 R ] endobj 586 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 590 0 R /Contents 588 0 R >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 634.175 133.888 643.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 585 0 R /H /I >> endobj 592 0 obj << /Type /Annot /Subtype /Link /Rect [ 232.228 608.175 328.928 617.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 593 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 543.58 211.588 552.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 585 0 R /H /I >> endobj 594 0 obj << /Length 595 0 R /Filter /FlateDecode >> stream xY[o~8]`M"lfnwh E&@i[,iE9Q$ے(9I-f23Hߡ033^@Ҭ1ɂ%a\Pʁ Hܭ.76=//$Pg\]⺄I-z7֓Ԑbն4 TJo3Xl7a^$Z^js8/gXeAekk#hڗM~|^/?d:F&<|SNNl͞:Ǘb`K2ҹM,sIlv I|̠,HEuqC( @HfI -:Wl{.I yk,]B:9}8.Sz%ueLD˸l:So dzIvez›)F;6.Q715d)bVn ..Ա&mO B?ƘN2Nw B IR<{6f%LTKثIS|Xćb=4 ~<,™uj=<`}ϷyN΄3q:@G0@>&k\|5~ӻh3|WV hU "V VM!hb [ְ@c=Δ;cB,rie pwU'AXCbw t۰z/Cnj+Mq!)jiĥj,undӑ>ǎ~LJ-qF\y:!$MCPOM:Y"/aUd*TM*bΤFnKŬaf %|{T%(7_}Cn.[q?j.-`}ujќ0|z' A;sN3f&nE1 )U}y :p lըQ?Uns-e)uw8h~[:zzVϵ*oxAm+6Uj-ݩbb@ǑIE[&?If'H`~2ێPˀ #ߕT ٥%> > !97<Ӗ?@c@ph5̾+oT{C c cؒ9tȇ~zPeB.-QcKg#3 pa3;.@qW2vL"IWɕjf*Y 9ZfBA:#uvJB1'A$Q0\USd$;fs&{4ݲ'ܚb1QJC-N$FYjiepڡ)3mL!c}|>rhf FRz eeM{MhkkCU4@s`'F{kXyTaJ`ENb-.:і!a_ք7BB$ku:~;]t0}/\#nSOя$wQEoUMwټ$*ϧGh6߾ ‡,^V/LqarSH3X']Ɓ1,<,pM .8h-qY[bfB)c{24u֦oah=3R߂zTdNTmz\i\1mv-+!J86Oj |+`6eY^WV֋,^ e[l}Ƿ܀쟓ƒ }na_w\[l֠ p| %{|7T=6-EоA~7ǩb~V,"/Y[+V endstream endobj 595 0 obj 2166 endobj 596 0 obj [ 591 0 R 592 0 R 593 0 R ] endobj 597 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 596 0 R /Contents 594 0 R >> endobj 598 0 obj << /Type /Action /S /GoTo /D [599 0 R /XYZ 87.874 291.456 null] >> endobj 600 0 obj << /Type /Action /S /GoTo /D [597 0 R /XYZ 53.858 263.229 null] >> endobj 601 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 384.153 159.564 393.403 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 600 0 R /H /I >> endobj 602 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 321.331 302.404 330.581 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 598 0 R /H /I >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Rect [ 505.294 321.331 536.974 330.581 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 600 0 R /H /I >> endobj 604 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 308.331 127.884 317.581 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 600 0 R /H /I >> endobj 605 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 280.331 237.264 289.581 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 600 0 R /H /I >> endobj 606 0 obj << /Length 607 0 R /Filter /FlateDecode >> stream xY[o~8` )Xh-}Ƌ>AXly%y&)օqG"swEmƉ^L,hqLB( .C$0 O&`^fW}" пg̾|#6g:zX_c'-_ǿsg', k)R;rN]/v)}>=4d_ăd}?g?-Z:ZEOS520gTwlUG)P&В .v.ԱLyJhY3 3ҙ!w&gZks6oLS jrzVWpquJxb#]NOZU8hņL"q$}ɋ$cݍ6#ga!U8dV9vDI;G8/& bQl_?fuEsikj- KvNͪn(nݣk L}I%ʳ]V`;hU,/³"9P萖N_27*S7>c!EAɷ"[S^T6tUYU7)13EfcaE&{c9u˦$ǒ9§ן!&o 7L]Kg{Y1[Sz ^_)a^0`lPA{(!6݁ WKjY(:>,ٷlm=sjn>IroŞ:^@ 1/,ݳwUcJr:&kL)Hz̵~mz,5 ku0gb=n!Ac-F}#T; n?ٞxƒjbLW 51F9j $4G1Ӧ).GSlߡq.̈b&8=qBjhQD(#)Ec) lz>t^|!JCYr.X@VDz)E=_ }BB!OC5Cd#&]F>V]و\*Xj*CU/iFI4Z DST=swݤ^BDRp`&b,=6jaq>-("Hw%OBi); }nVÊt?J"Dyۀ\M1HHtݾBs:l74A4df6(_3k%x_("BM|JRwKfJfޔg2ޯޡ6DDDvVAπtV-n|N-]=;.jpo Xy8 @F=lG*[p9@]a;x"u$Ž%:7z؇Ʋr;ہن;.:N㚓;VEUeOw]O(Z'\Fmto,/#bB=fvsrohql QJ > endobj 609 0 obj << /Length 610 0 R /Filter /FlateDecode >> stream xXm8_1:bڱEwq:8P6u$$8/m줥徰nj3<3|0y/^@|nHN|pdy0.(q$m>zE7ְY@/Kx?I'^N>|KLwxc1c:9)L}RR\`.üRHmY4]TyU>ӿ&ϧ\{>h-۷󗬡Qрp!&v؜'#^F;nIa;5~O\v x!=n(  ery(B Fn%/p.8=W U[fCX@1f4oxӫP+TzFUWyAo"}=s+O$@ZsFe }a%"?eKƱVta)lA0D|jԗ^x~Ϟn-Ϝ6ZAy[F}֠߄q }`{z×ϱaڠ6U!gW| %p1H2-o5%I Ut('l -n0޽>ZxSH`ÇCk[dnl:xӶ;xh( WJ^0̰7+O )XZD̂:oYC4~50F 錴ũu-GUxĎUJp"bֵ5VaMG'>q7P$J!#IxtC WA5-xf@o@.*4TVEW,Vϟ}93Z|hy\ʬ$¸?++o߶lV {l^Xد ĝ=6E),7ƣZ\jfZv,h9D2F?*B endstream endobj 610 0 obj 1481 endobj 611 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 609 0 R >> endobj 612 0 obj << /Length 613 0 R /Filter /FlateDecode >> stream xX]o6} pD#)~!2+6`łClM'dٕ5ŲK"ISȤ{= A](Z&O})(' y@Bq (5nnan56#$OxDO F&K@?G&o;ʦ^7~_oy֪3a|ݏND "FQ)9yw~>K}d}&LYqD'o'*8{3B UwDeȎb\ c^k  *nA$` 3;h;0IҭY4녬`5I#B.( fpG?ZDeJ@$"2` XJֺ8uAg"<FB+%[? U@h3 vUXb\y0NV1˜M ZE; YӦ퀀YC$A2r 15cBaCN1[\̦Iu*!$cm8 )9JfQK %U`%KCHٛOqR+@/P:ϳ(F@5xOGW=B`H:YH3KA3%QJśg ; 駤.VAHN$kF Y5caS]j O%H-:Zp!"Q B{cQm]BQ2GjAqNR?1e8;.CIyDv3"6(3U8vD(ΊdNuuuMnFcɯ)N6 P:nv=Y06 m)mMn5J?:-ܨW.FA*k]yw py҃}j'T0OwbInw-ۖץ/2|Y"ţ'?A߭ꦃP$' X{q7 ۧ#yCg8!hׅK>~X0X0~֎X"NB@9'3$@ endstream endobj 613 0 obj 1240 endobj 614 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 612 0 R >> endobj 615 0 obj << /Type /Action /S /GoTo /D [611 0 R /XYZ 53.858 598.3 null] >> endobj 616 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 656.975 102.768 666.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 615 0 R /H /I >> endobj 617 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 429.975 180.468 439.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 615 0 R /H /I >> endobj 618 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.818 154.975 515.728 164.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 615 0 R /H /I >> endobj 619 0 obj << /Type /Action /S /GoTo /D [620 0 R /XYZ 53.858 441.1 null] >> endobj 621 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.918 128.975 455.668 138.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 622 0 obj << /Length 623 0 R /Filter /FlateDecode >> stream xYݏ6_1StU~SkӢr]-EBJrv{eK]`8/ ?W޹6 raI*S,_1.!Hķ2>p=;VD) dg YU+~g8/i5`lޭ~F ?N55 j %m>×}-{k~id`dujo_w٠ t? 9I2oyOz 4N\' }N(N`zYj eǙB 9(OGĎz{ѓ>YBx$`]<{f"׉4E9ziҩi#fc0TcR6p?uŦv'tT'"Emz$\۝-4m]~vAtza%NrܢI ed$%1\v,fHiH*ԓK&зYmeV}ǵ[b|׻]TT|<:qaמsS6P CdaT U#/}V=yo,{`L Ez) $0G0EYؗTQfI^BI( }o/0nYTYUw;kK@XfnZ )$+j||*DfCM'Mܧ?ӟ[O#ܬ(NgYrwxJ䡮J6#ѩ/Pi[ ˽J(Cybuj '4rYV=@? Euyg]MS47b _r `(8x)8iyյQ;(G׳ ~z,5\#8a!ӧLk EkBiF(fZXHeP9Ka덍 hէfL'W hOYذuHR^1zAxþE CPCQ!0.W6Va@mFTuizۖű$̃m%Vm#8FQ]{٬1$QL )iF~[oLjZ#JGRC0!MVݦAdi"8ݤVZNEwEL7<$Ԋ5S'ɣ! bC0=pa\ z~#X얙$gz_yvm{04kvMQAY;/xjo6`0w*U%:UǦH0;Ifv&]!ۖb3OJNO߲oeGD endstream endobj 623 0 obj 1845 endobj 624 0 obj [ 616 0 R 617 0 R 618 0 R 621 0 R ] endobj 620 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 624 0 R /Contents 622 0 R >> endobj 625 0 obj << /Type /Action /S /GoTo /D [626 0 R /XYZ 87.874 607.1 null] >> endobj 627 0 obj << /Type /Action /S /GoTo /D [626 0 R /XYZ 87.874 104.382 null] >> endobj 628 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 673.975 136.784 683.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 615 0 R /H /I >> endobj 629 0 obj << /Type /Action /S /GoTo /D [611 0 R /XYZ 53.858 690.5 null] >> endobj 630 0 obj << /Type /Annot /Subtype /Link /Rect [ 162.344 673.975 369.094 683.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 629 0 R /H /I >> endobj 631 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.894 608.975 172.914 618.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 632 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 171.236 132.894 180.486 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 633 0 obj << /Type /Annot /Subtype /Link /Rect [ 357.984 158.236 545.844 167.486 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 634 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 93.257 210.594 102.507 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 635 0 obj << /Length 636 0 R /Filter /FlateDecode >> stream xYoF]4EmC! JZYD #;ˇDr)پEkÖ|3;;Â+C7 IK(oqRLn8`?+jHB3Ctr>@/;"[Pv=np\â1Qsxbm0 3!TO-׷7 1Y0 =!JQcp»2ZgCn*xSΪd?t $1/vj4[]>hEF ]AE9N!`lvzHk`F&zRC[A8'L2| 6X^taC.tň\cAլ9C#agW+itrҠ`sf$PR1Jn uNUQ{+Q63g͆! \ۺҟNZEgd/O]iɢ,7IkJRe3Xh-ތT2/_.uy q&OuEkm?jtKgay3Emu.4UPjS`!Wm^0V iENsTSu(b ЏiU~\Gj[*j*hcdr̮ jcQ ںK7-/m'ԐVIgNve˦-VblE[0`}ay;S\/Ɠ₄8%A0I5 =酽>)b)6b^@za:Z GvE< X Qܞb`=%B9ZcR\a?T@ qs ! K#umU]#**&ŰH=y'>"nu}X/˸`c6XT)AӮũqVccS$ևP`4Li>D%: 1v>WhA5yM)9QJBwQ_]OM̻,J{x0Wx~s =Yz {f@]XcԗWg y%^|/5e^Woo_,_N}#ˋqY6JBG)N8RnWC?v:,2hnb$һ,] '~AkLmfB&=,gӟV6Y[܇Ei[EC 7ꪨGUA5VowFVO!#rS$O E VeH+ќI4 ņT dcC{a+<Y@̲Tvw~hpfk8 }lڙDS7$ ՌFg}M7T.0jq. SqC? CktSbgCݕ P]GGd>g0r~+30‰ sp3OXG^gOnSX ]}B118+L&G ־ vc0}1fRa s^LL Zuў~Đ|xT)l6fIoB endstream endobj 636 0 obj 1941 endobj 637 0 obj [ 628 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R ] endobj 626 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 637 0 R /Contents 635 0 R >> endobj 638 0 obj << /Type /Action /S /GoTo /D [626 0 R /XYZ 87.874 718.3 null] >> endobj 639 0 obj << /Type /Annot /Subtype /Link /Rect [ 78.858 392.175 349.498 401.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 638 0 R /H /I >> endobj 640 0 obj << /Type /Annot /Subtype /Link /Rect [ 406.088 379.175 520.028 388.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 629 0 R /H /I >> endobj 641 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 366.175 143.888 375.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 629 0 R /H /I >> endobj 642 0 obj << /Length 643 0 R /Filter /FlateDecode >> stream xXYoF~ׯ&^<мBHRVQ`J"B w%G(;Kd+H"73󄀍)j`'<.Q&,¸m3 ܢWK e_fG~hd vc &Ćqv& .&&PCf˶e an |x2]9 *"^i\yiufN~ 9(lmM_Hݶ47㻬4P(Tc e@{oiR1vr= A1 -dppp]2ZCx\ ?6KپJD.\² wAla0=| ) G mtr$eLШCNT2!!_(AMn&mٞG/__o_F!=#sG`VRh#"WSWp6eh`(0[cq4q"o=)q=di، a0lcu&S%Fq|d;hf2 {Da%czą6wy?(bc,&Qfu!e8,Z~ip!~gd:z7\:C)ܱR>0W[̺2 eL}~r~ ȨHLXIP jE^K3 .CCqpCG$pg nw&AnqzГS{C0]vr ee*No;|{-Blwlo腡'XELELa,F㋩i)2\().X> endobj 646 0 obj << /Type /Action /S /GoTo /D [647 0 R /XYZ 87.874 573.094 null] >> endobj 648 0 obj << /Type /Action /S /GoTo /D [645 0 R /XYZ 53.858 351.3 null] >> endobj 649 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 615.969 180.124 625.219 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 648 0 R /H /I >> endobj 650 0 obj << /Type /Annot /Subtype /Link /Rect [ 464.674 602.969 528.594 612.219 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 651 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 589.969 209.034 599.219 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 652 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 561.969 210.594 571.219 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 653 0 obj << /Length 654 0 R /Filter /FlateDecode >> stream xYbj#pE55]M 0(q#B I,;ˇZ]4He(vfv^e⿥}(a{XҎ1 '>).|„GlÄvwIdHfÏtAGp܇EDŽŻ9`>ze&)1Xժ?ޟ.LGޚ֔GX}v fkƨٻ*AT/x (JUT Z"DKj_3v#bXޔحzv UB k 8 i{$'VKi\YFET.ќmVC02Y@ih]efI^d&_" EV;X_jh _-:}q/^]/ƒy1"kJtwYa=FD[S(O2\:x%1AX뫎o^}j-GR:AG((}>he~+nO')wͭ#3$.{U5z)!7J` =6茲uS5o*231ٴ>{CFlVVC`"ELEfvi ݯ5dط_C@dsbX*?V8=a^B)Be3y )Apip) P׿ڣnCnnc@Ɔ 7|©ogF1e0>v~Џ[b6Ȍ=n9 Hk\={DsRH&-[Fmi(Nch3#4F8ԏ&=v+ ŠÛG}+r:>q1Ps~zvǰ9\4ҏBP. ,xLS*E$1(BBNHw6*/1F%LB̓Yv]3X{ s0;+rIXK|p8hxwԌi7m"l?)5uPqAS9xx9O-F1v4)>+D<\vfAl=H@\;HR iGBXm|XajA|F/E<gXb4=SEUDx~~mDʉXFgqw،`r"LXn c2d},)&1ޛA+D8}l:"mR@RFUud͟JL1 #\Rw KSg)ȅ8+gl@'Δ:f[L;X p)N^GTJz07(1]<Ӗ-YS ʹ?`rqi_NP!6P)=agmX85g(0W3oɠڢ%en}q]oEN,'wQ@ < fu1g/M^ 7Pf!, gvĒn_q -@FPX.uľEdid<[a);k1ruaVb?Kq[>ޢk4(o__ &Fn|6Eg)Wa숥n^0J>IIªg7ׄo;tc)`-8÷G7#mȔxzɬ@9`%DAFx>6ar8(jim1[AFnζg\ ,ƚ4 )<=95@i^zlмn}o5`;68B$Z9m i/'hJO G"l ٌ~dw}- endstream endobj 654 0 obj 1960 endobj 655 0 obj [ 649 0 R 650 0 R 651 0 R 652 0 R ] endobj 647 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 655 0 R /Contents 653 0 R >> endobj 656 0 obj << /Type /Action /S /GoTo /D [657 0 R /XYZ 53.858 314.65 null] >> endobj 658 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.868 316.525 122.228 325.775 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 656 0 R /H /I >> endobj 659 0 obj << /Length 660 0 R /Filter /FlateDecode >> stream xYms_)OpLUEΨqq4 IL@6=$(x<ݳ=2`)xh;w}psy}%lq۱,Äo+N- Yjc?M҉N%0l`MOkdhl4`Z8l Ϯ7a^\?j!^j; sxq^0f65l}BD>mۏr!Buy8Ѷ|r09=yG?xh\֣3%{ .>TÕM #BѠ oي4dM1XLJ#ƫxa:̭C68whwMDG2R9S ڡy. s={A:V5Cx )y-t L}&ȋ8-W0?{j- z>O_\,ahz3iyv FD%)轎f:E}#OaT3Z"ez5pwOc< d'r;NHT42_QX*CQ|W^>Ap`;$f6"LkbBΓpo^JR3Da rEOeE1UEcros$q.|`čsG gMdG&|<iHL]8e@}BY廂peheR_k%I@W'MSc1ΌxWh:6޵D+Щ4fW[ 6N%i>Q # o^)\K*8'njr3v8cwD"D#Rԋ{N ۫5IQs} yLB]ٓ`!湸ؕu2Reӱ ]F duKetTޅء6&0"T$ a=uAt0#cKJPQCйU TM`xA;*l`0"Nr\T;6*M9{x w]!% AMX(#%V=`E!Z^Rmyp9[qVR=. ΩuE &;[]ULy>L9.֦>Ǘ#k[|!]aRb~DJk̳,L>N WinE۲g8,k)(*9NLJV92k^qDQE;r+N#Q;٢ A6qRLrvKxgఠB3*d<RF#흇/]fTW$9j1S.3J3]OJ玠4 *|;N&1Zu״$l1iA=u2?]y"Xu3}s)^kwjZqWcgUkk5c²-cݘ"Uͺ>nLXNq|Nmާ퓽πݦoT);(:^~;]\.R04>eә|^Q2ɲQ܇v4P;91)s:a|/8 }wC la 7ܽ~s-Aq!#&E_,w_/DM4tqq\{d+0\ /!]O7wϱZ^д9,7\+PISWCshL@.b۳iMr[l|, \V#>J[WoߋCןDXF&^bu o>,g}ئ1_|J:|Nc 60h{.0 ֪l w;=zBڎaj#ܙ!z(Cݏx68c_soX}z cd1=xؐ{O=t\8o);i\`gemFߦ>g,oF endstream endobj 660 0 obj 2013 endobj 661 0 obj [ 658 0 R ] endobj 657 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 661 0 R /Contents 659 0 R >> endobj 662 0 obj << /Type /Action /S /GoTo /D [663 0 R /XYZ 87.874 368.5 null] >> endobj 664 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 513.375 136.234 522.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 656 0 R /H /I >> endobj 665 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 398.375 279.074 407.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 662 0 R /H /I >> endobj 666 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.504 398.375 500.864 407.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 656 0 R /H /I >> endobj 667 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 357.375 213.934 366.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 656 0 R /H /I >> endobj 668 0 obj << /Length 669 0 R /Filter /FlateDecode >> stream xXm4_aNZiOtĆC:^8@[ćZe&$ ;I㼴t?+mǞyf&_r;PQBBxW2NC@Ji`~7FHﱚ@I:!l1 8tļbua /⣺ 9ߵ'_N>"J%`)R!ҘA`E[4~LV$]o4ilbkahiO8ys[Ik.e=nԐu,{T~X6h';`-AډR Zu:]h7/rTFU .2 RmlhPW {PԁuW奋@RF@cʨHu"b. *2lj_'r菊HVs]F(Y'k`~~+)feϯ/(5O@S8P!dQ1hW@|֦bUnИXbuH()ٮZ6E(Vz0) ˭ I-36S AJqg=>4EqF:| GǭF.k<'y ࢕d9ОŠ02:r&Z>اSÅ5 &?۸cgʷ4IKW*^8!j }#ũ}\#`<}1jA~}>]LOeOuSgrL2`e)Yc%9[H` kA#( PZ4Y媄)pQ!뱽ґI[$*3F eۙ e)1)()(،&{{lUQd=v z 0ԛF C([9uha/,Vo,E5,!"yb,k 8EE tuI0ZasRЖPYy?d6*Ҏ*m k~> PF#Ўw"l(ϝu3N%Ȑ7vAw=H s>W(< ő@8[ BT;'[*v1v5ڗ6@Z!0T^ayݽڌf`J8xTP+)ׇI%[JRסF %QB;/ tZrZn3*SHݟSVعF@-^{`uP C!,!{|5XOL.z-'heX@9=}H9=8Q71KFv.M]N endstream endobj 669 0 obj 1581 endobj 670 0 obj [ 664 0 R 665 0 R 666 0 R 667 0 R ] endobj 663 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 670 0 R /Contents 668 0 R >> endobj 671 0 obj << /Length 672 0 R /Filter /FlateDecode >> stream xT=o0WX;;'+ĆjbjU'`Y>I4ZñřFn]։aW9XQo*BQ RI *)Z+ E/X^8e0> endobj 674 0 obj << /Length 675 0 R /Filter /FlateDecode >> stream xZmo_αzLa+2De A]v#nw p$)LǷih$'td'}p.bx-<cN0W)XL^S̜I) u[½\hs oaɏ 6#A;I.QnMZnr>=Fwi326xƻtE%qvw,t?y56hSEU"uEEtIYQkGP,GcD8S,}EZ6GI)U`*^Qji{g \ BI1ii,vcAY _FzW FP6UMu)YR`mk>TiQ5OmۼA;SI^JZKvGc Z S91铽i\RDJA|b %i>DS4/)vUՋfo3IHh&zlz\-%$[~HsqEG7~hoҢ_mܙR.lnK t<(V׋JdP21`Ai"qg锤AHH9XhF\@FLIn?}soZa'v.rYsgJ֦{C)QQ'!0E*4$i1P\z{Z&krbQmQSԈy3l+ GḁƩa4JMxhlCT0"CS K< -C!:x_XyenDTU5`tߢ??_ѷ߾1(֕Kֺ=m3:T6o-k3Ӯhe(W1L3AoMՎڲ6#{ l\Ġ\$Kj-mQWAWb[ؖՇ cƨk\;om獠HQ`ԅi:m-܌3\Z m'3oΰΕikml޵9| ,¿BMZ[:B I,lnM]Ym1kuо]ە嶛A>|zZue. ()1յN3!|81].at`!t>OfE#Aĭ:zA#@I|f0j0a*')%`{7/>5\ɪ> Տ)A9H^p{ب5#>jd*pEJkp8ڷʵmpBrvq~}syIU;0W;I3%KJűOVۡԤ<T;PEK` )B9 Lx ;ze3Ʋ\׬KZFD譒VF7b!JI%aBC$DVatxli|ȶ^e@[o֏rC5 aPGHcyUv$#(Tr(d=WlP/,b6'_L\t1d"Hh*G!A2I}ıZkb~I]6qgSK'DNȲ rڰ ߬)Ǫ,T!.osA/%Db*4uv*$+%W6]89/LnEK~B4].&kt s-ޔi7K+Mkqز|-!5׃Q cJ#Oۡ$_ 5ZBٽjza)_ӸP%8bjXu55'?xˇf *Ũ' W.G` 3b~Czz:\z:w2؍u+? L v4D&/xS%p)<'h9/_,2F:w4O7K endstream endobj 675 0 obj 2307 endobj 676 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 674 0 R >> endobj 677 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 87.874 718.3 null] >> endobj 678 0 obj << /Type /Annot /Subtype /Link /Rect [ 286.928 217.069 484.778 226.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 677 0 R /H /I >> endobj 679 0 obj << /Type /Annot /Subtype /Link /Rect [ 187.678 67.069 284.378 76.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 680 0 obj << /Length 681 0 R /Filter /FlateDecode >> stream xZ۸/M]/[W 䲇M]3ÒHiw 4Im373>m8awA$6|8$ (A=M Q.cpEO[&oHD!6N`#&0/=iטyy6oނǚFyٜeW:ƧZDPsR:O%w|gnT b|lPr}j0@ݮ `d!*ޓ>^uvˊ{Rʢ9m0Inf  @lb\Nq ˔d[dYH]ɯT29 )dSƣ(wL%S<\&$jVb6*sWud::)r&(EY0_ <[wyU  $HϺSNpwL\z"L rcqekRjXTZȩLI0֑VFpLGs\[ ` :!V"\{YlBN XML6e}QMR5H8V{&eQ$nueL(b> 8;+ f 쎼|!8I(DsXlE(pꘜ`l"#1Xf>;W]9doU=_ NJoMEXyck\Zx? QR Q 2YF"n뢼P] <פx4/fc6CП- ʤSmEhF5LHj^\PJ vB< uن1z]\b^<55(H;:MWQbM-DmgD&PO&֋8B8 b_HȈ Pq/ ƹsLeeP+)? d?))C! wdl*7kN}:o u͸P+֯Ke}k1j.Kh)z.7,l&6?SiPAQ}LF bJ Mc1hAjǺKz *DVmHaԤ53)< AXvQR)!ͅ$ $3jt8G[D/&L9TǮJR$,Kl-5O% C4+Fm3%oy5 Zso6]? QZW[)$= jpz5!qdhJ fiDB{42 tTRycsL5K#gH#R/F2|4"=ٛ,_(H%tcA9@HdPW^ɿcRxߐnnd@CؖIYG̿i@UӤ2!7N3"pp^n2mZVLynώ.fU9koЮxB?־'7?pi4T! M7nW:NҪ/ۤGmN xk>U1\OBE! C<MٿtSd<8^6sӯA 5b%G\֑e.6LWs]2拀@PImZk5QOϡT_cNM-훔${S|[49;a˲(|N M4[8d&M|a7k@AP͈ Iy$!%e54D^rtiF^@>@RIgι)[sN}T$wP>(=:ߵI`Ilge TņӂaӇaa7on+vr;(*ײdPϴy*p,. {a+x:qnrJ$KOYd 8]hɝOZ^bBp*2rLK]C> endobj 684 0 obj << /Length 685 0 R /Filter /FlateDecode >> stream xY[kF~_Q RI%U 2lxهtd--zlwTn]6x]swh= |G&/:G!=%xj{N7!|po47VƄ͗g<8lv 95}ۂ췛?DUkj"1uFEiM~Uc]us;ennN1]P):~׷8FA!)yt9W!~vU sc1FW;VuyJik#^ .; =XR*XLX{n#ߛl⺋GGvy!L| k y-%Ӝˀf ,pxhCV?mvnB{ cUn}n{]n̓(7UiBv3n_O[W`}@G:[I킋mchӘ*Q?cQ̾Y\٧qﭨ)o}Gd?םٗrJB@”ܕs^"y'1ƂSԁZ !nFug~vlLeǖUrw.Cۦ,a%=O 8!mXǺN<,BNt+#f={.E d1SQ([Qd* ԙ|JryFQ0{|HN+X|EIEΎPҝꮚ>>:rSr9U&n6}âa.f9Ԡ+ӯCI#<tDf}5S K (ނR'[rˬp])1ZJJ_|oH?ފGHxC_tt/p!rؘ(]Iga(}3v@)P=@"߲v=/,ڃPĆQP%Ŀ:5و~RjTS݃p2*16L)?v={ĝ։-bN9rg 3 о`&5}K(ilal\ s==E}z$m|LT!W=zXfMsniJS(aH|<1qO/gs&QcaH<# _btrފhJH/]zw39iȁsM<5 ~$it~=fw/iȄQQUw%N'X".&D iVTlj;n x9% ^?p~Q ^߻Fn}h2t|eJUbHGm"XlNZB"{ q,BkOm 9 hZjAFsZ2EB›fIj7M+)X"rX5@rk5F$N戰~FWy:)& ZRhic@ءbU+!6_ qm,6Ӳ,*CP9fuHi(;q櫥u[a9/XM^||~:\aƦ/Ʌ9kt'_|fZs}{##ۜTl7U·~ \ endstream endobj 685 0 obj 1970 endobj 686 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 684 0 R >> endobj 687 0 obj << /Length 688 0 R /Filter /FlateDecode >> stream xXˎ6+R`F%E=j A t$dvA˴-Df~}IYHgE-=#nGW_kdi f[!#J9aQƸ.-OTE Uꏿpu1y\=&f>>̱:L pCKn_aoEt8ϳ8"y@b!#5㍖hLYTޒ%0Şl[E]Krhܐ}YInٍo"apw 6OO`]$ii/~r=o)` 6Y $6F,~ɧ6R]F%1^4J*”ms%)IyNC>q0hPv,JJ7A*9v B>̤-NiŘ^6E]`cDۃlf M++F&3K&+~mݔBK}׵4Or<;  v*9 MWOc7,٦)8,Mk#N[}mpGƞ{DA~~.DɭT)}oN+yC֝q#T #YLn橃Ow,ad&g=j)G ! SMXm}(-`ʺ[8nCT oE0D}9fY~aVzE|&a`8ד,:9/7ga 7rvWـzkZ@iu͹ӆhUmm-̢&ψ&.3Fz-s↠">7yw<,Ⴅߟlvi'8|j~o:ϭ_;\A`8=.7G"b s{ FFY2rvqW%{}ҹs ^Ck7'|O|LYqхAG_hBcڕ6x_A31' zu^K ;&#Ci7CFH35[J AC[*+e? +p&$q,;aㆱhn < 00IkkQA2;:&lŏ.7 DN6"xx+D>Ί(<1N BUN2e74u%-OA%Tm0z3ztB[=6_#7q ڝ"ҥKt5o&fq[Naps_5ɛa endstream endobj 688 0 obj 1772 endobj 689 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 687 0 R >> endobj 690 0 obj << /Length 691 0 R /Filter /FlateDecode >> stream xV]o0}Wa?0Ǭ&SWMZhk iB"y6s=o烿Cc !Dd I)B% ts?Pܽ͗9 l@SGs g`;RHJBA.z67n ;uݘEp\~ C':; _v]ͯONzett> endobj 693 0 obj << /URI (http://sourceware.org/systemtap/wiki/HomePage) /S /URI >> endobj 694 0 obj << /Type /Annot /Subtype /Link /Rect [ 310.424 611.975 524.944 621.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 693 0 R /H /I >> endobj 695 0 obj << /URI (http://sourceware.org/systemtap/tutorial/) /S /URI >> endobj 696 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.744 548.975 441.594 558.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 695 0 R /H /I >> endobj 697 0 obj << /URI (http://sourceware.org/systemtap/tapsets/) /S /URI >> endobj 698 0 obj << /Type /Annot /Subtype /Link /Rect [ 349.904 359.975 529.984 369.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 697 0 R /H /I >> endobj 699 0 obj << /URI (http://sourceware.org/systemtap/langref/) /S /URI >> endobj 700 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.574 296.975 548.284 306.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 699 0 R /H /I >> endobj 701 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 283.975 187.574 293.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 699 0 R /H /I >> endobj 702 0 obj << /Type /Annot /Subtype /Link /Rect [ 377.674 170.975 542.174 180.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 703 0 obj << /Length 704 0 R /Filter /FlateDecode >> stream xYKW< f'$'ٌRDB#PM#ߧ ) ig㋳S;CA@_ل$w'#R6 c!R1#W4dq04`wΨN/=Ȏ˟?b?HVTh\ Y1pLM2+8$ n>Fq3NGClhB)lǀD!MdE_ ;R!%Î0HݱҤ/$;a&a䒃IU'a*W!mi'ZJ"(˵$ZݤL /Ԩ\A ԁT勀Kvjj$FZMWbyF_&sf$ v-2yg,Zm ABId-@0xea -:S585LJry O x_)_dZ\[ՓB4Pƕ!Z(2_x4}:`E'Ꞷn qݞy?'q1Ki"ȳatިicYV}GlcyR0x„ι1$$sK;/ (C'G%assߦF"@di-ɢ gD )~F^yPeɹ2G;IvDύ:ײ|dW_z]#}1N҅İD.k>)Y ȳѧ >ơdaA#&\ȃ8m+E2J늟`/ Jj!{DU\0viOݷ+=xfZA8eY!a,%ʉ,ؕ}'K2ҵRۣZZ5EݗκV+ =9NU-׎@dVա*G-tiU8K`&T=ChL#̹{];% ڤ7R{4cw@۠oe"  n, @#4'qVD5܋F^ޘzv̳O|\LErãB4qH(.j1W l)y@rTg`MSK*yRW,Xt&@-̻Yq:Zo;r_X-g}Sǂ2Fċ*rK㰩'ߋ/l7oߗ8Z` km15@H35yc/_Fgסaذ=uR੧b[Z$A^K} |;W8h8V=Wm9 .J L[j8F65~W~Ō#dA="2R]_'9Tdac:`(0E4=|lg=dyz[C_,t/x'q[%gIϠ̓C8s+AJ[`c=Z^ 1Dm~u>F1<8c-ln S%x5C6GL,hx1 > endobj 707 0 obj << /Length 708 0 R /Filter /FlateDecode >> stream xT=o0Ww/NJRԪt(qBl]lt̒ {QiEopwN ;O䐽\@2;[&]Z&?@F/ʬ`9zTrF%љ,D'I@GmL\Գ{Ygب?, "]AT-OU&p ^檒0~5Wq7-^he ,:vFIM~E endstream endobj 708 0 obj 262 endobj 709 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 707 0 R >> endobj 710 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.338 673.625 509.338 681.305 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 12 0 R /H /I >> endobj 711 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.338 618.625 509.338 626.305 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 12 0 R /H /I >> endobj 712 0 obj << /Length 713 0 R /Filter /FlateDecode >> stream xVn@+F9z4)RQ%4w&TrH ˾}ΰ#@~`" ӥB#B/h{I*-H RjK/np#tm|Ýy߼F-VG6:0 ^g7^mFcZ@KfNc% NaOgEd6 gn_i\U>?ƻtdR4? aOHNZ 8 JLxfYq9Ah'TQӇG \ELY-;O;t}zEB)WP mɾǵ˝)ߨGf&hBy 5#qf!6i52/z:U]&Ci_鏢K,%'*]XR9Pp{}#ui ދm}p\cۛt QdvA؛r{hv9O*ROD~`nGT#^z5j±؃ endstream endobj 713 0 obj 576 endobj 714 0 obj [ 710 0 R 711 0 R ] endobj 715 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 714 0 R /Contents 712 0 R >> endobj 716 0 obj << /Length 717 0 R /Filter /FlateDecode >> stream xT=k0WܘV$e-T!dji:ԅL9Eȁ&wz,w?z8 8J5ݥ:1j"\+MEh4 Dň< D28wT\il\Ϝ2`(gu=XkM2t"x tF1!ikö7u/,1^5=)1YU抐1]a…TYʜco]48N endstream endobj 717 0 obj 262 endobj 718 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 716 0 R >> endobj 719 0 obj << /Type /Action /S /GoTo /D [720 0 R /XYZ 329.008 81.3 null] >> endobj 721 0 obj << /Type /Action /S /GoTo /D [513 0 R /XYZ 87.874 152.225 null] >> endobj 722 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.784 628.923 191.904 638.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 721 0 R /H /I >> endobj 723 0 obj << /Type /Action /S /GoTo /D [490 0 R /XYZ 87.874 305.993 null] >> endobj 724 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.784 589.923 191.904 599.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 723 0 R /H /I >> endobj 725 0 obj << /Type /Action /S /GoTo /D [530 0 R /XYZ 87.874 308.723 null] >> endobj 726 0 obj << /Type /Annot /Subtype /Link /Rect [ 197.464 589.923 208.584 599.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 725 0 R /H /I >> endobj 727 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 71.858 707.425 null] >> endobj 728 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 550.923 200.804 560.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 727 0 R /H /I >> endobj 729 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 333.925 null] >> endobj 730 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 511.923 200.804 521.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 729 0 R /H /I >> endobj 731 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 128.925 null] >> endobj 732 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 472.923 200.804 482.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 731 0 R /H /I >> endobj 733 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 179.925 null] >> endobj 734 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 433.923 200.804 443.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 733 0 R /H /I >> endobj 735 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 256.925 null] >> endobj 736 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 394.923 200.804 404.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 735 0 R /H /I >> endobj 737 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 721.425 null] >> endobj 738 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 327.071 200.804 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 737 0 R /H /I >> endobj 739 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 53.858 683.425 null] >> endobj 740 0 obj << /Type /Annot /Subtype /Link /Rect [ 254.614 314.071 260.174 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 739 0 R /H /I >> endobj 741 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 108.318 null] >> endobj 742 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 275.071 276.384 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 741 0 R /H /I >> endobj 743 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 121.325 null] >> endobj 744 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 249.071 188.804 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 743 0 R /H /I >> endobj 745 0 obj << /Type /Action /S /GoTo /D [692 0 R /XYZ 53.858 702.225 null] >> endobj 746 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 210.071 276.384 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 747 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 252.19 null] >> endobj 748 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 171.071 200.804 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 749 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 98.874 679.525 null] >> endobj 750 0 obj << /Type /Annot /Subtype /Link /Rect [ 241.834 158.071 247.394 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 749 0 R /H /I >> endobj 751 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 489.425 null] >> endobj 752 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.144 145.071 221.264 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 751 0 R /H /I >> endobj 753 0 obj << /Type /Action /S /GoTo /D [686 0 R /XYZ 53.858 310.55 null] >> endobj 754 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 106.071 274.164 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 755 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 702.225 null] >> endobj 756 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.934 80.071 241.054 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 755 0 R /H /I >> endobj 757 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 566.992 null] >> endobj 758 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.054 67.071 314.174 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 759 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 131.125 null] >> endobj 760 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.588 707.175 437.708 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 759 0 R /H /I >> endobj 761 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 184.445 null] >> endobj 762 0 obj << /Type /Annot /Subtype /Link /Rect [ 481.048 694.175 492.168 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 763 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 108.327 null] >> endobj 764 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.828 681.175 436.948 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 763 0 R /H /I >> endobj 765 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 98.874 679.525 null] >> endobj 766 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.138 655.175 395.258 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 767 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 53.858 721.425 null] >> endobj 768 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.688 629.175 400.808 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 769 0 obj << /Type /Annot /Subtype /Link /Rect [ 503.858 616.175 514.978 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 743 0 R /H /I >> endobj 770 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.528 603.175 477.648 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 727 0 R /H /I >> endobj 771 0 obj << /Type /Annot /Subtype /Link /Rect [ 474.868 590.175 485.988 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 729 0 R /H /I >> endobj 772 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.298 577.175 480.418 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 731 0 R /H /I >> endobj 773 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.518 564.175 477.638 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 733 0 R /H /I >> endobj 774 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.298 551.175 480.418 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 735 0 R /H /I >> endobj 775 0 obj << /Type /Annot /Subtype /Link /Rect [ 528.098 538.175 539.218 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 737 0 R /H /I >> endobj 776 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 570.825 null] >> endobj 777 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.708 525.175 440.828 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 776 0 R /H /I >> endobj 778 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 399.925 null] >> endobj 779 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.598 499.175 419.718 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 778 0 R /H /I >> endobj 780 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 87.874 255.546 null] >> endobj 781 0 obj << /Type /Annot /Subtype /Link /Rect [ 516.638 486.175 527.758 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 780 0 R /H /I >> endobj 782 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 533.397 null] >> endobj 783 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.828 473.175 496.948 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 782 0 R /H /I >> endobj 784 0 obj << /Type /Annot /Subtype /Link /Rect [ 500.518 460.175 511.638 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 785 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 553.271 null] >> endobj 786 0 obj << /Type /Annot /Subtype /Link /Rect [ 486.068 447.175 497.188 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 787 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 438.995 null] >> endobj 788 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 421.175 364.128 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 789 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 212.846 null] >> endobj 790 0 obj << /Type /Annot /Subtype /Link /Rect [ 474.388 408.175 485.508 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 791 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.518 395.175 536.638 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 792 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 721.425 null] >> endobj 793 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 369.175 364.128 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 792 0 R /H /I >> endobj 794 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 138.319 null] >> endobj 795 0 obj << /Type /Annot /Subtype /Link /Rect [ 391.918 356.175 403.038 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 796 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 330.175 364.128 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 797 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 436.094 null] >> endobj 798 0 obj << /Type /Annot /Subtype /Link /Rect [ 484.188 317.175 495.308 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 799 0 obj << /Type /Annot /Subtype /Link /Rect [ 489.758 304.175 500.878 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 800 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 316.559 null] >> endobj 801 0 obj << /Type /Annot /Subtype /Link /Rect [ 464.938 291.175 476.058 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 802 0 obj << /Type /Annot /Subtype /Link /Rect [ 497.508 278.175 508.628 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 803 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 686.898 null] >> endobj 804 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.938 265.175 453.058 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 803 0 R /H /I >> endobj 805 0 obj << /Type /Annot /Subtype /Link /Rect [ 517.508 252.175 528.628 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 806 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 699.625 null] >> endobj 807 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.348 239.175 373.468 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 806 0 R /H /I >> endobj 808 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.358 226.175 464.378 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 719 0 R /H /I >> endobj 809 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 200.175 429.938 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 755 0 R /H /I >> endobj 810 0 obj << /Type /Annot /Subtype /Link /Rect [ 544.188 187.175 555.308 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 811 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 161.175 441.938 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 812 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 634.625 null] >> endobj 813 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 122.175 397.468 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 814 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 83.175 441.938 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 815 0 obj << /Length 816 0 R /Filter /FlateDecode >> stream xZKW!9n AGC&ߧRUɖl60_uO+%${~BuE^E(}#~vCog" |ɬ\@Lya&{ KDhDonߎ3"Xtp(]~(6>?^we_uDSP=%: &kq߷TuM+@yJmILj89O+Yd.7vNQ)}nC[UՎq{}k`N#ucnc׋a,jdr;ħEtTReyr Hg bbIho7V爼\5@]?}.XZHABRv/r`dT/ S0Kh"p݀M5 cXw 6W_8L~"(@a¨aЗ:f$}1`cy)hK(S55t1ś8hO:Bpd gR!/ :ө2 ) 9Ô;ncd+pL~wCl Uav9z^898> *0܂$H& rm;90t RfXՙtQV], ELMutw8 #\sAS}J‡azIʥ1J! t 0 !׸PC:XwL'w-fx v&dF ˂ڎ{ICY9maEk|ʰ6\M[S꘵Rԝ@ /\ѩ K|B3y 3ʑes~jɅ?'M"Yw8k?>̿U,-~!zY:UֳDmŗ(3VƑ ҡ9/vF{jN,OY@cXPL^ǑļU9P9Npjn#47iUrc[Ra A&48atygʼ YCqKF3ǰa92ٍ/bVQ7rlY^ʀq̡%jlziO/fb)/`ap 7WCq\װw4FMmÎ[vM ᕢNd=Q81ܴc:3O(PDxBhqbR8ᘿqG蹍'טȅ96uRAR฻RC0D`.s͗fJN C"ۢmyKBz6V㧧o˳ӷ^R{$џWwF,%޿l\XB@-̝XB8s6~ endstream endobj 816 0 obj 2081 endobj 817 0 obj [ 722 0 R 724 0 R 726 0 R 728 0 R 730 0 R 732 0 R 734 0 R 736 0 R 738 0 R 740 0 R 742 0 R 744 0 R 746 0 R 748 0 R 750 0 R 752 0 R 754 0 R 756 0 R 758 0 R 760 0 R 762 0 R 764 0 R 766 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 777 0 R 779 0 R 781 0 R 783 0 R 784 0 R 786 0 R 788 0 R 790 0 R 791 0 R 793 0 R 795 0 R 796 0 R 798 0 R 799 0 R 801 0 R 802 0 R 804 0 R 805 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 813 0 R 814 0 R ] endobj 720 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 817 0 R /Contents 815 0 R >> endobj 818 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 707.175 191.267 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 819 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.948 707.175 526.068 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 820 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 647.1 null] >> endobj 821 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 694.175 135.207 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 820 0 R /H /I >> endobj 822 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.442 694.175 526.562 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 820 0 R /H /I >> endobj 823 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 579.606 null] >> endobj 824 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 681.175 207.301 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 823 0 R /H /I >> endobj 825 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.076 681.175 526.196 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 823 0 R /H /I >> endobj 826 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 565.7 null] >> endobj 827 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 668.175 353.853 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 826 0 R /H /I >> endobj 828 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.02 668.175 525.14 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 826 0 R /H /I >> endobj 829 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 641.9 null] >> endobj 830 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 655.175 303.588 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 829 0 R /H /I >> endobj 831 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.384 655.175 525.504 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 829 0 R /H /I >> endobj 832 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 144.394 null] >> endobj 833 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 642.175 240.223 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 832 0 R /H /I >> endobj 834 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.84 642.175 525.96 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 832 0 R /H /I >> endobj 835 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 648.9 null] >> endobj 836 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 629.175 329.412 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 835 0 R /H /I >> endobj 837 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.196 629.175 525.316 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 835 0 R /H /I >> endobj 838 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 202.164 null] >> endobj 839 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 616.175 118.035 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 838 0 R /H /I >> endobj 840 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.558 616.175 526.678 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 838 0 R /H /I >> endobj 841 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 603.175 296.431 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 507 0 R /H /I >> endobj 842 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.434 603.175 525.554 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 507 0 R /H /I >> endobj 843 0 obj << /Type /Action /S /GoTo /D [501 0 R /XYZ 53.858 718.3 null] >> endobj 844 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 590.175 340.825 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 845 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.116 590.175 525.236 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 846 0 obj << /Type /Action /S /GoTo /D [516 0 R /XYZ 53.858 345.128 null] >> endobj 847 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 577.175 223.721 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 846 0 R /H /I >> endobj 848 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.958 577.175 526.078 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 846 0 R /H /I >> endobj 849 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 638.5 null] >> endobj 850 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 564.175 250.433 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 849 0 R /H /I >> endobj 851 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.766 564.175 525.886 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 849 0 R /H /I >> endobj 852 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 551.175 301.814 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 545 0 R /H /I >> endobj 853 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.396 551.175 525.516 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 545 0 R /H /I >> endobj 854 0 obj << /Type /Action /S /GoTo /D [540 0 R /XYZ 53.858 647.615 null] >> endobj 855 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 538.175 297.725 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 856 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.424 538.175 525.544 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 857 0 obj << /Type /Action /S /GoTo /D [540 0 R /XYZ 53.858 157.392 null] >> endobj 858 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 525.175 276.408 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 859 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.58 525.175 525.7 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 860 0 obj << /Type /Action /S /GoTo /D [574 0 R /XYZ 53.858 679.3 null] >> endobj 861 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 512.175 134.659 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 862 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.446 512.175 526.566 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 863 0 obj << /Type /Action /S /GoTo /D [574 0 R /XYZ 53.858 625.036 null] >> endobj 864 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 499.175 266.887 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.648 499.175 525.768 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 866 0 obj << /Type /Action /S /GoTo /D [586 0 R /XYZ 87.874 503.3 null] >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 486.175 216.578 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 866 0 R /H /I >> endobj 868 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.01 486.175 526.13 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 866 0 R /H /I >> endobj 869 0 obj << /Type /Action /S /GoTo /D [597 0 R /XYZ 53.858 342.429 null] >> endobj 870 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 473.175 358.14 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 869 0 R /H /I >> endobj 871 0 obj << /Type /Annot /Subtype /Link /Rect [ 513.99 473.175 525.11 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 869 0 R /H /I >> endobj 872 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 460.175 268.27 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 629 0 R /H /I >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.638 460.175 525.758 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 629 0 R /H /I >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 447.175 333.21 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 638 0 R /H /I >> endobj 875 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.168 447.175 525.288 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 638 0 R /H /I >> endobj 876 0 obj << /Type /Action /S /GoTo /D [645 0 R /XYZ 53.858 482.5 null] >> endobj 877 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 434.175 321.787 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 876 0 R /H /I >> endobj 878 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.252 434.175 525.372 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 876 0 R /H /I >> endobj 879 0 obj << /Type /Action /S /GoTo /D [657 0 R /XYZ 53.858 523.32 null] >> endobj 880 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 421.175 281.96 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 879 0 R /H /I >> endobj 881 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.448 421.175 525.568 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 879 0 R /H /I >> endobj 882 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 402.175 227.034 411.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 677 0 R /H /I >> endobj 883 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.72 402.175 525.84 411.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 677 0 R /H /I >> endobj 884 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 87.874 673.1 null] >> endobj 885 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 389.175 221.075 398.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 884 0 R /H /I >> endobj 886 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.862 389.175 525.982 398.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 884 0 R /H /I >> endobj 887 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 380.997 null] >> endobj 888 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 376.175 232.579 385.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 887 0 R /H /I >> endobj 889 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.784 376.175 525.904 385.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 887 0 R /H /I >> endobj 890 0 obj << /Type /Action /S /GoTo /D [706 0 R /XYZ 87.874 718.3 null] >> endobj 891 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 357.175 120.089 366.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 890 0 R /H /I >> endobj 892 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.406 357.175 526.526 366.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 890 0 R /H /I >> endobj 893 0 obj << /Type /Action /S /GoTo /D [715 0 R /XYZ 87.874 718.3 null] >> endobj 894 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 338.175 147.773 347.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 893 0 R /H /I >> endobj 895 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.228 338.175 526.348 347.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 893 0 R /H /I >> endobj 896 0 obj << /Type /Action /S /GoTo /D [720 0 R /XYZ 87.874 718.3 null] >> endobj 897 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 319.175 79.978 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 896 0 R /H /I >> endobj 898 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.664 319.175 526.784 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 896 0 R /H /I >> endobj 899 0 obj << /Length 900 0 R /Filter /FlateDecode >> stream xvǑ=­̌̈|ug<#[.ؔp2ڣyͮwα??̮Uݕ_F͇uxˇ2Z$珛c#8\+1"(DPA%FDN;DpA:t"D0`y!`^ty\`^b @ &B T"DPA#>Z%~^cEYҺ>TKV2*NǴo~pr|sۯ}W0r+/d)_o˚?ՠukk:H6T;sԊA\gY: d2jb9_^Wb9X׍XF,Y TdR"KC, YvdّeGYd9@,Y: d2jb9X&:u#:; KA,Y*TdҐ,Or*dOalLsBz.˭EkN> -Ͻ^2ƢyqT>i?q(e*MlARwTlARԵZQ=H݈e-Hjbg Z KA,Y*4dirGzyPmvRjE T #@,X*eb\ 5U P7bF,Y TdR"KC, YvdّeGYd9@,Y: d2ebX*ebX*U R#KA,Y TdR!KCOO'_fn}cW|4Y[cWT+ZPQPm&RTb)XJ#҈4b) Y d)R"KE, Y4dّeGYd9@,Y:td2eK-R B,KR+J,KmRd)R"KE,Y̟b<~j??~o/p1>߿뾎QJ 2|[nXkw'*ZQ=H*ZPQSAmF Zf-VY+֊HkC!Ԛ'-DLGy"ɕy"Ʌ\?C˓oo6xb8|5.OFˍ֓@|/ȍ_+A.,g:SuL5j0@R*JART*JCҐ4*LU0UaT*S5jL՘jgvڙ`Lՙ3`TRՂT U-HU+RՊT"UmHURՆT1UaT*SUL՘1˔w4#1,9o\ҖgM|Jd~/o?~x<>'u{wt>>㇏wϷ??>pnyn)# vֲw'w|0}'y:j6IΧͯ^qLM]7mP>P>\XY(fj(7;ʝ:SuL5j0@9SC9R͙+R͙ʑjPTsr*LU0UeTS5jL՘jgv:`:SuLՙj0`Tsr35W35#՜!՜ S*LU2UeTw~hȜeWF$L6jyoT||\,.3뵼(G7ʑjr}!LU0UaT*SUjL5nn i2||r˻aPs:Y.oϻ.^qj\OوƸm KcQi*rayzUEy7売\Y>PrL5j0@9F9Rͩ0+Rͩ0ʑjNIސjNQT SLU2UeTSL3TSLu0T:SuL5j ՜ TH5(G9&yC9F9S*LU0UeTS5:͜IDݪ?;̩h5\oMϧMwm:;:/7_-kΑ6v:잾Rm|tJ5ZPQX(tP!ڐiޠLU0UaT*S5jL՘1T;SLu0TSuLՙ3`TT@9RmT[Eӡ Rm T SLU2UeTSL3TSLu0T:SuL5j xH57D9R͍QTsA7 S*LU2UeTS5ڙjgv:`:SeJ֕-, [Y$lmIڒ%ekK֖-)[[RlmIڒ%ekK֖-)[[RlmIڒ\7Xoh;ni1y\wl,/Om櫇ϯIs}wt|wr8vcާccy#YPyYP+T#KE, YZZRdQX.,,D$73`TdH5'(G9YG9R:R:ʙ0UaT*SUL՘1Ucvڙjg:3UgTS H5'(G9Y'yE9YG9R:ʑjNQT SLU2UcT$:޶ӟgM[tc~뤲\Y>P$wʧpPn,gTSL3T;SLu0T:SuL5j0@=!ʑjnOHTs{B#ܞH5'D9S*LU2UeTS5jL3T;SLu0T:SuL5j0@=!ʑjnOHTs{B#ܞ (gT SULU2Uc9R85ecYyǜ2^׏}B7;ʣ\Y>H \XY(H5/D9R͋QTA S*LU2UeTS5ڙjgv:`:SuL5j0`TA#ռhE(Gy ʑj^4r*LU0UeTS5:NG^m}KO7xo{~yx<~py>.'m-]νzypsxZW/8z5 鈥ucz_Y>Pa\XY(ݰIn,wϻaλa"y7l#y7l7:Mr*LU0UeT*S5jL՘jgv:`Lՙ3`Tλaλaλaλa!y7l3UaT SULU1՜Y4C(Mȡ<-m[z;g3t1w?L-D_lWܓ4j8|T[L?dzVDzysM5I.,,-6In,wwڙjg:`T:S L5|M#&$GM6ITl!&$gT SLU2UcTvڙjg:`T:S L5j &$GM6A^|M#&$GM6IT SLU2UcT׍-.r2ek_ײeqdY. 4_.EOggo:>LJluXLѫqӟt|sY3\XY(әIn,wf(W#,H5w\A9R=WPTsT SULU2UcTvڙjg:`T:S L5j. ʑj. Rͥ!3UaT SULU1UcT;SL3TSLu0UgTS L5j. +Rͥ!#\B9Rͥ!3UaT*SUL՘1鯃d>,ڐ:kC|mrdq8lm7^?>_U<4ј|ѫ%w+Q(,O3ӌAVj+H RmT\$oH5o΅r*LU0UaT*S5jL՘jgvڙ`Lՙ3`TR͛s͹H^j͹PT\(gT SULU1UcTvڙjg:3UgTS H5o΅r7"yEys.#ռ9R͛s S*LU2UeTTXBjr<)o'jF4_zӇTEG/+P?_?,S<7^GoHRQ[+6(we$W ʅTsH5WlPTsņT SLU2UcTs㫘~V/A.,,rc+˕L5j0`TsH5WlH^jؠ ʑjؠ S*LU2UeTS5ڙjg:`T:SuL5j \A9RW+6(GbCTsLU0UaT*SUjL5WlZ_ԡ5o_LfjMf4sh2zꍏqƍbjǝՂ 7TQQQ4kA ZhHVD:p`9BJRE~0M[ۧۇ+ײjhd)mcn;_d,WH.,,Hn,O>~I7[z:߻:HwYYvdّeGYd9@,Y: d2e1Ojb˓X&y<3I,Y d)R"KE, Y!~I ˅Xn,w{eS L5jrǓ"^S$Gyz<ʑjr*LU0UeTS5jL՘jgv:`:SuLՙj0`T U-HU RՊT"UHU+RՆT!UmLU0UaT*SUjL5y#2Vys]Z|Gͭau87:Vjzd 6/8JR/; N|ԊA<2ϪoaPnrڙjg:`T:SuL5j H5#yEʑjnFTs73UaT*SULU1UcT;SL3TSLu0UgTS H5C9RPTs7# o(gT SLU2UcTvڙjg:`T:S L5j U-HU RՂT"UHU+RՆT!UmHUڒ%ekK֖-)[[RlmIRYգG3oU^,"F8vL#m:FޛˇŻoeɗ~Ua [OKP^Wӫ_:=nzvZ>هn /nv7iER?ۿg,6&)_m?py endstream endobj 900 0 obj 9272 endobj 901 0 obj [ 818 0 R 819 0 R 821 0 R 822 0 R 824 0 R 825 0 R 827 0 R 828 0 R 830 0 R 831 0 R 833 0 R 834 0 R 836 0 R 837 0 R 839 0 R 840 0 R 841 0 R 842 0 R 844 0 R 845 0 R 847 0 R 848 0 R 850 0 R 851 0 R 852 0 R 853 0 R 855 0 R 856 0 R 858 0 R 859 0 R 861 0 R 862 0 R 864 0 R 865 0 R 867 0 R 868 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 877 0 R 878 0 R 880 0 R 881 0 R 882 0 R 883 0 R 885 0 R 886 0 R 888 0 R 889 0 R 891 0 R 892 0 R 894 0 R 895 0 R 897 0 R 898 0 R ] endobj 902 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 901 0 R /Contents 899 0 R >> endobj 903 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.108 707.175 134.228 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 806 0 R /H /I >> endobj 904 0 obj << /Type /Annot /Subtype /Link /Rect [ 162.898 694.175 174.018 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 905 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 449.025 null] >> endobj 906 0 obj << /Type /Annot /Subtype /Link /Rect [ 121.208 681.175 132.328 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 905 0 R /H /I >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Rect [ 158.448 668.175 169.568 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 908 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.428 655.175 134.548 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 909 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 569.625 null] >> endobj 910 0 obj << /Type /Annot /Subtype /Link /Rect [ 112.318 642.175 123.438 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 909 0 R /H /I >> endobj 911 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.778 629.175 147.898 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 912 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 53.858 168.359 null] >> endobj 913 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 603.175 113.108 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 912 0 R /H /I >> endobj 914 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 81.323 null] >> endobj 915 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 549.623 113.108 558.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 914 0 R /H /I >> endobj 916 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 210.699 null] >> endobj 917 0 obj << /Type /Annot /Subtype /Link /Rect [ 88.308 523.623 93.868 532.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 918 0 obj << /Type /Annot /Subtype /Link /Rect [ 272.258 510.623 277.818 519.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 919 0 obj << /Type /Action /S /GoTo /D [586 0 R /XYZ 87.874 467.225 null] >> endobj 920 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 457.071 221.468 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 919 0 R /H /I >> endobj 921 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 326.193 null] >> endobj 922 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.668 431.071 129.228 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 921 0 R /H /I >> endobj 923 0 obj << /Type /Action /S /GoTo /D [540 0 R /XYZ 53.858 611.54 null] >> endobj 924 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 405.071 221.468 414.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 925 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 379.071 154.788 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 926 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.678 366.071 161.798 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 763 0 R /H /I >> endobj 927 0 obj << /Type /Annot /Subtype /Link /Rect [ 108.988 340.071 120.108 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 928 0 obj << /Type /Annot /Subtype /Link /Rect [ 114.538 314.071 125.658 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 929 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 286.723 null] >> endobj 930 0 obj << /Type /Annot /Subtype /Link /Rect [ 121.768 275.071 132.888 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 929 0 R /H /I >> endobj 931 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.658 249.071 147.218 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 932 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 721.425 null] >> endobj 933 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.108 210.071 146.228 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 184.071 154.788 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 743 0 R /H /I >> endobj 935 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.378 171.071 202.498 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 727 0 R /H /I >> endobj 936 0 obj << /Type /Annot /Subtype /Link /Rect [ 199.718 158.071 210.838 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 729 0 R /H /I >> endobj 937 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.148 145.071 205.268 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 731 0 R /H /I >> endobj 938 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.368 132.071 202.488 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 733 0 R /H /I >> endobj 939 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.148 119.071 205.268 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 735 0 R /H /I >> endobj 940 0 obj << /Type /Annot /Subtype /Link /Rect [ 252.948 106.071 264.068 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 737 0 R /H /I >> endobj 941 0 obj << /Type /Annot /Subtype /Link /Rect [ 154.558 93.071 165.678 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 776 0 R /H /I >> endobj 942 0 obj << /Type /Annot /Subtype /Link /Rect [ 133.448 67.071 144.568 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 778 0 R /H /I >> endobj 943 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 681.175 407.922 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 944 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 463.483 null] >> endobj 945 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 642.175 374.022 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 944 0 R /H /I >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.802 616.175 395.922 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 780 0 R /H /I >> endobj 947 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.812 603.175 462.932 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 782 0 R /H /I >> endobj 948 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 495.579 null] >> endobj 949 0 obj << /Type /Annot /Subtype /Link /Rect [ 424.472 590.175 435.592 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 948 0 R /H /I >> endobj 950 0 obj << /Type /Action /S /GoTo /D [657 0 R /XYZ 53.858 484.355 null] >> endobj 951 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 551.175 462.602 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 952 0 obj << /Type /Action /S /GoTo /D [692 0 R /XYZ 53.858 477.625 null] >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.382 512.175 483.502 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 952 0 R /H /I >> endobj 954 0 obj << /Type /Annot /Subtype /Link /Rect [ 394.012 473.175 405.132 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 776 0 R /H /I >> endobj 955 0 obj << /Type /Action /S /GoTo /D [574 0 R /XYZ 53.858 589.497 null] >> endobj 956 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 447.175 462.602 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 957 0 obj << /Type /Action /S /GoTo /D [599 0 R /XYZ 87.874 412.403 null] >> endobj 958 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 421.175 462.602 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 957 0 R /H /I >> endobj 959 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 285.323 null] >> endobj 960 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.572 395.175 363.692 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 959 0 R /H /I >> endobj 961 0 obj << /Type /Annot /Subtype /Link /Rect [ 370.002 382.175 375.562 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 962 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.372 356.175 380.932 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 739 0 R /H /I >> endobj 963 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 330.175 312.552 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 964 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 53.858 416.425 null] >> endobj 965 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.162 304.175 465.722 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 964 0 R /H /I >> endobj 966 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 278.175 347.002 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 967 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 549.425 null] >> endobj 968 0 obj << /Type /Annot /Subtype /Link /Rect [ 365.902 265.175 371.462 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 967 0 R /H /I >> endobj 969 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 585.425 null] >> endobj 970 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.482 252.175 422.042 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 969 0 R /H /I >> endobj 971 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 477.425 null] >> endobj 972 0 obj << /Type /Annot /Subtype /Link /Rect [ 368.132 239.175 373.692 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 971 0 R /H /I >> endobj 973 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 513.425 null] >> endobj 974 0 obj << /Type /Annot /Subtype /Link /Rect [ 372.572 226.175 378.132 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 973 0 R /H /I >> endobj 975 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 183.323 null] >> endobj 976 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.572 200.175 363.692 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 975 0 R /H /I >> endobj 977 0 obj << /Type /Action /S /GoTo /D [490 0 R /XYZ 87.874 381.337 null] >> endobj 978 0 obj << /Type /Annot /Subtype /Link /Rect [ 382.012 174.175 393.132 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 977 0 R /H /I >> endobj 979 0 obj << /Type /Action /S /GoTo /D [516 0 R /XYZ 53.858 310.42 null] >> endobj 980 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 148.175 462.602 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 979 0 R /H /I >> endobj 981 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 109.175 407.922 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 792 0 R /H /I >> endobj 982 0 obj << /Length 983 0 R /Filter /FlateDecode >> stream xZ[o~_1 `sf4mPMQȻ]68/GZ$};C $MyGkWϔp&\&N~KRl|: xOeG9kU՟ }>خXJqquliH$P+qQ?߼o6_ɚ6&ya`χ/e6cR'*̢1h&IG UB&7Z6CnP͉@=fi+FDE߷Fz"\I FK p"!`Cp[Ի*P<3R&N͈[ Eu9(i0^!ON슲;G9edwP.K!'8Kؔ @wv\E2Rk]۴c/Mh] b~$(dJ 3lbQS&KTzn!'bpe֛2lˆ{D Ӣ iUjS6[Q6Ѝ5SD_^\um-~P_;*1HbE3\H=5zDEZeqmrF{QkL'*CƝEUmWk0^v9ڧ^W/O9ls)uqⲬʡD2f1Ld:ϰ*[aݮf j * aqenrh;֯FϯT03bݫPDDu]6 5I݅n'XLuΕJ69#I5rgx]?dRe# j׵;w)%g.7e7E5Z?B7MۜG0 ߞ0͂ APdgr.:H^pxu]4Ӫl_#ae5}6Uĺ*G,=ӞPQ3l{hz3PycyCC2߄t ?s1unGc,˝d7؍S&02ʏCtUۉ>:J]nN1U`],f Xo-mdpHNýZ2 `q) Rb\,!K`r ]$gFǓ+8z soRvlVĵ =ٔaF0_(G&F_-㛏o͂(XMqyHeS{ݵ}zhŢei1b:M@S(/x@JFd!r&_۱<xce݁n'4> endobj 986 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 694.175 200.804 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 763 0 R /H /I >> endobj 987 0 obj << /Type /Annot /Subtype /Link /Rect [ 239.054 681.175 244.614 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 749 0 R /H /I >> endobj 988 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 53.858 568.549 null] >> endobj 989 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.374 668.175 232.934 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 988 0 R /H /I >> endobj 990 0 obj << /Type /Action /S /GoTo /D [597 0 R /XYZ 53.858 306.354 null] >> endobj 991 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 642.175 255.484 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 992 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 602.425 null] >> endobj 993 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 616.175 255.484 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 992 0 R /H /I >> endobj 994 0 obj << /Type /Action /S /GoTo /D [559 0 R /XYZ 87.874 387.587 null] >> endobj 995 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 590.175 255.484 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 994 0 R /H /I >> endobj 996 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 108.325 null] >> endobj 997 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 564.175 186.014 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 998 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 173.619 null] >> endobj 999 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 525.175 276.384 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 998 0 R /H /I >> endobj 1000 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 596.353 null] >> endobj 1001 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.684 499.175 163.244 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1000 0 R /H /I >> endobj 1002 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 87.874 317.577 null] >> endobj 1003 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 431.071 274.164 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1002 0 R /H /I >> endobj 1004 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 392.071 200.804 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 803 0 R /H /I >> endobj 1005 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 105.874 684.425 null] >> endobj 1006 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 366.071 147.124 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1007 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 87.874 636.361 null] >> endobj 1008 0 obj << /Type /Annot /Subtype /Link /Rect [ 202.124 340.071 213.244 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1007 0 R /H /I >> endobj 1009 0 obj << /Type /Annot /Subtype /Link /Rect [ 283.064 327.071 294.184 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1002 0 R /H /I >> endobj 1010 0 obj << /Type /Action /S /GoTo /D [686 0 R /XYZ 53.858 552.195 null] >> endobj 1011 0 obj << /Type /Annot /Subtype /Link /Rect [ 295.834 314.071 306.954 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1010 0 R /H /I >> endobj 1012 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 87.874 546.097 null] >> endobj 1013 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.694 301.071 295.814 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1014 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 87.874 243.513 null] >> endobj 1015 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.234 288.071 176.354 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1016 0 obj << /Type /Annot /Subtype /Link /Rect [ 261.924 275.071 273.044 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1017 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 488.423 null] >> endobj 1018 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.224 262.071 186.344 271.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1017 0 R /H /I >> endobj 1019 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 684.025 null] >> endobj 1020 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.824 249.071 236.944 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1019 0 R /H /I >> endobj 1021 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.684 236.071 205.804 245.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 1022 0 obj << /Type /Action /S /GoTo /D [686 0 R /XYZ 53.858 121.32 null] >> endobj 1023 0 obj << /Type /Annot /Subtype /Link /Rect [ 188.564 223.071 199.684 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1024 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 87.874 133.785 null] >> endobj 1025 0 obj << /Type /Annot /Subtype /Link /Rect [ 236.914 210.071 248.034 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1026 0 obj << /Type /Action /S /GoTo /D [686 0 R /XYZ 53.858 420.765 null] >> endobj 1027 0 obj << /Type /Annot /Subtype /Link /Rect [ 221.924 197.071 233.044 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1028 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 579.724 null] >> endobj 1029 0 obj << /Type /Annot /Subtype /Link /Rect [ 280.824 184.071 291.944 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1030 0 obj << /Type /Action /S /GoTo /D [686 0 R /XYZ 53.858 644.21 null] >> endobj 1031 0 obj << /Type /Annot /Subtype /Link /Rect [ 243.044 171.071 254.164 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1030 0 R /H /I >> endobj 1032 0 obj << /Type /Action /S /GoTo /D [686 0 R /XYZ 53.858 218.535 null] >> endobj 1033 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.534 158.071 274.654 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1032 0 R /H /I >> endobj 1034 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 343.221 null] >> endobj 1035 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.454 145.071 221.574 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1034 0 R /H /I >> endobj 1036 0 obj << /Type /Annot /Subtype /Link /Rect [ 245.294 132.071 256.414 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 741 0 R /H /I >> endobj 1037 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.254 119.071 221.374 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 1038 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.234 106.071 171.354 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 952 0 R /H /I >> endobj 1039 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.454 93.071 183.574 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 998 0 R /H /I >> endobj 1040 0 obj << /Type /Action /S /GoTo /D [692 0 R /XYZ 53.858 556.825 null] >> endobj 1041 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.024 80.071 234.144 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1042 0 obj << /Type /Action /S /GoTo /D [692 0 R /XYZ 53.858 636.025 null] >> endobj 1043 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.694 67.071 240.814 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1042 0 R /H /I >> endobj 1044 0 obj << /Type /Action /S /GoTo /D [689 0 R /XYZ 87.874 264.92 null] >> endobj 1045 0 obj << /Type /Annot /Subtype /Link /Rect [ 532.518 707.175 543.638 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1044 0 R /H /I >> endobj 1046 0 obj << /Type /Action /S /GoTo /D [692 0 R /XYZ 53.858 411.425 null] >> endobj 1047 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.958 694.175 478.078 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1046 0 R /H /I >> endobj 1048 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 583.1 null] >> endobj 1049 0 obj << /Type /Annot /Subtype /Link /Rect [ 518.838 668.175 529.958 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1048 0 R /H /I >> endobj 1050 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.058 642.175 452.178 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 912 0 R /H /I >> endobj 1051 0 obj << /Type /Annot /Subtype /Link /Rect [ 371.028 629.175 382.148 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 914 0 R /H /I >> endobj 1052 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.248 616.175 374.368 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1053 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 355.947 null] >> endobj 1054 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.028 590.175 387.148 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1053 0 R /H /I >> endobj 1055 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 469.566 null] >> endobj 1056 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.258 577.175 409.378 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1055 0 R /H /I >> endobj 1057 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 105.874 164.319 null] >> endobj 1058 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.378 564.175 471.498 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1057 0 R /H /I >> endobj 1059 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 514.611 null] >> endobj 1060 0 obj << /Type /Annot /Subtype /Link /Rect [ 456.478 551.175 467.598 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1059 0 R /H /I >> endobj 1061 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 424.611 null] >> endobj 1062 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.908 538.175 437.028 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1061 0 R /H /I >> endobj 1063 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 405.575 null] >> endobj 1064 0 obj << /Type /Annot /Subtype /Link /Rect [ 435.498 525.175 446.618 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1063 0 R /H /I >> endobj 1065 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 105.874 305.319 null] >> endobj 1066 0 obj << /Type /Annot /Subtype /Link /Rect [ 431.578 512.175 442.698 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1065 0 R /H /I >> endobj 1067 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 105.874 633.425 null] >> endobj 1068 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.028 499.175 412.148 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1067 0 R /H /I >> endobj 1069 0 obj << /Type /Action /S /GoTo /D [252 0 R /XYZ 87.874 286.961 null] >> endobj 1070 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.028 486.175 407.148 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1069 0 R /H /I >> endobj 1071 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 105.874 228.319 null] >> endobj 1072 0 obj << /Type /Annot /Subtype /Link /Rect [ 422.158 473.175 433.278 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1071 0 R /H /I >> endobj 1073 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 721.425 null] >> endobj 1074 0 obj << /Type /Annot /Subtype /Link /Rect [ 388.238 460.175 399.358 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1073 0 R /H /I >> endobj 1075 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 635.1 null] >> endobj 1076 0 obj << /Type /Annot /Subtype /Link /Rect [ 424.618 447.175 435.738 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1075 0 R /H /I >> endobj 1077 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.478 434.175 419.598 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1073 0 R /H /I >> endobj 1078 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 395.175 397.468 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 905 0 R /H /I >> endobj 1079 0 obj << /Type /Action /S /GoTo /D [586 0 R /XYZ 87.874 119.349 null] >> endobj 1080 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 369.175 496.618 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1079 0 R /H /I >> endobj 1081 0 obj << /Type /Annot /Subtype /Link /Rect [ 377.138 330.175 388.258 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1053 0 R /H /I >> endobj 1082 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 687.1 null] >> endobj 1083 0 obj << /Type /Annot /Subtype /Link /Rect [ 473.498 317.175 484.618 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1082 0 R /H /I >> endobj 1084 0 obj << /Type /Annot /Subtype /Link /Rect [ 422.708 304.175 433.828 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 919 0 R /H /I >> endobj 1085 0 obj << /Type /Annot /Subtype /Link /Rect [ 390.458 291.175 401.578 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 957 0 R /H /I >> endobj 1086 0 obj << /Type /Annot /Subtype /Link /Rect [ 461.608 278.175 472.728 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 977 0 R /H /I >> endobj 1087 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.008 252.175 352.128 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 1088 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.838 239.175 509.958 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 994 0 R /H /I >> endobj 1089 0 obj << /Type /Action /S /GoTo /D [657 0 R /XYZ 53.858 421.065 null] >> endobj 1090 0 obj << /Type /Annot /Subtype /Link /Rect [ 449.388 226.175 460.508 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1089 0 R /H /I >> endobj 1091 0 obj << /Type /Action /S /GoTo /D [657 0 R /XYZ 53.858 344.775 null] >> endobj 1092 0 obj << /Type /Annot /Subtype /Link /Rect [ 420.478 213.175 431.598 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1091 0 R /H /I >> endobj 1093 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.038 187.175 412.158 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 1094 0 obj << /Type /Action /S /GoTo /D [424 0 R /XYZ 53.858 631.484 null] >> endobj 1095 0 obj << /Type /Annot /Subtype /Link /Rect [ 511.638 174.175 522.758 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1094 0 R /H /I >> endobj 1096 0 obj << /Type /Action /S /GoTo /D [559 0 R /XYZ 87.874 197.078 null] >> endobj 1097 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.708 161.175 418.828 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1096 0 R /H /I >> endobj 1098 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.418 148.175 515.538 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 1099 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.048 135.175 452.168 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 992 0 R /H /I >> endobj 1100 0 obj << /Type /Action /S /GoTo /D [540 0 R /XYZ 53.858 121.317 null] >> endobj 1101 0 obj << /Type /Annot /Subtype /Link /Rect [ 457.158 122.175 468.278 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1100 0 R /H /I >> endobj 1102 0 obj << /Type /Action /S /GoTo /D [501 0 R /XYZ 53.858 702.225 null] >> endobj 1103 0 obj << /Type /Annot /Subtype /Link /Rect [ 431.038 109.175 442.158 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1102 0 R /H /I >> endobj 1104 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 607.122 null] >> endobj 1105 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.958 96.175 526.078 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1104 0 R /H /I >> endobj 1106 0 obj << /Type /Action /S /GoTo /D [611 0 R /XYZ 53.858 654.425 null] >> endobj 1107 0 obj << /Type /Annot /Subtype /Link /Rect [ 480.508 83.175 491.628 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1106 0 R /H /I >> endobj 1108 0 obj << /Type /Action /S /GoTo /D [559 0 R /XYZ 87.874 612.825 null] >> endobj 1109 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.408 70.175 515.528 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1110 0 obj << /Length 1111 0 R /Filter /FlateDecode >> stream xZoF_K wKzMEV2aTa[ )YرC8Y~Y(!~$vpO4#?F*6RBH[uL՜%xq-~] )~X;]}+uiv[BK2T/oIQ& <D(b{r}r@EIk%Rr+~{ST>oz#!|巾ZAmޗMݽ*Jeeu\gRY޷۲,zQ7Ȕ*R .x aigX^m3XOb#cTnv`xQGyC[!/|W>*߉f->o/芶X ȭ(MleŇމmS}DURyR0Jż]Em.e՛vWo'`6fIAKx'a7orI8q n3 TFg%XddJҀ}6mw~ LQ Hze:-„E I88cE҄5ŀqP 282'^ @ akySvc[?2JY,*ə a9=!FgH11 *hWn3iob܏)$à/'uq6u3@wJS!*M2YMIk\Ji%pTjփm/ %Dfn"m=%R,/%bɈfFǶ7o2A 'CPYeI>}c\5YsXC e ˆ^dA(%c8҉R{1wR$a> 3bO2u=ԭgEJs&]wkxuǪXw ɺ੻Zy6xڅa> endobj 1114 0 obj << /Type /Action /S /GoTo /D [626 0 R /XYZ 87.874 702.225 null] >> endobj 1115 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.328 707.175 186.448 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1114 0 R /H /I >> endobj 1116 0 obj << /Type /Action /S /GoTo /D [645 0 R /XYZ 53.858 446.425 null] >> endobj 1117 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 681.175 76.978 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1116 0 R /H /I >> endobj 1118 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 108.319 null] >> endobj 1119 0 obj << /Type /Annot /Subtype /Link /Rect [ 178.118 668.175 189.238 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1118 0 R /H /I >> endobj 1120 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 642.175 76.978 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1079 0 R /H /I >> endobj 1121 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 529.625 null] >> endobj 1122 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.928 629.175 237.048 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1123 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 543.837 null] >> endobj 1124 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.218 616.175 155.338 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1123 0 R /H /I >> endobj 1125 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 612.825 null] >> endobj 1126 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.898 616.175 172.018 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1125 0 R /H /I >> endobj 1127 0 obj << /Type /Action /S /GoTo /D [559 0 R /XYZ 87.874 304.587 null] >> endobj 1128 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.088 590.175 114.208 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1127 0 R /H /I >> endobj 1129 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 309.609 null] >> endobj 1130 0 obj << /Type /Annot /Subtype /Link /Rect [ 253.708 577.175 264.828 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1129 0 R /H /I >> endobj 1131 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.998 564.175 203.118 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 1132 0 obj << /Type /Annot /Subtype /Link /Rect [ 163.118 551.175 174.238 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 1133 0 obj << /Type /Action /S /GoTo /D [597 0 R /XYZ 53.858 662.425 null] >> endobj 1134 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.038 538.175 218.158 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1133 0 R /H /I >> endobj 1135 0 obj << /Type /Action /S /GoTo /D [574 0 R /XYZ 53.858 247.088 null] >> endobj 1136 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.218 525.175 195.338 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1135 0 R /H /I >> endobj 1137 0 obj << /Type /Action /S /GoTo /D [620 0 R /XYZ 53.858 472.225 null] >> endobj 1138 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.888 512.175 187.008 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1137 0 R /H /I >> endobj 1139 0 obj << /Type /Action /S /GoTo /D [626 0 R /XYZ 87.874 135.507 null] >> endobj 1140 0 obj << /Type /Annot /Subtype /Link /Rect [ 192.568 512.175 203.688 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1139 0 R /H /I >> endobj 1141 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 486.175 76.978 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1142 0 obj << /Type /Annot /Subtype /Link /Rect [ 173.118 473.175 184.238 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 979 0 R /H /I >> endobj 1143 0 obj << /Type /Action /S /GoTo /D [586 0 R /XYZ 87.874 81.323 null] >> endobj 1144 0 obj << /Type /Annot /Subtype /Link /Rect [ 137.558 460.175 148.678 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1143 0 R /H /I >> endobj 1145 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 259.638 null] >> endobj 1146 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.218 447.175 160.338 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1145 0 R /H /I >> endobj 1147 0 obj << /Type /Annot /Subtype /Link /Rect [ 116.988 421.175 128.108 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1129 0 R /H /I >> endobj 1148 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 382.175 242.368 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1149 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 343.175 242.368 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1042 0 R /H /I >> endobj 1150 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 64.858 595.325 null] >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 317.175 122.558 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1150 0 R /H /I >> endobj 1152 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 278.175 240.148 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1010 0 R /H /I >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 239.175 166.788 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 778 0 R /H /I >> endobj 1154 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 87.874 171.32 null] >> endobj 1155 0 obj << /Type /Annot /Subtype /Link /Rect [ 224.258 184.071 233.698 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1154 0 R /H /I >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 158.071 221.468 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 132.071 221.468 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 994 0 R /H /I >> endobj 1158 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 106.071 221.468 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1159 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 491.551 null] >> endobj 1160 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.338 93.071 153.898 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1159 0 R /H /I >> endobj 1161 0 obj << /Type /Action /S /GoTo /D [63 0 R /XYZ 53.858 644.525 null] >> endobj 1162 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.988 80.071 123.108 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1163 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 374.303 null] >> endobj 1164 0 obj << /Type /Annot /Subtype /Link /Rect [ 146.428 67.071 151.988 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1163 0 R /H /I >> endobj 1165 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 105.874 658.425 null] >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 681.175 374.022 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1165 0 R /H /I >> endobj 1167 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 642.175 407.922 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.332 603.175 363.452 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 909 0 R /H /I >> endobj 1169 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 64.858 286.853 null] >> endobj 1170 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 577.175 352.562 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1169 0 R /H /I >> endobj 1171 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 147.324 null] >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 551.175 374.022 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1171 0 R /H /I >> endobj 1173 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 409.601 null] >> endobj 1174 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.242 525.175 387.362 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1175 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 381.753 null] >> endobj 1176 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 499.175 352.562 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1175 0 R /H /I >> endobj 1177 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 430.272 null] >> endobj 1178 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 473.175 352.562 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1177 0 R /H /I >> endobj 1179 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 434.175 481.282 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1180 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 408.175 462.602 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 919 0 R /H /I >> endobj 1181 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 382.175 462.602 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 1182 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 87.874 487.373 null] >> endobj 1183 0 obj << /Type /Annot /Subtype /Link /Rect [ 340.572 369.175 351.692 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1184 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.332 356.175 346.452 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 959 0 R /H /I >> endobj 1185 0 obj << /Type /Annot /Subtype /Link /Rect [ 343.102 343.175 354.222 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 975 0 R /H /I >> endobj 1186 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 234.323 null] >> endobj 1187 0 obj << /Type /Annot /Subtype /Link /Rect [ 387.022 330.175 398.142 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1186 0 R /H /I >> endobj 1188 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 132.323 null] >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Rect [ 330.332 317.175 341.452 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1190 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 141.328 null] >> endobj 1191 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.242 291.175 387.362 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1190 0 R /H /I >> endobj 1192 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 105.874 584.425 null] >> endobj 1193 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.782 278.175 355.902 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1192 0 R /H /I >> endobj 1194 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 81.323 null] >> endobj 1195 0 obj << /Type /Annot /Subtype /Link /Rect [ 380.362 265.175 391.482 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1194 0 R /H /I >> endobj 1196 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 387.323 null] >> endobj 1197 0 obj << /Type /Annot /Subtype /Link /Rect [ 329.772 252.175 340.892 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1196 0 R /H /I >> endobj 1198 0 obj << /Type /Annot /Subtype /Link /Rect [ 346.452 252.175 357.572 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1196 0 R /H /I >> endobj 1199 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 336.323 null] >> endobj 1200 0 obj << /Type /Annot /Subtype /Link /Rect [ 332.552 239.175 343.672 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1199 0 R /H /I >> endobj 1201 0 obj << /Type /Annot /Subtype /Link /Rect [ 334.772 213.175 345.892 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1150 0 R /H /I >> endobj 1202 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 187.175 462.602 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1203 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 161.175 462.602 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1089 0 R /H /I >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 135.175 462.602 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1089 0 R /H /I >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 109.175 462.602 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1089 0 R /H /I >> endobj 1206 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 83.175 462.602 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1091 0 R /H /I >> endobj 1207 0 obj << /Length 1208 0 R /Filter /FlateDecode >> stream xZ[o~ׯ]rK>EZ@pM%Rő )Y脉$mjs{W(wϔ0IL82*QH%ZD(>x_+'S" ~7w?j!/O<7bl?.?R,SKH#˝]r寋Kj` ɩ= O|^f Bp0󁆟M"=] /TFwu建Fmv,oyB"mPŔI"I7msboҵ7#.]8 RLtL%*o;:Qֻ]Qrh6`\"ݡꀝPfCM7k ]UjźwV wwiVT \7xakn\F :TOPD2?Ll(ڮxn:|5x܃/-+_uniLu+:PeGq2$J0ti4|W*S9Tu pePxPʷt/$&9KFbjSiH_*O2?/ecRFBaw+VyhrUw o3oB*(;1Bs ;DvdRgd,5+o8,F) ܡ ceCkHp++q*Qc}rLݍF&Sc0QtC/:0j0a~L"%KS- Cε8 k@6PB{@<ts@ʀ+"q&>S!(V'0a}SiB0]ܡtn3IbWh5Mݴן uZ$I=x2e0+-md:KYHo?.߽2 3e6YIqVfa:cZSA!ST0t*,Rh;]فm.xw0$A43au׭|َޣI'v?@0 7V1ڄ9X3ax(:sԃn5(6m΅.Hr0xaP ) 5kR>96HHP@lVf$t48 ]CԜZuIlYWx"jEqnBtw*}enc~Qޓ6ڄ:\tЭn{1_]Qm\+d#Tj+M-t#BʂH,I9װ1JNSX0'}usyTMХfL$K +#J7&Z {W[tF9NIR8yV@}Ww3,V]ێ&_?,\bOIGkƜ] T^üAu[Ayv0I4J ÜLfJMB2+KsA: U5/&p)L1b|R-P7Er 7ƔH 0^`G YJ]@YՇr,lq>)ȝ9qSrc&n p/͆ye]ݦo 0̓eFd%%fd˨f3j$tYP]{>+S*7%y; Jt,w7CzU<ɲ2`߳fOaM!BOBOHG}_XJ5ՙUx>8[гN%н+td1( כ0霤X.gqG /inaGUP0a>q+:O3 @e=.?1ӨKK]a1fd{0}-h|ah92KaҎ_}0$;qN&@cⱖ5߽SIw߾ Әfb hLNs6ed~VNMY[?9O endstream endobj 1208 0 obj 2156 endobj 1209 0 obj [ 1115 0 R 1117 0 R 1119 0 R 1120 0 R 1122 0 R 1124 0 R 1126 0 R 1128 0 R 1130 0 R 1131 0 R 1132 0 R 1134 0 R 1136 0 R 1138 0 R 1140 0 R 1141 0 R 1142 0 R 1144 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1151 0 R 1152 0 R 1153 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1160 0 R 1162 0 R 1164 0 R 1166 0 R 1167 0 R 1168 0 R 1170 0 R 1172 0 R 1174 0 R 1176 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1183 0 R 1184 0 R 1185 0 R 1187 0 R 1189 0 R 1191 0 R 1193 0 R 1195 0 R 1197 0 R 1198 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R ] endobj 1210 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1209 0 R /Contents 1207 0 R >> endobj 1211 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.454 675.455 156.574 684.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1186 0 R /H /I >> endobj 1212 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 721.425 null] >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 636.455 166.904 645.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1214 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.684 610.455 163.244 619.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1000 0 R /H /I >> endobj 1215 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 571.455 274.164 580.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1216 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 532.455 274.164 541.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1217 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.584 488.735 180.704 497.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1218 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 53.858 702.225 null] >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.924 462.735 216.044 471.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.254 449.735 221.374 458.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 944 0 R /H /I >> endobj 1221 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 436.735 166.904 445.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1165 0 R /H /I >> endobj 1222 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 71.858 598.225 null] >> endobj 1223 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.554 423.735 154.674 432.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1222 0 R /H /I >> endobj 1224 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 71.858 159.225 null] >> endobj 1225 0 obj << /Type /Annot /Subtype /Link /Rect [ 166.894 410.735 178.014 419.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1226 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 187.698 null] >> endobj 1227 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.124 397.735 168.244 406.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1226 0 R /H /I >> endobj 1228 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 252.919 null] >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.484 384.735 251.604 393.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1228 0 R /H /I >> endobj 1230 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.244 371.735 241.364 380.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 929 0 R /H /I >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.114 358.735 155.234 367.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1232 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 345.735 208.034 354.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1228 0 R /H /I >> endobj 1233 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 81.319 null] >> endobj 1234 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.804 332.735 206.924 341.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1235 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.444 319.735 168.564 328.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1171 0 R /H /I >> endobj 1236 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 243.119 null] >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Rect [ 173.794 306.735 184.914 315.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1236 0 R /H /I >> endobj 1238 0 obj << /Type /Annot /Subtype /Link /Rect [ 183.484 293.735 194.604 302.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1075 0 R /H /I >> endobj 1239 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 267.735 180.244 276.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 241.735 186.014 250.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 1241 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 549.425 null] >> endobj 1242 0 obj << /Type /Annot /Subtype /Link /Rect [ 201.014 215.735 206.574 224.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1241 0 R /H /I >> endobj 1243 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.684 176.735 180.244 185.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 964 0 R /H /I >> endobj 1244 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 120.015 255.484 129.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1100 0 R /H /I >> endobj 1245 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 94.015 255.484 103.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 992 0 R /H /I >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 68.015 255.484 77.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1102 0 R /H /I >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.028 694.175 427.148 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 1248 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 655.175 515.298 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1249 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 616.175 496.618 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 1250 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.028 590.175 427.148 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 1251 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.918 551.175 408.038 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1222 0 R /H /I >> endobj 1252 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 525.175 496.618 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1094 0 R /H /I >> endobj 1253 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 499.175 429.938 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 780 0 R /H /I >> endobj 1254 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 473.175 496.618 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1104 0 R /H /I >> endobj 1255 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 447.175 496.618 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 919 0 R /H /I >> endobj 1256 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 421.175 429.938 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 1257 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 395.175 364.128 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 1258 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 356.175 397.468 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 1259 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 592.583 null] >> endobj 1260 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.588 343.175 395.148 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1259 0 R /H /I >> endobj 1261 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 317.175 496.618 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1096 0 R /H /I >> endobj 1262 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.588 291.175 407.148 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1259 0 R /H /I >> endobj 1263 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 147.125 null] >> endobj 1264 0 obj << /Type /Annot /Subtype /Link /Rect [ 471.618 278.175 477.178 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1265 0 obj << /Type /Annot /Subtype /Link /Rect [ 483.288 265.175 488.848 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 988 0 R /H /I >> endobj 1266 0 obj << /Type /Annot /Subtype /Link /Rect [ 428.828 252.175 434.388 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1267 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 619.425 null] >> endobj 1268 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.738 239.175 448.298 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1267 0 R /H /I >> endobj 1269 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 392.325 null] >> endobj 1270 0 obj << /Type /Annot /Subtype /Link /Rect [ 432.718 226.175 438.278 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1271 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.388 213.175 474.948 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1272 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 585.425 null] >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 187.175 447.708 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1272 0 R /H /I >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.028 161.175 374.588 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 1275 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 122.175 441.938 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 778 0 R /H /I >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.498 96.175 466.058 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 921 0 R /H /I >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Rect [ 438.838 83.175 444.398 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1000 0 R /H /I >> endobj 1278 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.618 70.175 447.178 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1000 0 R /H /I >> endobj 1279 0 obj << /Length 1280 0 R /Filter /FlateDecode >> stream xZKoHW1b&yd6{ b&-d”뷚,dlj$z_VJHIz2]S"M4E#-mlL,*#y #aE5'b.Is\ _nV p݊q#uivY@79ēR}\?iG5q@$4(:Qb$ܒbju~.W *IfYfډ?/qOX[IX'Qİqw]~~HH%Y)5#Ѧ߯޷ZmȦf[yEep-v~wM/*߈55kSf|"$h`TZ 25 }CQ}þk KʢT±%pȔTJXMہ0뼺5>܄_]7iԨeL62:M/[e*t{w`r90@T%˨6YM/vu}J̎JVj6RO!g*pyq)u Bg&p[֗kE$ N@/TI )-E4{{>ZG& 8 OhlAbjS7ӱұ!,WK_F^yQ g$0'ZA\Bp%7 $3!N6K` Ait@ȅN1.XGA<U"oRBʅ;tc1ƬHE@.eH  rԽM8.dH(v)Z)F]ޔ5x׾S"c) 0 S2 > Ȇs zR:P`vpξ7I- |)bzÑ;֩2{_Az b0dO j! )Mvt7>+}ۉloEڔ]0rYXFcX{H)QH\Z`A**+m/! =L362qzV$3INR`߆p)UKݩ~ɺ:pT~8P$S?_⺪׷"t:$ܗYgG/F0%iafqAd\?ߕk5gjSfbA(?o[$%t\|0Ӽ`fvN4fS߉4ߔcUs-I_z1y5S(,.΋]B^0q1E@d^HC1D`VCy}뛋Cm_c(:8A"E?q;*τ)5ゐZP[ 4V|4"oP2҈I+ f>yf΋*f4#BŴ@2>#e9y(y9a Ӏ̉:tFbQ%ɮ~w'O% 32eӔ;#ew:pu^w w0?">af1Lq7o nѶg)sz. eAu 0;0ʦ!Flb_Q߾cj "5QC@9mNhM]~08#ie"MӅI 9!04LR hݵgФSfLa= ϙzG>gD]jfη?|w`mep zx [ gOACqx3MR3ËNefp-S,H04Sf$Lq n m 68328eb%.Mbq2(2]tH_1x3 L9EL'b+6Mch1@*8\=8CFca7pÃƖ)F~ȿ@(vx&ۜaa 3_DTtxq1Jg/+3N) n{tx,pSq [F}xw8]~_l5$ϗ؀3o"0F?/~mx2"ӥ~\"~ endstream endobj 1280 0 obj 2107 endobj 1281 0 obj [ 1211 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1219 0 R 1220 0 R 1221 0 R 1223 0 R 1225 0 R 1227 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1234 0 R 1235 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1260 0 R 1261 0 R 1262 0 R 1264 0 R 1265 0 R 1266 0 R 1268 0 R 1270 0 R 1271 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R ] endobj 1282 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1281 0 R /Contents 1279 0 R >> endobj 1283 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 108.321 null] >> endobj 1284 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.338 707.175 185.898 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1283 0 R /H /I >> endobj 1285 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 687.1 null] >> endobj 1286 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.008 694.175 182.568 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1285 0 R /H /I >> endobj 1287 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 655.175 242.368 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 998 0 R /H /I >> endobj 1288 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 616.175 240.148 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1289 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 577.175 166.788 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 1290 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 524.14 221.468 533.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 1291 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.468 511.14 190.028 520.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1292 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.038 498.14 280.598 507.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 916 0 R /H /I >> endobj 1293 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.138 485.14 201.698 494.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 988 0 R /H /I >> endobj 1294 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 459.14 113.108 468.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1057 0 R /H /I >> endobj 1295 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 433.14 113.108 442.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1059 0 R /H /I >> endobj 1296 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.198 394.14 122.318 403.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 328.105 240.148 337.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1017 0 R /H /I >> endobj 1298 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.668 302.105 129.228 311.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1283 0 R /H /I >> endobj 1299 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 263.105 166.788 272.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 1300 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 105.874 648.425 null] >> endobj 1301 0 obj << /Type /Annot /Subtype /Link /Rect [ 96.428 237.105 107.548 246.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1300 0 R /H /I >> endobj 1302 0 obj << /Type /Annot /Subtype /Link /Rect [ 113.438 211.105 124.558 220.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 721 0 R /H /I >> endobj 1303 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.098 198.105 126.218 207.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 723 0 R /H /I >> endobj 1304 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.778 198.105 142.898 207.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 725 0 R /H /I >> endobj 1305 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 132.07 242.368 141.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1306 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 93.07 242.368 102.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1042 0 R /H /I >> endobj 1307 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 707.175 407.922 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 782 0 R /H /I >> endobj 1308 0 obj << /Type /Annot /Subtype /Link /Rect [ 343.122 681.175 354.242 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1061 0 R /H /I >> endobj 1309 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 655.175 462.602 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 1310 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 629.175 462.602 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 979 0 R /H /I >> endobj 1311 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 603.175 462.602 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 992 0 R /H /I >> endobj 1312 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 577.175 462.602 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1100 0 R /H /I >> endobj 1313 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 551.175 462.602 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1102 0 R /H /I >> endobj 1314 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 525.175 462.602 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1104 0 R /H /I >> endobj 1315 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 499.175 462.602 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1106 0 R /H /I >> endobj 1316 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 473.175 462.602 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1317 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 447.175 462.602 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1114 0 R /H /I >> endobj 1318 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 421.175 462.602 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1116 0 R /H /I >> endobj 1319 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 395.175 462.602 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1118 0 R /H /I >> endobj 1320 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 356.175 407.922 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 1321 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 330.175 462.602 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1079 0 R /H /I >> endobj 1322 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.802 304.175 395.922 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 1323 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.902 249.071 387.022 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1300 0 R /H /I >> endobj 1324 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 223.071 462.602 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1325 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 197.071 462.602 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1123 0 R /H /I >> endobj 1326 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.162 197.071 479.282 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1125 0 R /H /I >> endobj 1327 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 171.071 462.602 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1328 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 145.071 462.602 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1123 0 R /H /I >> endobj 1329 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.162 145.071 479.282 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1125 0 R /H /I >> endobj 1330 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 106.071 481.282 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1019 0 R /H /I >> endobj 1331 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 67.071 481.282 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 1332 0 obj << /Length 1333 0 R /Filter /FlateDecode >> stream xZKoH W Z Qf4In-tyÕˑ[>)GrCrH'q:u?$dY9z&Ac@dP@HŹdBw%PщywiU9l9M'l8摬 T$AZZ[ͼnʴ,+*&}d +7 L$"Y~ CS',./-MS7}T$CŌ$Mۥy5V0( d?`mҶUWmҦIpg6=k-Fgd""B; zMٶu{–ZW,:K q=-EaIuA|$]þbGEs0A !>@y XHRCzݰ:λ ~m*[[a" Y0j;/g  %HK0v`m䋎!o$`}M(1rkE^ ٙIp5΍ TIzt4M]RDy1RXb8e^cR ؀w`7#t[QLSxK-ʜ/߼zx-u)pAl gG $4\EW,/@a d?;ަ8Џ!#`CW, ބ"UqhkOB& 0Rjv?/<͋ec .?~#x#sH!jZ|tI6y~KFU\z-Φ H_|)jwmWƌYZlj\ZUZ*w̉IW o.lTpUM__g5T8ؒ@Wr{v _7[6 t+rP2 iV7JDak{V2PF@='h 5d޽`GfHxRO.u<уm. $$/>|_|J4}s4XH-*my v&_˷'m(};*d5vI(tC.:tJ+m]hn4t [._ZbӠs^5BPr @sfMZ]-<,v]_-;*ɢV"7j[ǸpUaYv~ X.qˉؙ˳@qzHki웸A ۾#HB"F(Rp)x7мҽAzl_RD8Rdn(Xyx2.|7hzgm?onHoiJ:RT~CnA12C,wubч!Z'GL"tA(% Ƈ̯R}@z>hR3R+?¦ͦf랏hlϫ$;k;KSD U=: 8 uG!GiOi9k9 ܿ )Wb]ܔvtFǛF`a"o׾c:OWCHU܇bvQdn4iַ0|9G2\sͭ ^5x02& p7^Or3CZ;0"DR;#Ƞ>20Y9x58`cE9V:iݸX?t'05 2ڈ90Y^]@%/!:  @F lcp}ˑvC ~}#<5[V [q2501Z)dee endstream endobj 1333 0 obj 1964 endobj 1334 0 obj [ 1284 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1330 0 R 1331 0 R ] endobj 1335 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1334 0 R /Contents 1332 0 R >> endobj 1336 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 681.175 276.384 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1044 0 R /H /I >> endobj 1337 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.054 613.071 314.174 622.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 1338 0 obj << /Type /Annot /Subtype /Link /Rect [ 185.454 600.071 196.574 609.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 759 0 R /H /I >> endobj 1339 0 obj << /Type /Annot /Subtype /Link /Rect [ 239.914 587.071 251.034 596.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 1340 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.694 574.071 195.814 583.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 763 0 R /H /I >> endobj 1341 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.004 548.071 154.124 557.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 1342 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.554 522.071 159.674 531.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 1343 0 obj << /Type /Annot /Subtype /Link /Rect [ 262.724 509.071 273.844 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 743 0 R /H /I >> endobj 1344 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.394 496.071 236.514 505.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 727 0 R /H /I >> endobj 1345 0 obj << /Type /Annot /Subtype /Link /Rect [ 233.734 483.071 244.854 492.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 729 0 R /H /I >> endobj 1346 0 obj << /Type /Annot /Subtype /Link /Rect [ 228.164 470.071 239.284 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 731 0 R /H /I >> endobj 1347 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.384 457.071 236.504 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 733 0 R /H /I >> endobj 1348 0 obj << /Type /Annot /Subtype /Link /Rect [ 228.164 444.071 239.284 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 735 0 R /H /I >> endobj 1349 0 obj << /Type /Annot /Subtype /Link /Rect [ 286.964 431.071 298.084 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 737 0 R /H /I >> endobj 1350 0 obj << /Type /Annot /Subtype /Link /Rect [ 188.574 418.071 199.694 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 776 0 R /H /I >> endobj 1351 0 obj << /Type /Annot /Subtype /Link /Rect [ 167.464 392.071 178.584 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 778 0 R /H /I >> endobj 1352 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.504 379.071 286.624 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 780 0 R /H /I >> endobj 1353 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.694 366.071 255.814 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 782 0 R /H /I >> endobj 1354 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.384 353.071 270.504 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 1355 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.934 340.071 256.054 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 1356 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 314.071 122.994 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 1357 0 obj << /Type /Annot /Subtype /Link /Rect [ 233.254 301.071 244.374 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 1358 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.384 288.071 295.504 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 1359 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 262.071 122.994 271.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 792 0 R /H /I >> endobj 1360 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.784 249.071 161.904 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 1361 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 223.071 122.994 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 1362 0 obj << /Type /Annot /Subtype /Link /Rect [ 243.054 210.071 254.174 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 1363 0 obj << /Type /Annot /Subtype /Link /Rect [ 248.624 197.071 259.744 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 1364 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.804 184.071 234.924 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 1365 0 obj << /Type /Annot /Subtype /Link /Rect [ 256.374 171.071 267.494 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1366 0 obj << /Type /Annot /Subtype /Link /Rect [ 200.804 158.071 211.924 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 803 0 R /H /I >> endobj 1367 0 obj << /Type /Annot /Subtype /Link /Rect [ 276.374 145.071 287.494 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1368 0 obj << /Type /Action /S /GoTo /D [683 0 R /XYZ 53.858 339.045 null] >> endobj 1369 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.334 119.071 139.894 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1368 0 R /H /I >> endobj 1370 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 80.071 200.804 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 1371 0 obj << /Type /Annot /Subtype /Link /Rect [ 506.398 694.175 517.518 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 1372 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.528 652.071 504.088 661.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1373 0 obj << /Type /Annot /Subtype /Link /Rect [ 492.178 626.071 503.298 635.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1007 0 R /H /I >> endobj 1374 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.198 613.071 535.318 622.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1002 0 R /H /I >> endobj 1375 0 obj << /Type /Annot /Subtype /Link /Rect [ 536.968 600.071 548.088 609.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1010 0 R /H /I >> endobj 1376 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.828 587.071 536.948 596.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1377 0 obj << /Type /Annot /Subtype /Link /Rect [ 406.368 574.071 417.488 583.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1378 0 obj << /Type /Annot /Subtype /Link /Rect [ 503.058 561.071 514.178 570.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1379 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.358 548.071 427.478 557.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1017 0 R /H /I >> endobj 1380 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.958 535.071 478.078 544.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1019 0 R /H /I >> endobj 1381 0 obj << /Type /Annot /Subtype /Link /Rect [ 435.818 522.071 446.938 531.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 1382 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.698 509.071 440.818 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1383 0 obj << /Type /Annot /Subtype /Link /Rect [ 478.048 496.071 489.168 505.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1384 0 obj << /Type /Annot /Subtype /Link /Rect [ 463.058 483.071 474.178 492.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1385 0 obj << /Type /Annot /Subtype /Link /Rect [ 521.958 470.071 533.078 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1386 0 obj << /Type /Annot /Subtype /Link /Rect [ 484.178 457.071 495.298 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1030 0 R /H /I >> endobj 1387 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.668 444.071 515.788 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1032 0 R /H /I >> endobj 1388 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.818 418.071 404.378 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1285 0 R /H /I >> endobj 1389 0 obj << /Type /Annot /Subtype /Link /Rect [ 506.398 379.071 517.518 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1046 0 R /H /I >> endobj 1390 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 353.071 496.618 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1106 0 R /H /I >> endobj 1391 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 327.071 397.708 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1392 0 obj << /Type /Annot /Subtype /Link /Rect [ 419.918 301.071 431.038 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1175 0 R /H /I >> endobj 1393 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 520.406 null] >> endobj 1394 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.138 288.071 418.258 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1393 0 R /H /I >> endobj 1395 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.818 288.071 434.938 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1177 0 R /H /I >> endobj 1396 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.048 275.071 437.168 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1169 0 R /H /I >> endobj 1397 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 249.071 496.618 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 979 0 R /H /I >> endobj 1398 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 223.071 496.618 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1100 0 R /H /I >> endobj 1399 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 184.071 515.298 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1400 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 145.071 515.298 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1019 0 R /H /I >> endobj 1401 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 64.858 626.525 null] >> endobj 1402 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.258 106.071 421.378 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1401 0 R /H /I >> endobj 1403 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 80.071 429.938 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 1404 0 obj << /Length 1405 0 R /Filter /FlateDecode >> stream xZYs~篘dhp zW1YJ9wCۦm'Nn#m`+?1`qꀍQH2я}0kBAN}箃mAbgaw5zۉU]}PdtW `9.g8OXz1: )]J&H7l1vu+ z65{/.YD^!0Z7ت7{ȕouF!BEA #/tC&!^*1R^YCȍ֛R?],*Z: Eb)7RoJ7XTH +/qߥAbnXʦd)Ro͠>8`Y,SRB0&мD Z2MqgETyW4VŪB`lٗ(+2`zlP7Jxu^86 r맢 4V^JebVJnH~iήʼU92-`%].liz衹95].s)gHR0kA&mbp|B7!Vupkӄ\,$2vC/;$  mb`Xa S6*}0t=ù$n9%JtĠT]Q1EBnD kS0Wt>0ܞɔYy_;7/͖L$Tʹ$b@刄~D=M+rf09/O '{IB+!hIp$iy]nt `agY,ZJ#4R^AusEJ:MzU{e6Cfe \$b\qrȷGZbq@nr,[«`j|ՏL+in4syςPHG(ߴ6i1MXe 3al~{W^%cȕ CEQre2L-~Й-;]d1npc8 B]={PEˑ E1MS@[sAqf谫e(}MPft^tФ<^AE#/ʴ,Rz<=q N,&".t).ŭ{z43Aa?qB㙡|@z`a̾~l?pz S":6RwȤR7gvAz r:I?zٕ0s?.y d[dUC)S(g;\+oޣ+A#= GLom\bBs:oGtOkAtMek65oÏ,nmQ×{߮߯Dr.o0aHK-o090kXnC?wOb|wz '/ endstream endobj 1405 0 obj 2311 endobj 1406 0 obj [ 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R 1343 0 R 1344 0 R 1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R 1363 0 R 1364 0 R 1365 0 R 1366 0 R 1367 0 R 1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R 1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1402 0 R 1403 0 R ] endobj 1407 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1406 0 R /Contents 1404 0 R >> endobj 1408 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 707.175 166.788 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 792 0 R /H /I >> endobj 1409 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 681.175 166.788 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 1410 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 655.175 166.788 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 1411 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 629.175 166.788 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 797 0 R /H /I >> endobj 1412 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 603.175 221.468 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1123 0 R /H /I >> endobj 1413 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.028 603.175 238.148 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1125 0 R /H /I >> endobj 1414 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 549.623 154.788 558.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 1415 0 obj << /Type /Annot /Subtype /Link /Rect [ 166.788 536.623 177.908 545.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 803 0 R /H /I >> endobj 1416 0 obj << /Type /Annot /Subtype /Link /Rect [ 242.358 523.623 253.478 532.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1417 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 497.623 166.788 506.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1418 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 471.623 221.468 480.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1419 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.678 458.623 147.238 467.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1420 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.798 445.623 213.358 454.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1421 0 obj << /Type /Action /S /GoTo /D [683 0 R /XYZ 53.858 454.735 null] >> endobj 1422 0 obj << /Type /Annot /Subtype /Link /Rect [ 213.368 432.623 218.928 441.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1421 0 R /H /I >> endobj 1423 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 87.874 303.677 null] >> endobj 1424 0 obj << /Type /Annot /Subtype /Link /Rect [ 100.318 406.623 105.878 415.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1423 0 R /H /I >> endobj 1425 0 obj << /Type /Annot /Subtype /Link /Rect [ 219.248 380.623 230.368 389.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1034 0 R /H /I >> endobj 1426 0 obj << /Type /Annot /Subtype /Link /Rect [ 211.278 367.623 222.398 376.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 741 0 R /H /I >> endobj 1427 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.238 354.623 187.358 363.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 1428 0 obj << /Type /Annot /Subtype /Link /Rect [ 126.218 341.623 137.338 350.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 952 0 R /H /I >> endobj 1429 0 obj << /Type /Annot /Subtype /Link /Rect [ 138.438 328.623 149.558 337.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 998 0 R /H /I >> endobj 1430 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.008 315.623 200.128 324.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1431 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.678 302.623 206.798 311.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1042 0 R /H /I >> endobj 1432 0 obj << /Type /Annot /Subtype /Link /Rect [ 257.368 289.623 268.488 298.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1044 0 R /H /I >> endobj 1433 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.808 276.623 202.928 285.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1046 0 R /H /I >> endobj 1434 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.558 223.071 158.678 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 919 0 R /H /I >> endobj 1435 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.308 210.071 126.428 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 957 0 R /H /I >> endobj 1436 0 obj << /Type /Annot /Subtype /Link /Rect [ 186.458 197.071 197.578 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 977 0 R /H /I >> endobj 1437 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 171.071 76.978 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 1438 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.688 158.071 234.808 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 994 0 R /H /I >> endobj 1439 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.238 145.071 185.358 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1089 0 R /H /I >> endobj 1440 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.328 132.071 156.448 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1091 0 R /H /I >> endobj 1441 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.888 106.071 137.008 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 1442 0 obj << /Type /Annot /Subtype /Link /Rect [ 236.488 93.071 247.608 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1094 0 R /H /I >> endobj 1443 0 obj << /Type /Annot /Subtype /Link /Rect [ 132.558 80.071 143.678 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1096 0 R /H /I >> endobj 1444 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.268 67.071 240.388 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 1445 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.032 707.175 418.152 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 992 0 R /H /I >> endobj 1446 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.142 694.175 434.262 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1100 0 R /H /I >> endobj 1447 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.022 681.175 408.142 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1102 0 R /H /I >> endobj 1448 0 obj << /Type /Annot /Subtype /Link /Rect [ 480.942 668.175 492.062 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1104 0 R /H /I >> endobj 1449 0 obj << /Type /Annot /Subtype /Link /Rect [ 446.492 655.175 457.612 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1106 0 R /H /I >> endobj 1450 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.392 642.175 481.512 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1451 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.462 629.175 427.582 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1114 0 R /H /I >> endobj 1452 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 603.175 318.112 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1116 0 R /H /I >> endobj 1453 0 obj << /Type /Annot /Subtype /Link /Rect [ 419.252 590.175 430.372 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1118 0 R /H /I >> endobj 1454 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 564.175 318.112 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1079 0 R /H /I >> endobj 1455 0 obj << /Type /Annot /Subtype /Link /Rect [ 467.062 551.175 478.182 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1456 0 obj << /Type /Annot /Subtype /Link /Rect [ 385.352 538.175 396.472 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1123 0 R /H /I >> endobj 1457 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.032 538.175 413.152 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1125 0 R /H /I >> endobj 1458 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.222 512.175 355.342 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1127 0 R /H /I >> endobj 1459 0 obj << /Type /Annot /Subtype /Link /Rect [ 494.842 499.175 505.962 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1129 0 R /H /I >> endobj 1460 0 obj << /Type /Annot /Subtype /Link /Rect [ 433.132 486.175 444.252 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 1461 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.252 473.175 415.372 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 1462 0 obj << /Type /Annot /Subtype /Link /Rect [ 448.172 460.175 459.292 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1133 0 R /H /I >> endobj 1463 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.352 447.175 436.472 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1135 0 R /H /I >> endobj 1464 0 obj << /Type /Annot /Subtype /Link /Rect [ 417.022 434.175 428.142 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1137 0 R /H /I >> endobj 1465 0 obj << /Type /Annot /Subtype /Link /Rect [ 433.702 434.175 444.822 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1139 0 R /H /I >> endobj 1466 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 408.175 318.112 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1467 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.252 395.175 425.372 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 979 0 R /H /I >> endobj 1468 0 obj << /Type /Annot /Subtype /Link /Rect [ 378.692 382.175 389.812 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1143 0 R /H /I >> endobj 1469 0 obj << /Type /Annot /Subtype /Link /Rect [ 390.352 369.175 401.472 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1145 0 R /H /I >> endobj 1470 0 obj << /Type /Annot /Subtype /Link /Rect [ 358.122 343.175 369.242 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1129 0 R /H /I >> endobj 1471 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 121.525 null] >> endobj 1472 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.242 317.175 375.362 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1471 0 R /H /I >> endobj 1473 0 obj << /Type /Annot /Subtype /Link /Rect [ 379.022 304.175 390.142 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 1474 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.602 291.175 425.722 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 1475 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.032 278.175 415.152 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1476 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.572 265.175 375.692 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1190 0 R /H /I >> endobj 1477 0 obj << /Type /Annot /Subtype /Link /Rect [ 355.122 252.175 366.242 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1401 0 R /H /I >> endobj 1478 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 286.063 null] >> endobj 1479 0 obj << /Type /Annot /Subtype /Link /Rect [ 399.582 239.175 410.702 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1478 0 R /H /I >> endobj 1480 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 424.325 null] >> endobj 1481 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.582 226.175 406.702 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1480 0 R /H /I >> endobj 1482 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.722 213.175 402.282 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1267 0 R /H /I >> endobj 1483 0 obj << /Type /Action /S /GoTo /D [268 0 R /XYZ 87.874 466.883 null] >> endobj 1484 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.012 187.175 373.132 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1483 0 R /H /I >> endobj 1485 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 161.175 347.012 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1421 0 R /H /I >> endobj 1486 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 135.175 347.012 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1423 0 R /H /I >> endobj 1487 0 obj << /Type /Annot /Subtype /Link /Rect [ 354.472 122.175 360.032 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1368 0 R /H /I >> endobj 1488 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 105.874 141.313 null] >> endobj 1489 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 96.175 347.012 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1488 0 R /H /I >> endobj 1490 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 70.175 347.012 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1423 0 R /H /I >> endobj 1491 0 obj << /Length 1492 0 R /Filter /FlateDecode >> stream xZYoF~ׯGnA2oY#x;v`!]L:?/^,z5Hު?.~^oy4џ_ǿɍ4h љ~M2B Ա-۶|P.e_5uw=m\EӂR*M Ѫic%` x=04ָmmWZQ5CzլY#.#td#DM7ge$cgF̴&DYUu?5wKr]z.w[ծ,!q{W,;ϐ%:ˇ1N"7@D?G8!͓<ui:~ gA.D /7ȪmjN8Wo9/Nӌ#d]8Du2iRX=):!g4}ա7J8vAɭ+ z~~u*~^ĸ•`&p#X5o~/qS' BTҀMl1NIT]aFl0ݩTgiiA9X\z` ☁ AP 3~bBr1`VIh KXfmU}[. w0'/^B,x"t,|^h)5?<;du咜 p > 5 k@/19RB#p^{/uMbg+(3)f;MdOmCMU@Wbc5U>c1)jU-!KqYK{3KzsLS80N)*wUc7 g=6(z4āųMSYHqI9M,'Kg 2֞ F.7:dF/CAOy+5%HHKi!ڔ|7v;2/t }znlR1怡k!8 42 *!YA~!JhUPA`FPd{ rdu&02{9ނ ԈY Aₑ1idh4˒: ;F)g4⺌QGc 3r0bY[Sm:!: 4@㲔 iE8(:8#JLqh»hOzZua7J^_f_ yCdn?LB)҆_$*{ }%%6x4Z>0vZ3|  _5;9F}3Oܽ0Ac_pE֥EL`FN$6^έ&#[_DT endstream endobj 1492 0 obj 2485 endobj 1493 0 obj [ 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1422 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 1431 0 R 1432 0 R 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1479 0 R 1481 0 R 1482 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R 1489 0 R 1490 0 R ] endobj 1494 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1493 0 R /Contents 1491 0 R >> endobj 1495 0 obj << /Type /Action /S /GoTo /D [683 0 R /XYZ 71.858 597.393 null] >> endobj 1496 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.334 694.175 139.894 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1495 0 R /H /I >> endobj 1497 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 655.175 255.484 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1127 0 R /H /I >> endobj 1498 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 629.175 255.484 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1129 0 R /H /I >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 590.175 180.244 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1478 0 R /H /I >> endobj 1500 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 564.175 188.804 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 743 0 R /H /I >> endobj 1501 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 538.175 186.014 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 1502 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.574 538.175 202.694 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 996 0 R /H /I >> endobj 1503 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 512.175 147.124 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1063 0 R /H /I >> endobj 1504 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.214 473.175 156.334 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 909 0 R /H /I >> endobj 1505 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.324 447.175 145.444 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1169 0 R /H /I >> endobj 1506 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 421.175 166.904 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1228 0 R /H /I >> endobj 1507 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 395.175 180.244 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1508 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 369.175 147.124 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1065 0 R /H /I >> endobj 1509 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 343.175 255.484 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1116 0 R /H /I >> endobj 1510 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 317.175 255.484 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1114 0 R /H /I >> endobj 1511 0 obj << /Type /Annot /Subtype /Link /Rect [ 199.024 304.175 210.144 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 751 0 R /H /I >> endobj 1512 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.484 278.175 251.604 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1228 0 R /H /I >> endobj 1513 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 265.175 208.034 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1228 0 R /H /I >> endobj 1514 0 obj << /Type /Annot /Subtype /Link /Rect [ 179.584 252.175 185.144 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1515 0 obj << /Type /Annot /Subtype /Link /Rect [ 213.474 239.175 224.594 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1516 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.124 213.175 168.244 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1471 0 R /H /I >> endobj 1517 0 obj << /Type /Annot /Subtype /Link /Rect [ 171.904 200.175 183.024 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 1518 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.484 187.175 218.604 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 1519 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 174.175 208.034 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1520 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.454 161.175 168.574 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1190 0 R /H /I >> endobj 1521 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.004 148.175 159.124 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1401 0 R /H /I >> endobj 1522 0 obj << /Type /Annot /Subtype /Link /Rect [ 192.464 135.175 203.584 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1478 0 R /H /I >> endobj 1523 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 122.175 188.804 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1082 0 R /H /I >> endobj 1524 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 87.874 216.495 null] >> endobj 1525 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.924 109.175 233.484 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1524 0 R /H /I >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Rect [ 185.684 96.175 196.804 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1480 0 R /H /I >> endobj 1527 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.924 70.175 216.044 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1528 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.388 707.175 462.508 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 944 0 R /H /I >> endobj 1529 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.918 694.175 408.038 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1165 0 R /H /I >> endobj 1530 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.688 681.175 395.808 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1222 0 R /H /I >> endobj 1531 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.028 668.175 419.148 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1532 0 obj << /Type /Annot /Subtype /Link /Rect [ 471.378 642.175 482.498 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 929 0 R /H /I >> endobj 1533 0 obj << /Type /Annot /Subtype /Link /Rect [ 385.248 629.175 396.368 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1534 0 obj << /Type /Annot /Subtype /Link /Rect [ 436.938 616.175 448.058 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1535 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.578 603.175 409.698 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1171 0 R /H /I >> endobj 1536 0 obj << /Type /Annot /Subtype /Link /Rect [ 457.388 590.175 462.948 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1537 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.468 564.175 421.588 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1082 0 R /H /I >> endobj 1538 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 509.071 496.618 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 1539 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 470.071 441.938 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 1540 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 53.858 327.625 null] >> endobj 1541 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.708 444.071 408.828 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1540 0 R /H /I >> endobj 1542 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 477.425 null] >> endobj 1543 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 418.071 447.708 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1542 0 R /H /I >> endobj 1544 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 513.425 null] >> endobj 1545 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 392.071 447.708 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1544 0 R /H /I >> endobj 1546 0 obj << /Type /Annot /Subtype /Link /Rect [ 403.818 366.071 409.378 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 964 0 R /H /I >> endobj 1547 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.928 353.071 414.048 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1236 0 R /H /I >> endobj 1548 0 obj << /Type /Action /S /GoTo /D [149 0 R /XYZ 53.858 703.525 null] >> endobj 1549 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.148 340.071 418.268 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1548 0 R /H /I >> endobj 1550 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 624.159 null] >> endobj 1551 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.148 327.071 408.268 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1550 0 R /H /I >> endobj 1552 0 obj << /Type /Action /S /GoTo /D [259 0 R /XYZ 53.858 169.425 null] >> endobj 1553 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.028 314.071 407.148 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1552 0 R /H /I >> endobj 1554 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 328.589 null] >> endobj 1555 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.478 301.071 441.598 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1554 0 R /H /I >> endobj 1556 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 275.071 397.708 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1192 0 R /H /I >> endobj 1557 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 236.071 515.298 245.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1558 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 210.071 496.618 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1104 0 R /H /I >> endobj 1559 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 184.071 496.618 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1118 0 R /H /I >> endobj 1560 0 obj << /Type /Annot /Subtype /Link /Rect [ 502.178 184.071 513.298 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1118 0 R /H /I >> endobj 1561 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 145.071 441.938 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 782 0 R /H /I >> endobj 1562 0 obj << /Type /Annot /Subtype /Link /Rect [ 392.368 132.071 397.928 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1259 0 R /H /I >> endobj 1563 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 106.071 397.708 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1194 0 R /H /I >> endobj 1564 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 80.071 496.618 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1133 0 R /H /I >> endobj 1565 0 obj << /Length 1566 0 R /Filter /FlateDecode >> stream xZK6WhWy8x yMNe/.kCJq(Hb"GAj$Mwkf!TYn|B 7#+vߏהȳ$RĪ-mlL**MGFͥsIe+~^ )~X+\]u+.9O%'T/yh& 42H(3IoIY|\~Y)K,iX/oPпU,uo(7@#Sh?XۍX׍ uE;|/>o|9FPaHQ}w^8JrYRcTAA 2[ |b|10!{j0-~gVbS} Ci@D}׌;<]CFz6 +bUR⼈g_(stSu/e_mWK)(;y hQN1G5뜡fvD'.T:",¥ `' 5U@p `]}Y}]Y|ĜzҽAFAZXu}ײ*qYkBNvr5j(U `'J1f+&mi i,ucy$n9V~dNQ sBXT.0ۓbh8y2K4n ~=6Oi96'8_amU GJFƔDZFeO0+{Ev^U8~g0[/fy8)5]":K2.hǠ~yٕIչY70p\uNL |VqqP‹dXM 7FƉO u{)<8Dh'ߖؓvĂ4u!ٌWl | D ñi=$2Z2 =nJohR1R h+a>+oF{h܀Oj?J牉&9&@L4Fo{I+&Lj Ԑd1ݸ0u~SU@{B> ,3TEQa`\qp] ʠ,)0q}#xϩzz_y?}4cu[SDze3NqHó6%9QyMhlmlw)hʯv/p2{Ee -Mun1?/o=S؇{$P]7gVl=GP1S5 -56?*alߏ~@jCZכB9Ye:̃#N;33ZGe8 =SpSFRi$&L{_.IcA$HLHwѯV?1lBH/aړVbf"Se)mZE)NZyD(έ29Js>HI@}>1g;mgvĒxBÔLO^D<۷%#TygsBWtST){8"Nقm~|cڒN~ l!_HSҴѥ$֫_4&SLoi^(3R.M/_E,9wI* RߧoZf}^UG_tBYjYcI endstream endobj 1566 0 obj 2143 endobj 1567 0 obj [ 1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R 1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1541 0 R 1543 0 R 1545 0 R 1546 0 R 1547 0 R 1549 0 R 1551 0 R 1553 0 R 1555 0 R 1556 0 R 1557 0 R 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R ] endobj 1568 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1567 0 R /Contents 1565 0 R >> endobj 1569 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 707.175 122.558 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1196 0 R /H /I >> endobj 1570 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 681.175 221.468 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1102 0 R /H /I >> endobj 1571 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 655.175 221.468 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 1572 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 629.175 113.108 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1067 0 R /H /I >> endobj 1573 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 603.175 221.468 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1135 0 R /H /I >> endobj 1574 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 577.175 221.468 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1137 0 R /H /I >> endobj 1575 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.028 577.175 238.148 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1139 0 R /H /I >> endobj 1576 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 538.175 166.788 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1577 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 499.175 166.788 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 1578 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.328 486.175 114.448 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1059 0 R /H /I >> endobj 1579 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 598.825 null] >> endobj 1580 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.008 486.175 131.128 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1579 0 R /H /I >> endobj 1581 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 460.175 221.468 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 919 0 R /H /I >> endobj 1582 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 434.175 221.468 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1121 0 R /H /I >> endobj 1583 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 408.175 221.468 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 919 0 R /H /I >> endobj 1584 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 382.175 221.468 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 979 0 R /H /I >> endobj 1585 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 356.175 221.468 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1143 0 R /H /I >> endobj 1586 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 317.175 240.148 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1587 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 278.175 240.148 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1588 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 223.071 122.558 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1199 0 R /H /I >> endobj 1589 0 obj << /Type /Annot /Subtype /Link /Rect [ 104.428 210.071 109.988 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 749 0 R /H /I >> endobj 1590 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.428 197.071 104.988 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 988 0 R /H /I >> endobj 1591 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.438 171.071 187.558 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1034 0 R /H /I >> endobj 1592 0 obj << /Type /Annot /Subtype /Link /Rect [ 211.278 158.071 222.398 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 741 0 R /H /I >> endobj 1593 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.238 145.071 187.358 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 1594 0 obj << /Type /Annot /Subtype /Link /Rect [ 126.218 132.071 137.338 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 952 0 R /H /I >> endobj 1595 0 obj << /Type /Annot /Subtype /Link /Rect [ 138.438 119.071 149.558 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 998 0 R /H /I >> endobj 1596 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.008 106.071 200.128 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1597 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.678 93.071 206.798 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1042 0 R /H /I >> endobj 1598 0 obj << /Type /Annot /Subtype /Link /Rect [ 257.368 80.071 268.488 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1044 0 R /H /I >> endobj 1599 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.808 67.071 202.928 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1046 0 R /H /I >> endobj 1600 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 687.1 null] >> endobj 1601 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.822 707.175 483.942 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1600 0 R /H /I >> endobj 1602 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.792 694.175 375.912 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 751 0 R /H /I >> endobj 1603 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.692 681.175 374.812 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1048 0 R /H /I >> endobj 1604 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.602 668.175 413.722 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1075 0 R /H /I >> endobj 1605 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.802 655.175 415.922 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1480 0 R /H /I >> endobj 1606 0 obj << /Type /Annot /Subtype /Link /Rect [ 409.242 629.175 420.362 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1007 0 R /H /I >> endobj 1607 0 obj << /Type /Annot /Subtype /Link /Rect [ 490.182 616.175 501.302 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1002 0 R /H /I >> endobj 1608 0 obj << /Type /Annot /Subtype /Link /Rect [ 502.952 603.175 514.072 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1010 0 R /H /I >> endobj 1609 0 obj << /Type /Annot /Subtype /Link /Rect [ 491.812 590.175 502.932 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1610 0 obj << /Type /Annot /Subtype /Link /Rect [ 372.352 577.175 383.472 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1611 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.042 564.175 480.162 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1012 0 R /H /I >> endobj 1612 0 obj << /Type /Annot /Subtype /Link /Rect [ 382.342 551.175 393.462 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1017 0 R /H /I >> endobj 1613 0 obj << /Type /Annot /Subtype /Link /Rect [ 432.942 538.175 444.062 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1019 0 R /H /I >> endobj 1614 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.802 525.175 412.922 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 1615 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.682 512.175 406.802 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1616 0 obj << /Type /Annot /Subtype /Link /Rect [ 444.032 499.175 455.152 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1617 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.042 486.175 440.162 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1618 0 obj << /Type /Annot /Subtype /Link /Rect [ 487.942 473.175 499.062 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1619 0 obj << /Type /Annot /Subtype /Link /Rect [ 450.162 460.175 461.282 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1030 0 R /H /I >> endobj 1620 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.652 447.175 481.772 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1032 0 R /H /I >> endobj 1621 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.332 408.175 363.452 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 812 0 R /H /I >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 369.175 481.282 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1002 0 R /H /I >> endobj 1623 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 330.175 481.282 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1624 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 291.175 481.282 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 252.175 481.282 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1030 0 R /H /I >> endobj 1626 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 213.175 481.282 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1002 0 R /H /I >> endobj 1627 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.252 187.175 374.812 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1368 0 R /H /I >> endobj 1628 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.922 174.175 436.482 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1423 0 R /H /I >> endobj 1629 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.282 161.175 474.842 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1421 0 R /H /I >> endobj 1630 0 obj << /Type /Annot /Subtype /Link /Rect [ 331.452 148.175 337.012 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1423 0 R /H /I >> endobj 1631 0 obj << /Type /Annot /Subtype /Link /Rect [ 347.572 135.175 353.132 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1488 0 R /H /I >> endobj 1632 0 obj << /Type /Annot /Subtype /Link /Rect [ 345.902 122.175 351.462 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1423 0 R /H /I >> endobj 1633 0 obj << /Type /Annot /Subtype /Link /Rect [ 345.342 109.175 350.902 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1495 0 R /H /I >> endobj 1634 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.942 96.175 480.062 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1082 0 R /H /I >> endobj 1635 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 70.175 462.602 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 1636 0 obj << /Length 1637 0 R /Filter /FlateDecode >> stream xZKoFϯ[{.Y/ILψ_nSM΃U#wt0[uUu=`n$٪Z|=L()SqEvXHHŹdBEN | oWM#:-z/?kxb:#.\$lkE\k[Vk姿򿋷K1?>)|\LjxvBS~ÅBEnt3ԫh X'NaH%%`1gqʲf,1@K^]oe޲n劶Dz m"v2R$J)=+j`]mۡ+mo]UEz#,O!cxi,;.DrUWGh$#?7.Z,Ɔ2qzeI8\oȀ97X!ޅɲ, /9t,z ܽsPbTЃӳM@8Ǽ4T,w.2V rW."J9hhCq"8%]׬0[g.YٮcuK1W]Wl}r8 XX$Wzǒz;dmS=,R8&6 ,7P+sݘHq$dW[w%ۺ'nE׋P 0r(1TO{`Zi&NàF V" cxDQCoZVD`@7zc0 d}eўi:d4ª0p{WlP%4a\#%L{n-սXCQl K殳rشuUȋ2 iAǚrTv tMb4FP6c)wV%MU΅*5b"q ʶL$qçz4$fCN轰ڷLA2,lBs306(od6Zd4åRϠ6\˴t}ت#a'ILE-8?乺ki.<% Iub'v5 v6⍠A-S$F%FLvpڸd%ǒE0@:1/=wṐ=w0"y.n)!%x=ϸJTPݰ3F!'㐧!nm܁S3tG2 PIpF!B &@KIoE&)!O8f·qH4;7SNy),>|sJ󃽍fZ=0,s?fփ8i"!ѹ`U,[ c_g^ 2w4Fh\rݙgdcRj0HI)Z[(0<>6'. : cC}(5ijbmxyzpЇN/;nsSGaJQF /xnazAx7HBIgl%ze(VL_}gk[ NݳQ^D'#-/F0'od'ujf92X˹RH'}&f endstream endobj 1637 0 obj 2213 endobj 1638 0 obj [ 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R 1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R 1635 0 R ] endobj 1639 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1638 0 R /Contents 1636 0 R >> endobj 1640 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 681.175 200.804 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1641 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 687.1 null] >> endobj 1642 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.344 668.175 177.904 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1641 0 R /H /I >> endobj 1643 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 642.175 255.484 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1145 0 R /H /I >> endobj 1644 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 587.455 188.804 596.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 755 0 R /H /I >> endobj 1645 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 548.455 274.164 557.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1032 0 R /H /I >> endobj 1646 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 509.455 166.904 518.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1647 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 470.455 166.904 479.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1171 0 R /H /I >> endobj 1648 0 obj << /Type /Annot /Subtype /Link /Rect [ 130.444 444.455 141.564 453.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1300 0 R /H /I >> endobj 1649 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.454 418.455 158.574 427.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 721 0 R /H /I >> endobj 1650 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.114 405.455 160.234 414.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 723 0 R /H /I >> endobj 1651 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.794 405.455 176.914 414.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 725 0 R /H /I >> endobj 1652 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 366.455 200.804 375.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 1653 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 340.455 147.124 349.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1071 0 R /H /I >> endobj 1654 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 301.455 200.804 310.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 792 0 R /H /I >> endobj 1655 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 262.455 200.804 271.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 1656 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 194.735 166.904 203.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1657 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 155.735 255.484 164.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1129 0 R /H /I >> endobj 1658 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.904 142.735 189.024 151.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1073 0 R /H /I >> endobj 1659 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 116.735 255.484 125.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1660 0 obj << /Length 1661 0 R /Filter /FlateDecode >> stream xXKo8WP |uf񶇦XKJPrbdNC"o8߼8AC*vuFP!Bri&:}E3DxF,Ds J,,?ܣnOau-=5MGVg~ ~}4&sA4 pɼHLWmbZ'ʰv"hբO 6}=}.?"J-f4mu`P8O;w1 "T"sbyӮ6ڡ O(,ҟȋ2;<..cI?ڡ~}0 !g\\pt_L̓{bhQ>#LJPO^!\Z `tL\) mЉNNev dlW6FvCVof ~d3KgZ u鐱q\FuJ(D$]lqNAX v,DyRP`(*"64TaU$!(!.M ҶӭlCOA"IxE)n*1<÷tkvIFל1.ir9#Gr_\ Q$ -$ɠt1zݕ8eDsL0"&[l]7毧]dv@*NH|1$>.YLmQ7Tٳ硆ʱ0pg.8(K㦃4 /Lq&#INki68绠L/a[\ /ثȇp;p Dh|$• :Ik~85.q8$WA=<AI<ĈaGG$z b]Q>_86 Hu]A>m7':zDW̝>|*:4馢po߲Hh ys =W]=6Y?BHww' O'` Me{5^gR2/j;:X|8]khs?B]&N|fe endstream endobj 1661 0 obj 1172 endobj 1662 0 obj [ 1640 0 R 1642 0 R 1643 0 R 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R 1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R 1655 0 R 1656 0 R 1657 0 R 1658 0 R 1659 0 R ] endobj 1663 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1662 0 R /Contents 1660 0 R >> endobj 1664 0 obj << /Length 1665 0 R /Filter /FlateDecode >> stream xT=o0WX;;;+ RԪt(HL}8A*l]lt̓zQ FvY']CcE FdwN)LQ4L~@ 덢_ !Qy՘SGVw~k3D?&^$f5>D?2mcض^:+Fai: jH2?[XDx~Qd"d;\?0`|eҞ˶VYu􍰓f b endstream endobj 1665 0 obj 262 endobj 1666 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1664 0 R >> endobj 1667 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 53.858 413.3 null] >> endobj 1668 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 445.895 null] >> endobj 1669 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 532.681 null] >> endobj 1670 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 417.536 null] >> endobj 1671 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 209.556 null] >> endobj 1672 0 obj << /Type /Action /S /GoTo /D [457 0 R /XYZ 87.874 185.682 null] >> endobj 1673 0 obj << /Type /Action /S /GoTo /D [530 0 R /XYZ 87.874 250.598 null] >> endobj 1674 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 103.571 null] >> endobj 1675 0 obj << /Type /Action /S /GoTo /D [597 0 R /XYZ 53.858 554.705 null] >> endobj 1676 0 obj << /Type /Action /S /GoTo /D [647 0 R /XYZ 87.874 337.569 null] >> endobj 1677 0 obj << /Type /Action /S /GoTo /D [9 0 R /XYZ 87.874 718.3 null] >> endobj 1678 0 obj << /Title (SystemTap Beginners Guide) /Parent 1679 0 R /Next 1680 0 R /A 1677 0 R >> endobj 1681 0 obj << /Type /Action /S /GoTo /D [400 0 R /XYZ 87.874 718.3 null] >> endobj 1680 0 obj << /Title (Table of Contents) /Parent 1679 0 R /Prev 1678 0 R /Next 1682 0 R /A 1681 0 R >> endobj 1682 0 obj << /Title (Preface) /Parent 1679 0 R /Prev 1680 0 R /Next 1683 0 R /First 1684 0 R /Last 1685 0 R /Count -5 /A 269 0 R >> endobj 1684 0 obj << /Title /Parent 1682 0 R /Next 1685 0 R /First 1686 0 R /Last 1687 0 R /Count -3 /A 272 0 R >> endobj 1686 0 obj << /Title /Parent 1684 0 R /Next 1688 0 R /A 275 0 R >> endobj 1688 0 obj << /Title /Parent 1684 0 R /Prev 1686 0 R /Next 1687 0 R /A 278 0 R >> endobj 1687 0 obj << /Title /Parent 1684 0 R /Prev 1688 0 R /A 281 0 R >> endobj 1685 0 obj << /Title /Parent 1682 0 R /Prev 1684 0 R /A 284 0 R >> endobj 1683 0 obj << /Title /Parent 1679 0 R /Prev 1682 0 R /Next 1689 0 R /First 1690 0 R /Last 1691 0 R /Count -3 /A 288 0 R >> endobj 1690 0 obj << /Title /Parent 1683 0 R /Next 1692 0 R /A 291 0 R >> endobj 1692 0 obj << /Title /Parent 1683 0 R /Prev 1690 0 R /Next 1691 0 R /A 294 0 R >> endobj 1691 0 obj << /Title /Parent 1683 0 R /Prev 1692 0 R /A 297 0 R >> endobj 1689 0 obj << /Title /Parent 1679 0 R /Prev 1683 0 R /Next 1693 0 R /First 1694 0 R /Last 1695 0 R /Count -9 /A 299 0 R >> endobj 1694 0 obj << /Title /Parent 1689 0 R /Next 1696 0 R /First 1697 0 R /Last 1698 0 R /Count -3 /A 74 0 R >> endobj 1697 0 obj << /Title /Parent 1694 0 R /Next 1699 0 R /A 48 0 R >> endobj 1699 0 obj << /Title /Parent 1694 0 R /Prev 1697 0 R /Next 1698 0 R /A 51 0 R >> endobj 1698 0 obj << /Title /Parent 1694 0 R /Prev 1699 0 R /A 308 0 R >> endobj 1696 0 obj << /Title /Parent 1689 0 R /Prev 1694 0 R /Next 1695 0 R /A 122 0 R >> endobj 1695 0 obj << /Title /Parent 1689 0 R /Prev 1696 0 R /First 1700 0 R /Last 1700 0 R /Count -3 /A 313 0 R >> endobj 1700 0 obj << /Title /Parent 1695 0 R /First 1701 0 R /Last 1702 0 R /Count -2 /A 117 0 R >> endobj 1701 0 obj << /Title /Parent 1700 0 R /Next 1702 0 R /A 318 0 R >> endobj 1702 0 obj << /Title /Parent 1700 0 R /Prev 1701 0 R /A 321 0 R >> endobj 1693 0 obj << /Title /Parent 1679 0 R /Prev 1689 0 R /Next 1703 0 R /First 1704 0 R /Last 1705 0 R /Count -22 /A 80 0 R >> endobj 1704 0 obj << /Title /Parent 1693 0 R /Next 1706 0 R /A 72 0 R >> endobj 1706 0 obj << /Title /Parent 1693 0 R /Prev 1704 0 R /Next 1707 0 R /First 1708 0 R /Last 1709 0 R /Count -2 /A 328 0 R >> endobj 1708 0 obj << /Title /Parent 1706 0 R /Next 1709 0 R /A 241 0 R >> endobj 1709 0 obj << /Title /Parent 1706 0 R /Prev 1708 0 R /A 333 0 R >> endobj 1707 0 obj << /Title /Parent 1693 0 R /Prev 1706 0 R /Next 1710 0 R /First 1711 0 R /Last 1712 0 R /Count -7 /A 336 0 R >> endobj 1711 0 obj << /Title /Parent 1707 0 R /Next 1713 0 R /A 339 0 R >> endobj 1713 0 obj << /Title /Parent 1707 0 R /Prev 1711 0 R /Next 1714 0 R /First 1715 0 R /Last 1716 0 R /Count -3 /A 253 0 R >> endobj 1715 0 obj << /Title /Parent 1713 0 R /Next 1717 0 R /A 344 0 R >> endobj 1717 0 obj << /Title /Parent 1713 0 R /Prev 1715 0 R /Next 1716 0 R /A 347 0 R >> endobj 1716 0 obj << /Title /Parent 1713 0 R /Prev 1717 0 R /A 350 0 R >> endobj 1714 0 obj << /Title /Parent 1707 0 R /Prev 1713 0 R /Next 1712 0 R /A 353 0 R >> endobj 1712 0 obj << /Title /Parent 1707 0 R /Prev 1714 0 R /A 356 0 R >> endobj 1710 0 obj << /Title /Parent 1693 0 R /Prev 1707 0 R /Next 1718 0 R /A 360 0 R >> endobj 1718 0 obj << /Title /Parent 1693 0 R /Prev 1710 0 R /Next 1705 0 R /First 1719 0 R /Last 1720 0 R /Count -7 /A 363 0 R >> endobj 1719 0 obj << /Title /Parent 1718 0 R /Next 1721 0 R /A 178 0 R >> endobj 1721 0 obj << /Title /Parent 1718 0 R /Prev 1719 0 R /Next 1722 0 R /A 367 0 R >> endobj 1722 0 obj << /Title /Parent 1718 0 R /Prev 1721 0 R /Next 1723 0 R /A 370 0 R >> endobj 1723 0 obj << /Title /Parent 1718 0 R /Prev 1722 0 R /Next 1724 0 R /A 200 0 R >> endobj 1724 0 obj << /Title /Parent 1718 0 R /Prev 1723 0 R /Next 1725 0 R /A 213 0 R >> endobj 1725 0 obj << /Title /Parent 1718 0 R /Prev 1724 0 R /Next 1720 0 R /A 377 0 R >> endobj 1720 0 obj << /Title /Parent 1718 0 R /Prev 1725 0 R /A 380 0 R >> endobj 1705 0 obj << /Title /Parent 1693 0 R /Prev 1718 0 R /A 383 0 R >> endobj 1703 0 obj << /Title /Parent 1679 0 R /Prev 1693 0 R /Next 1726 0 R /First 1727 0 R /Last 1728 0 R /Count -3 /A 386 0 R >> endobj 1727 0 obj << /Title /Parent 1703 0 R /Next 1729 0 R /A 389 0 R >> endobj 1729 0 obj << /Title /Parent 1703 0 R /Prev 1727 0 R /Next 1728 0 R /A 260 0 R >> endobj 1728 0 obj << /Title /Parent 1703 0 R /Prev 1729 0 R /A 394 0 R >> endobj 1726 0 obj << /Title /Parent 1679 0 R /Prev 1703 0 R /Next 1730 0 R /First 1731 0 R /Last 1732 0 R /Count -22 /A 411 0 R >> endobj 1731 0 obj << /Title /Parent 1726 0 R /Next 1733 0 R /First 1734 0 R /Last 1735 0 R /Count -5 /A 820 0 R >> endobj 1734 0 obj << /Title /Parent 1731 0 R /Next 1736 0 R /A 823 0 R >> endobj 1736 0 obj << /Title /Parent 1731 0 R /Prev 1734 0 R /Next 1737 0 R /A 826 0 R >> endobj 1737 0 obj << /Title /Parent 1731 0 R /Prev 1736 0 R /Next 1738 0 R /A 829 0 R >> endobj 1738 0 obj << /Title /Parent 1731 0 R /Prev 1737 0 R /Next 1735 0 R /A 832 0 R >> endobj 1735 0 obj << /Title /Parent 1731 0 R /Prev 1738 0 R /A 835 0 R >> endobj 1733 0 obj << /Title /Parent 1726 0 R /Prev 1731 0 R /Next 1739 0 R /First 1740 0 R /Last 1741 0 R /Count -7 /A 838 0 R >> endobj 1740 0 obj << /Title /Parent 1733 0 R /Next 1742 0 R /A 507 0 R >> endobj 1742 0 obj << /Title /Parent 1733 0 R /Prev 1740 0 R /Next 1743 0 R /A 843 0 R >> endobj 1743 0 obj << /Title /Parent 1733 0 R /Prev 1742 0 R /Next 1744 0 R /A 846 0 R >> endobj 1744 0 obj << /Title /Parent 1733 0 R /Prev 1743 0 R /Next 1745 0 R /A 849 0 R >> endobj 1745 0 obj << /Title /Parent 1733 0 R /Prev 1744 0 R /Next 1746 0 R /A 545 0 R >> endobj 1746 0 obj << /Title /Parent 1733 0 R /Prev 1745 0 R /Next 1741 0 R /A 854 0 R >> endobj 1741 0 obj << /Title /Parent 1733 0 R /Prev 1746 0 R /A 857 0 R >> endobj 1739 0 obj << /Title /Parent 1726 0 R /Prev 1733 0 R /Next 1732 0 R /First 1747 0 R /Last 1748 0 R /Count -6 /A 860 0 R >> endobj 1747 0 obj << /Title /Parent 1739 0 R /Next 1749 0 R /A 863 0 R >> endobj 1749 0 obj << /Title /Parent 1739 0 R /Prev 1747 0 R /Next 1750 0 R /A 866 0 R >> endobj 1750 0 obj << /Title /Parent 1739 0 R /Prev 1749 0 R /Next 1751 0 R /A 869 0 R >> endobj 1751 0 obj << /Title /Parent 1739 0 R /Prev 1750 0 R /Next 1752 0 R /A 629 0 R >> endobj 1752 0 obj << /Title /Parent 1739 0 R /Prev 1751 0 R /Next 1748 0 R /A 638 0 R >> endobj 1748 0 obj << /Title /Parent 1739 0 R /Prev 1752 0 R /A 876 0 R >> endobj 1732 0 obj << /Title /Parent 1726 0 R /Prev 1739 0 R /A 879 0 R >> endobj 1730 0 obj << /Title /Parent 1679 0 R /Prev 1726 0 R /Next 1753 0 R /First 1754 0 R /Last 1755 0 R /Count -2 /A 677 0 R >> endobj 1754 0 obj << /Title /Parent 1730 0 R /Next 1755 0 R /A 884 0 R >> endobj 1755 0 obj << /Title /Parent 1730 0 R /Prev 1754 0 R /A 887 0 R >> endobj 1753 0 obj << /Title /Parent 1679 0 R /Prev 1730 0 R /Next 1756 0 R /A 890 0 R >> endobj 1756 0 obj << /Title /Parent 1679 0 R /Prev 1753 0 R /Next 1757 0 R /A 893 0 R >> endobj 1757 0 obj << /Title (Index) /Parent 1679 0 R /Prev 1756 0 R /A 896 0 R >> endobj 1758 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 1759 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Oblique /Encoding /WinAnsiEncoding >> endobj 1760 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-BoldOblique /Encoding /WinAnsiEncoding >> endobj 1761 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Bold /Encoding /WinAnsiEncoding >> endobj 1762 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Symbol /ToUnicode 1763 0 R >> endobj 1763 0 obj << /Length 1764 0 R /Filter /FlateDecode >> stream x]Vn6+t#RE |HvN>OgX#>.fu5Y|N߷K~׮ۖky3+|=%w}뵾<. *ou;xnݧ_%_R߶R}#ԗ\^bu){\/; Dz'巌?YPC\<׻/}}{I-#_;6 [G'³^pT8). W (F7JQo~(F7JQo~[v?Cgv<2.x&NQ.qDžx 9'q̑8jX0-y$N =h6Ye-9$}BS\/U8Љ|Eܱ ~ztԓ$zztGúIpe4=A3zYZQ Ϭe-k%g_CV^y+o{m핷W^y+o{m핷W?(A7D;&;Ȃj,Ƃj,Ƃj,Ƃj,Ƃj,e#,rA `(O0DӘ raA'9b c$ưI.Xg:bm:"?b.L&[b־I~@YSf&ubd36 .C؟<'sp#(zK֣a%z<3!h?ŐkΕ<rCPO-c$7C[ȹ*u*u z9Ў7~XhhDo&ƅee8'#r cV<Xi(3 5p9ka|#^KFNǀfFdO=tBG?w^p8r$p8阑.3Rҙ 3Hg. dĞ!=bySOXI<_r'L=OhXG!laҊF+ObI ƀ61ϔ^mP#ԏzYJ endstream endobj 1764 0 obj 1047 endobj 1765 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 1766 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding >> endobj 1767 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj 1768 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding >> endobj 1769 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 1770 0 obj << /Limits [(SystemTap_Beginners_Guide-Preface) (SystemTap_Beginners_Guide-Preface)] /Names [(SystemTap_Beginners_Guide-Preface) 269 0 R] >> endobj 1771 0 obj << /Limits [(appe-Publican-Revision_History) (appe-Publican-Revision_History)] /Names [(appe-Publican-Revision_History) 893 0 R] >> endobj 1772 0 obj << /Limits [(arrayoperators) (arrayoperators)] /Names [(arrayoperators) 363 0 R] >> endobj 1773 0 obj << /Limits [(arrayops-aggregates) (arrayops-aggregates)] /Names [(arrayops-aggregates) 380 0 R] >> endobj 1774 0 obj << /Limits [(arrayops-assignvalue) (arrayops-assignvalue)] /Names [(arrayops-assignvalue) 178 0 R] >> endobj 1775 0 obj << /Limits [(arrayops-conditionals) (arrayops-conditionals)] /Names [(arrayops-conditionals) 377 0 R] >> endobj 1776 0 obj << /Limits [(arrayops-deleting) (arrayops-deleting)] /Names [(arrayops-deleting) 213 0 R] >> endobj 1777 0 obj << /Limits [(arrayops-foreach) (arrayops-foreach)] /Names [(arrayops-foreach) 200 0 R] >> endobj 1778 0 obj << /Limits [(arrayops-increment) (arrayops-increment)] /Names [(arrayops-increment) 370 0 R] >> endobj 1779 0 obj << /Limits [(arrayops-readvalues) (arrayops-readvalues)] /Names [(arrayops-readvalues) 367 0 R] >> endobj 1780 0 obj << /Limits [(arrayreadingvaluesfrom) (arrayreadingvaluesfrom)] /Names [(arrayreadingvaluesfrom) 180 0 R] >> endobj 1781 0 obj << /Limits [(arrays-timestampprocessname) (arrays-timestampprocessname)] /Names [(arrays-timestampprocessname) 173 0 R] >> endobj 1782 0 obj << /Limits [(arraysimplestexample) (arraysimplestexample)] /Names [(arraysimplestexample) 172 0 R] >> endobj 1783 0 obj << /Limits [(associativearrays) (associativearrays)] /Names [(associativearrays) 360 0 R] >> endobj 1784 0 obj << /Limits [(available) (available)] /Names [(available) 152 0 R] >> endobj 1785 0 obj << /Limits [(casting) (casting)] /Names [(casting) 150 0 R] >> endobj 1786 0 obj << /Limits [(commandlineargs) (commandlineargs)] /Names [(commandlineargs) 164 0 R] >> endobj 1787 0 obj << /Limits [(commandlineargssect) (commandlineargssect)] /Names [(commandlineargssect) 356 0 R] >> endobj 1788 0 obj << /Limits [(countcalls) (countcalls)] /Names [(countcalls) 577 0 R] >> endobj 1789 0 obj << /Limits [(countcallsoutput) (countcallsoutput)] /Names [(countcallsoutput) 573 0 R] >> endobj 1790 0 obj << /Limits [(countcallssect) (countcallssect)] /Names [(countcallssect) 863 0 R] >> endobj 1791 0 obj << /Limits [(cross-compiling) (cross-compiling)] /Names [(cross-compiling) 122 0 R] >> endobj 1792 0 obj << /Limits [(disktop) (disktop)] /Names [(disktop) 507 0 R] >> endobj 1793 0 obj << /Limits [(disktopoutput) (disktopoutput)] /Names [(disktopoutput) 489 0 R] >> endobj 1794 0 obj << /Limits [(dropwatch) (dropwatch)] /Names [(dropwatch) 464 0 R] >> endobj 1795 0 obj << /Limits [(dropwatchoutput) (dropwatchoutput)] /Names [(dropwatchoutput) 471 0 R] >> endobj 1796 0 obj << /Limits [(dropwatchsect) (dropwatchsect)] /Names [(dropwatchsect) 835 0 R] >> endobj 1797 0 obj << /Limits [(errors) (errors)] /Names [(errors) 677 0 R] >> endobj 1798 0 obj << /Limits [(eventsmodules) (eventsmodules)] /Names [(eventsmodules) 86 0 R] >> endobj 1799 0 obj << /Limits [(file-flight-recorder) (file-flight-recorder)] /Names [(file-flight-recorder) 321 0 R] >> endobj 1800 0 obj << /Limits [(flight-recorder) (flight-recorder)] /Names [(flight-recorder) 117 0 R] >> endobj 1801 0 obj << /Limits [(futexcontention) (futexcontention)] /Names [(futexcontention) 656 0 R] >> endobj 1802 0 obj << /Limits [(futexcontentionoutput) (futexcontentionoutput)] /Names [(futexcontentionoutput) 662 0 R] >> endobj 1803 0 obj << /Limits [(futexcontentionsect) (futexcontentionsect)] /Names [(futexcontentionsect) 879 0 R] >> endobj 1804 0 obj << /Limits [(goals) (goals)] /Names [(goals) 291 0 R] >> endobj 1805 0 obj << /Limits [(handlerconditionalstatements) (handlerconditionalstatements)] /Names [(handlerconditionalstatements) 353 0 R] >> endobj 1806 0 obj << /Limits [(helloworld) (helloworld)] /Names [(helloworld) 102 0 R] >> endobj 1807 0 obj << /Limits [(inodewatch) (inodewatch)] /Names [(inodewatch) 542 0 R] >> endobj 1808 0 obj << /Limits [(inodewatch2) (inodewatch2)] /Names [(inodewatch2) 546 0 R] >> endobj 1809 0 obj << /Limits [(inodewatch2output) (inodewatch2output)] /Names [(inodewatch2output) 539 0 R] >> endobj 1810 0 obj << /Limits [(inodewatch2sect) (inodewatch2sect)] /Names [(inodewatch2sect) 854 0 R] >> endobj 1811 0 obj << /Limits [(inodewatchoutput) (inodewatchoutput)] /Names [(inodewatchoutput) 561 0 R] >> endobj 1812 0 obj << /Limits [(inodewatchsect) (inodewatchsect)] /Names [(inodewatchsect) 545 0 R] >> endobj 1813 0 obj << /Limits [(install-kinfo) (install-kinfo)] /Names [(install-kinfo) 51 0 R] >> endobj 1814 0 obj << /Limits [(installproper) (installproper)] /Names [(installproper) 48 0 R] >> endobj 1815 0 obj << /Limits [(intro-systemtap-limitations) (intro-systemtap-limitations)] /Names [(intro-systemtap-limitations) 297 0 R] >> endobj 1816 0 obj << /Limits [(intro-systemtap-vs-others) (intro-systemtap-vs-others)] /Names [(intro-systemtap-vs-others) 294 0 R] >> endobj 1817 0 obj << /Limits [(introduction) (introduction)] /Names [(introduction) 288 0 R] >> endobj 1818 0 obj << /Limits [(ioblktime) (ioblktime)] /Names [(ioblktime) 566 0 R] >> endobj 1819 0 obj << /Limits [(ioblktimeoutput) (ioblktimeoutput)] /Names [(ioblktimeoutput) 575 0 R] >> endobj 1820 0 obj << /Limits [(ioblktimesect) (ioblktimesect)] /Names [(ioblktimesect) 857 0 R] >> endobj 1821 0 obj << /Limits [(iotime) (iotime)] /Names [(iotime) 502 0 R] >> endobj 1822 0 obj << /Limits [(iotimeoutput) (iotimeoutput)] /Names [(iotimeoutput) 515 0 R] >> endobj 1823 0 obj << /Limits [(iotimesect) (iotimesect)] /Names [(iotimesect) 843 0 R] >> endobj 1824 0 obj << /Limits [(mainsect-disk) (mainsect-disk)] /Names [(mainsect-disk) 838 0 R] >> endobj 1825 0 obj << /Limits [(mainsect-network) (mainsect-network)] /Names [(mainsect-network) 820 0 R] >> endobj 1826 0 obj << /Limits [(mainsect-profiling) (mainsect-profiling)] /Names [(mainsect-profiling) 860 0 R] >> endobj 1827 0 obj << /Limits [(memory-flight-recorder) (memory-flight-recorder)] /Names [(memory-flight-recorder) 318 0 R] >> endobj 1828 0 obj << /Limits [(multiplearrayindices) (multiplearrayindices)] /Names [(multiplearrayindices) 235 0 R] >> endobj 1829 0 obj << /Limits [(nettop) (nettop)] /Names [(nettop) 404 0 R] >> endobj 1830 0 obj << /Limits [(nettopoutput) (nettopoutput)] /Names [(nettopoutput) 423 0 R] >> endobj 1831 0 obj << /Limits [(nettopsect) (nettopsect)] /Names [(nettopsect) 823 0 R] >> endobj 1832 0 obj << /Limits [(paracallgraph) (paracallgraph)] /Names [(paracallgraph) 866 0 R] >> endobj 1833 0 obj << /Limits [(paracallgraphoutput) (paracallgraphoutput)] /Names [(paracallgraphoutput) 1675 0 R] >> endobj 1834 0 obj << /Limits [(parsetype) (parsetype)] /Names [(parsetype) 884 0 R] >> endobj 1835 0 obj << /Limits [(preppingxcompile) (preppingxcompile)] /Names [(preppingxcompile) 1667 0 R] >> endobj 1836 0 obj << /Limits [(printf) (printf)] /Names [(printf) 1669 0 R] >> endobj 1837 0 obj << /Limits [(references) (references)] /Names [(references) 890 0 R] >> endobj 1838 0 obj << /Limits [(runtimeerror) (runtimeerror)] /Names [(runtimeerror) 887 0 R] >> endobj 1839 0 obj << /Limits [(scriptcallgraph) (scriptcallgraph)] /Names [(scriptcallgraph) 585 0 R] >> endobj 1840 0 obj << /Limits [(scriptconstructions) (scriptconstructions)] /Names [(scriptconstructions) 336 0 R] >> endobj 1841 0 obj << /Limits [(scriptdisktop) (scriptdisktop)] /Names [(scriptdisktop) 484 0 R] >> endobj 1842 0 obj << /Limits [(scriptformats) (scriptformats)] /Names [(scriptformats) 1668 0 R] >> endobj 1843 0 obj << /Limits [(scripts) (scripts)] /Names [(scripts) 328 0 R] >> endobj 1844 0 obj << /Limits [(simpleaggregates) (simpleaggregates)] /Names [(simpleaggregates) 226 0 R] >> endobj 1845 0 obj << /Limits [(simpleifelseexample) (simpleifelseexample)] /Names [(simpleifelseexample) 158 0 R] >> endobj 1846 0 obj << /Limits [(simplesimplevfsread) (simplesimplevfsread)] /Names [(simplesimplevfsread) 186 0 R] >> endobj 1847 0 obj << /Limits [(simplesimplevfsreadprintifmember) (simplesimplevfsreadprintifmember)] /Names [(simplesimplevfsreadprintifmember) 1670 0 R] >> endobj 1848 0 obj << /Limits [(simplevfsreadprint) (simplevfsreadprint)] /Names [(simplevfsreadprint) 194 0 R] >> endobj 1849 0 obj << /Limits [(simplevfsreadprintif) (simplevfsreadprintif)] /Names [(simplevfsreadprintif) 220 0 R] >> endobj 1850 0 obj << /Limits [(simplevfsreadprintnotcumulative) (simplevfsreadprintnotcumulative)] /Names [(simplevfsreadprintnotcumulative) 206 0 R] >> endobj 1851 0 obj << /Limits [(sockettrace) (sockettrace)] /Names [(sockettrace) 433 0 R] >> endobj 1852 0 obj << /Limits [(sockettraceoutput) (sockettraceoutput)] /Names [(sockettraceoutput) 443 0 R] >> endobj 1853 0 obj << /Limits [(sockettracesect) (sockettracesect)] /Names [(sockettracesect) 826 0 R] >> endobj 1854 0 obj << /Limits [(syscall-open) (syscall-open)] /Names [(syscall-open) 110 0 R] >> endobj 1855 0 obj << /Limits [(syscallsbypid) (syscallsbypid)] /Names [(syscallsbypid) 1676 0 R] >> endobj 1856 0 obj << /Limits [(syscallsbyprocpid) (syscallsbyprocpid)] /Names [(syscallsbyprocpid) 648 0 R] >> endobj 1857 0 obj << /Limits [(syscallsbyprocpidoutput) (syscallsbyprocpidoutput)] /Names [(syscallsbyprocpidoutput) 646 0 R] >> endobj 1858 0 obj << /Limits [(syscallsbyprocpidsect) (syscallsbyprocpidsect)] /Names [(syscallsbyprocpidsect) 876 0 R] >> endobj 1859 0 obj << /Limits [(systemtapscript-events) (systemtapscript-events)] /Names [(systemtapscript-events) 241 0 R] >> endobj 1860 0 obj << /Limits [(systemtapscript-functions) (systemtapscript-functions)] /Names [(systemtapscript-functions) 119 0 R] >> endobj 1861 0 obj << /Limits [(systemtapscript-handler) (systemtapscript-handler)] /Names [(systemtapscript-handler) 333 0 R] >> endobj 1862 0 obj << /Limits [(systemtapsession) (systemtapsession)] /Names [(systemtapsession) 70 0 R] >> endobj 1863 0 obj << /Limits [(targetavailable) (targetavailable)] /Names [(targetavailable) 350 0 R] >> endobj 1864 0 obj << /Limits [(targetexample) (targetexample)] /Names [(targetexample) 134 0 R] >> endobj 1865 0 obj << /Limits [(targetprettyprinting) (targetprettyprinting)] /Names [(targetprettyprinting) 344 0 R] >> endobj 1866 0 obj << /Limits [(targetvariables) (targetvariables)] /Names [(targetvariables) 253 0 R] >> endobj 1867 0 obj << /Limits [(tcpconnections) (tcpconnections)] /Names [(tcpconnections) 449 0 R] >> endobj 1868 0 obj << /Limits [(tcpconnectionsoutput) (tcpconnectionsoutput)] /Names [(tcpconnectionsoutput) 1671 0 R] >> endobj 1869 0 obj << /Limits [(tcpconnectionssect) (tcpconnectionssect)] /Names [(tcpconnectionssect) 829 0 R] >> endobj 1870 0 obj << /Limits [(tcpdumplike) (tcpdumplike)] /Names [(tcpdumplike) 456 0 R] >> endobj 1871 0 obj << /Limits [(tcpdumplikeoutput) (tcpdumplikeoutput)] /Names [(tcpdumplikeoutput) 1672 0 R] >> endobj 1872 0 obj << /Limits [(tcpdumplikesect) (tcpdumplikesect)] /Names [(tcpdumplikesect) 832 0 R] >> endobj 1873 0 obj << /Limits [(testing) (testing)] /Names [(testing) 308 0 R] >> endobj 1874 0 obj << /Limits [(thread_indent) (thread_indent)] /Names [(thread_indent) 128 0 R] >> endobj 1875 0 obj << /Limits [(threadtimes) (threadtimes)] /Names [(threadtimes) 600 0 R] >> endobj 1876 0 obj << /Limits [(threadtimesoutput) (threadtimesoutput)] /Names [(threadtimesoutput) 598 0 R] >> endobj 1877 0 obj << /Limits [(threadtimessect) (threadtimessect)] /Names [(threadtimessect) 869 0 R] >> endobj 1878 0 obj << /Limits [(timeouts) (timeouts)] /Names [(timeouts) 615 0 R] >> endobj 1879 0 obj << /Limits [(timeoutsoutput) (timeoutsoutput)] /Names [(timeoutsoutput) 619 0 R] >> endobj 1880 0 obj << /Limits [(timeoutssect) (timeoutssect)] /Names [(timeoutssect) 629 0 R] >> endobj 1881 0 obj << /Limits [(timer) (timer)] /Names [(timer) 96 0 R] >> endobj 1882 0 obj << /Limits [(timerjiffies) (timerjiffies)] /Names [(timerjiffies) 140 0 R] >> endobj 1883 0 obj << /Limits [(topsys) (topsys)] /Names [(topsys) 625 0 R] >> endobj 1884 0 obj << /Limits [(topsysoutput) (topsysoutput)] /Names [(topsysoutput) 627 0 R] >> endobj 1885 0 obj << /Limits [(topsyssect) (topsyssect)] /Names [(topsyssect) 638 0 R] >> endobj 1886 0 obj << /Limits [(traceio) (traceio)] /Names [(traceio) 521 0 R] >> endobj 1887 0 obj << /Limits [(traceio2) (traceio2)] /Names [(traceio2) 531 0 R] >> endobj 1888 0 obj << /Limits [(traceio2output) (traceio2output)] /Names [(traceio2output) 1674 0 R] >> endobj 1889 0 obj << /Limits [(traceio2sect) (traceio2sect)] /Names [(traceio2sect) 849 0 R] >> endobj 1890 0 obj << /Limits [(traceiooutput) (traceiooutput)] /Names [(traceiooutput) 1673 0 R] >> endobj 1891 0 obj << /Limits [(traceiosect) (traceiosect)] /Names [(traceiosect) 846 0 R] >> endobj 1892 0 obj << /Limits [(typecasting) (typecasting)] /Names [(typecasting) 347 0 R] >> endobj 1893 0 obj << /Limits [(uevents) (uevents)] /Names [(uevents) 389 0 R] >> endobj 1894 0 obj << /Limits [(understanding-architecture-tools) (understanding-architecture-tools)] /Names [(understanding-architecture-tools) 72 0 R] >> endobj 1895 0 obj << /Limits [(understanding-how-systemtap-works) (understanding-how-systemtap-works)] /Names [(understanding-how-systemtap-works) 80 0 R] >> endobj 1896 0 obj << /Limits [(understanding-tapsets) (understanding-tapsets)] /Names [(understanding-tapsets) 383 0 R] >> endobj 1897 0 obj << /Limits [(useful-systemtap-scripts) (useful-systemtap-scripts)] /Names [(useful-systemtap-scripts) 411 0 R] >> endobj 1898 0 obj << /Limits [(userspace-probing) (userspace-probing)] /Names [(userspace-probing) 386 0 R] >> endobj 1899 0 obj << /Limits [(using-setup) (using-setup)] /Names [(using-setup) 74 0 R] >> endobj 1900 0 obj << /Limits [(using-systemtap) (using-systemtap)] /Names [(using-systemtap) 299 0 R] >> endobj 1901 0 obj << /Limits [(using-usage) (using-usage)] /Names [(using-usage) 313 0 R] >> endobj 1902 0 obj << /Limits [(ustack) (ustack)] /Names [(ustack) 394 0 R] >> endobj 1903 0 obj << /Limits [(utargetvariable) (utargetvariable)] /Names [(utargetvariable) 260 0 R] >> endobj 1904 0 obj << /Limits [(variablesconstructs) (variablesconstructs)] /Names [(variablesconstructs) 339 0 R] >> endobj 1905 0 obj << /Limits [(wildcards) (wildcards)] /Names [(wildcards) 91 0 R] >> endobj 1906 0 obj << /Limits [(SystemTap_Beginners_Guide-Preface) (wildcards)] /Kids [1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R 1802 0 R 1803 0 R 1804 0 R 1805 0 R 1806 0 R 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R 1814 0 R 1815 0 R 1816 0 R 1817 0 R 1818 0 R 1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R 1905 0 R] >> endobj 11 0 obj << /Type /Pages /Count 96 /Kids [9 0 R 19 0 R 400 0 R 902 0 R 26 0 R 29 0 R 32 0 R 38 0 R 410 0 R 41 0 R 44 0 R 47 0 R 79 0 R 57 0 R 60 0 R 683 0 R 118 0 R 63 0 R 69 0 R 85 0 R 416 0 R 87 0 R 97 0 R 109 0 R 116 0 R 129 0 R 135 0 R 141 0 R 265 0 R 149 0 R 151 0 R 159 0 R 165 0 R 483 0 R 174 0 R 187 0 R 195 0 R 207 0 R 219 0 R 225 0 R 227 0 R 236 0 R 252 0 R 259 0 R 268 0 R 403 0 R 405 0 R 424 0 R 434 0 R 450 0 R 457 0 R 465 0 R 472 0 R 482 0 R 490 0 R 501 0 R 513 0 R 516 0 R 530 0 R 532 0 R 559 0 R 540 0 R 567 0 R 574 0 R 586 0 R 597 0 R 599 0 R 611 0 R 614 0 R 620 0 R 626 0 R 645 0 R 647 0 R 657 0 R 663 0 R 673 0 R 676 0 R 686 0 R 689 0 R 692 0 R 706 0 R 709 0 R 715 0 R 718 0 R 720 0 R 985 0 R 1113 0 R 1210 0 R 1282 0 R 1335 0 R 1407 0 R 1494 0 R 1568 0 R 1639 0 R 1663 0 R 1666 0 R ] >> endobj 1907 0 obj << /Type /Catalog /Pages 11 0 R /Lang (en) /Metadata 5 0 R /PageLabels 1908 0 R /Outlines 1679 0 R /PageMode /UseOutlines /Names 1909 0 R >> endobj 10 0 obj << /Font << /F9 1758 0 R /F10 1759 0 R /F12 1760 0 R /F11 1761 0 R /F13 1762 0 R /F1 1765 0 R /F2 1766 0 R /F3 1767 0 R /F4 1768 0 R /F5 1769 0 R >> /ProcSet [/PDF /ImageB /ImageC /Text] /ColorSpace << /DefaultRGB 4 0 R >> >> endobj 1908 0 obj << /Nums [0 << /S /r >> 2 << /S /r /St 3 >> 3 << /S /r /St 4 >> 4 << /S /r /St 5 >> 8 << /S /D >> 9 << /S /D /St 2 >> 12 << /S /D /St 5 >> 13 << /S /D /St 6 >> 15 << /S /D /St 8 >> 16 << /S /D /St 9 >> 17 << /S /D /St 10 >> 19 << /S /D /St 12 >> 20 << /S /D /St 13 >> 21 << /S /D /St 14 >> 25 << /S /D /St 18 >> 28 << /S /D /St 21 >> 29 << /S /D /St 22 >> 33 << /S /D /St 26 >> 34 << /S /D /St 27 >> 44 << /S /D /St 37 >> 45 << /S /D /St 38 >> 47 << /S /D /St 40 >> 54 << /S /D /St 47 >> 60 << /S /D /St 53 >> 61 << /S /D /St 54 >> 62 << /S /D /St 55 >> 77 << /S /D /St 70 >> 85 << /S /D /St 78 >>] >> endobj 1679 0 obj << /First 1678 0 R /Last 1757 0 R >> endobj 1909 0 obj << /Dests 1906 0 R >> endobj xref 0 1910 0000000000 65535 f 0000000015 00000 n 0000000240 00000 n 0000006748 00000 n 0000006768 00000 n 0000006801 00000 n 0000007870 00000 n 0000007889 00000 n 0000008240 00000 n 0000008259 00000 n 0000453064 00000 n 0000452075 00000 n 0000008451 00000 n 0000008515 00000 n 0000008653 00000 n 0000008715 00000 n 0000008853 00000 n 0000009960 00000 n 0000009981 00000 n 0000010015 00000 n 0000010226 00000 n 0000010306 00000 n 0000010446 00000 n 0000010582 00000 n 0000012654 00000 n 0000012675 00000 n 0000012709 00000 n 0000012920 00000 n 0000015708 00000 n 0000015729 00000 n 0000015923 00000 n 0000017845 00000 n 0000017866 00000 n 0000018060 00000 n 0000018129 00000 n 0000018269 00000 n 0000019130 00000 n 0000019150 00000 n 0000019177 00000 n 0000019388 00000 n 0000019966 00000 n 0000019986 00000 n 0000020180 00000 n 0000022124 00000 n 0000022145 00000 n 0000022339 00000 n 0000024778 00000 n 0000024799 00000 n 0000024993 00000 n 0000025073 00000 n 0000025213 00000 n 0000025352 00000 n 0000025432 00000 n 0000025572 00000 n 0000025711 00000 n 0000028300 00000 n 0000028321 00000 n 0000028369 00000 n 0000028580 00000 n 0000030898 00000 n 0000030919 00000 n 0000031113 00000 n 0000032838 00000 n 0000032859 00000 n 0000033053 00000 n 0000033193 00000 n 0000033333 00000 n 0000035497 00000 n 0000035518 00000 n 0000035552 00000 n 0000035763 00000 n 0000035843 00000 n 0000035982 00000 n 0000036062 00000 n 0000036202 00000 n 0000036282 00000 n 0000036421 00000 n 0000038912 00000 n 0000038933 00000 n 0000038974 00000 n 0000039185 00000 n 0000039265 00000 n 0000039405 00000 n 0000041561 00000 n 0000041582 00000 n 0000041609 00000 n 0000041820 00000 n 0000044905 00000 n 0000041902 00000 n 0000042042 00000 n 0000042182 00000 n 0000042321 00000 n 0000042401 00000 n 0000042541 00000 n 0000044836 00000 n 0000044857 00000 n 0000045116 00000 n 0000047412 00000 n 0000045196 00000 n 0000045336 00000 n 0000047362 00000 n 0000047384 00000 n 0000047624 00000 n 0000047707 00000 n 0000047848 00000 n 0000047990 00000 n 0000048131 00000 n 0000050639 00000 n 0000050661 00000 n 0000050706 00000 n 0000050920 00000 n 0000051004 00000 n 0000051145 00000 n 0000051286 00000 n 0000052880 00000 n 0000052902 00000 n 0000052939 00000 n 0000053153 00000 n 0000056213 00000 n 0000053235 00000 n 0000053319 00000 n 0000053461 00000 n 0000053603 00000 n 0000053686 00000 n 0000053828 00000 n 0000053969 00000 n 0000056138 00000 n 0000056160 00000 n 0000056427 00000 n 0000058931 00000 n 0000056511 00000 n 0000056652 00000 n 0000058880 00000 n 0000058902 00000 n 0000059145 00000 n 0000061847 00000 n 0000059227 00000 n 0000059369 00000 n 0000061796 00000 n 0000061818 00000 n 0000062061 00000 n 0000065080 00000 n 0000062143 00000 n 0000062284 00000 n 0000062426 00000 n 0000065021 00000 n 0000065043 00000 n 0000065294 00000 n 0000067957 00000 n 0000067979 00000 n 0000068175 00000 n 0000071715 00000 n 0000068259 00000 n 0000068343 00000 n 0000068485 00000 n 0000068627 00000 n 0000071656 00000 n 0000071678 00000 n 0000071929 00000 n 0000074413 00000 n 0000072011 00000 n 0000072152 00000 n 0000074362 00000 n 0000074384 00000 n 0000074627 00000 n 0000077193 00000 n 0000074711 00000 n 0000074852 00000 n 0000074993 00000 n 0000077134 00000 n 0000077156 00000 n 0000077407 00000 n 0000175389 00000 n 0000077548 00000 n 0000081046 00000 n 0000077632 00000 n 0000077774 00000 n 0000077916 00000 n 0000078057 00000 n 0000078139 00000 n 0000078281 00000 n 0000078365 00000 n 0000078506 00000 n 0000080955 00000 n 0000080977 00000 n 0000081260 00000 n 0000081402 00000 n 0000084420 00000 n 0000081485 00000 n 0000081626 00000 n 0000081768 00000 n 0000081910 00000 n 0000084345 00000 n 0000084367 00000 n 0000084634 00000 n 0000088072 00000 n 0000084716 00000 n 0000084856 00000 n 0000084998 00000 n 0000085140 00000 n 0000085282 00000 n 0000085366 00000 n 0000085508 00000 n 0000085649 00000 n 0000087981 00000 n 0000088003 00000 n 0000088286 00000 n 0000089634 00000 n 0000088368 00000 n 0000088509 00000 n 0000089584 00000 n 0000089605 00000 n 0000089848 00000 n 0000089989 00000 n 0000090073 00000 n 0000090215 00000 n 0000090356 00000 n 0000092409 00000 n 0000092431 00000 n 0000092476 00000 n 0000092690 00000 n 0000092774 00000 n 0000092916 00000 n 0000095067 00000 n 0000095089 00000 n 0000095118 00000 n 0000095332 00000 n 0000098154 00000 n 0000095414 00000 n 0000095555 00000 n 0000095697 00000 n 0000095839 00000 n 0000095981 00000 n 0000098079 00000 n 0000098101 00000 n 0000098368 00000 n 0000101651 00000 n 0000098450 00000 n 0000098591 00000 n 0000098733 00000 n 0000098874 00000 n 0000151468 00000 n 0000099016 00000 n 0000099158 00000 n 0000101568 00000 n 0000101590 00000 n 0000101865 00000 n 0000101947 00000 n 0000102089 00000 n 0000102230 00000 n 0000104700 00000 n 0000104722 00000 n 0000104759 00000 n 0000104973 00000 n 0000105057 00000 n 0000105199 00000 n 0000105339 00000 n 0000107360 00000 n 0000107382 00000 n 0000107419 00000 n 0000107633 00000 n 0000107715 00000 n 0000107855 00000 n 0000110448 00000 n 0000110470 00000 n 0000110499 00000 n 0000110713 00000 n 0000113104 00000 n 0000113126 00000 n 0000113322 00000 n 0000113403 00000 n 0000113544 00000 n 0000113686 00000 n 0000113767 00000 n 0000113907 00000 n 0000114049 00000 n 0000114132 00000 n 0000114273 00000 n 0000114415 00000 n 0000114498 00000 n 0000114640 00000 n 0000114782 00000 n 0000114865 00000 n 0000115006 00000 n 0000115146 00000 n 0000115229 00000 n 0000115371 00000 n 0000115513 00000 n 0000148396 00000 n 0000115654 00000 n 0000115796 00000 n 0000148478 00000 n 0000115938 00000 n 0000116080 00000 n 0000148560 00000 n 0000116222 00000 n 0000116364 00000 n 0000148643 00000 n 0000116506 00000 n 0000116648 00000 n 0000116729 00000 n 0000116870 00000 n 0000117012 00000 n 0000117153 00000 n 0000117294 00000 n 0000117435 00000 n 0000117576 00000 n 0000117717 00000 n 0000117858 00000 n 0000117940 00000 n 0000118082 00000 n 0000118222 00000 n 0000118364 00000 n 0000118506 00000 n 0000118589 00000 n 0000118731 00000 n 0000118873 00000 n 0000119015 00000 n 0000119157 00000 n 0000119241 00000 n 0000119383 00000 n 0000119525 00000 n 0000119606 00000 n 0000119748 00000 n 0000119890 00000 n 0000120029 00000 n 0000120170 00000 n 0000120311 00000 n 0000120452 00000 n 0000120533 00000 n 0000120675 00000 n 0000120817 00000 n 0000120959 00000 n 0000121101 00000 n 0000121184 00000 n 0000121326 00000 n 0000121468 00000 n 0000121552 00000 n 0000121694 00000 n 0000121834 00000 n 0000121918 00000 n 0000122060 00000 n 0000122202 00000 n 0000122344 00000 n 0000122486 00000 n 0000122568 00000 n 0000122710 00000 n 0000122852 00000 n 0000122936 00000 n 0000123078 00000 n 0000123220 00000 n 0000123304 00000 n 0000123446 00000 n 0000123588 00000 n 0000123670 00000 n 0000123812 00000 n 0000123954 00000 n 0000124038 00000 n 0000124180 00000 n 0000124322 00000 n 0000175307 00000 n 0000124464 00000 n 0000124606 00000 n 0000175471 00000 n 0000124748 00000 n 0000124890 00000 n 0000125032 00000 n 0000125172 00000 n 0000125256 00000 n 0000125398 00000 n 0000125540 00000 n 0000125624 00000 n 0000125766 00000 n 0000125908 00000 n 0000126050 00000 n 0000126190 00000 n 0000126332 00000 n 0000126474 00000 n 0000126558 00000 n 0000126700 00000 n 0000126842 00000 n 0000126926 00000 n 0000127067 00000 n 0000127209 00000 n 0000127291 00000 n 0000127433 00000 n 0000127575 00000 n 0000127657 00000 n 0000127798 00000 n 0000127940 00000 n 0000128024 00000 n 0000128166 00000 n 0000128308 00000 n 0000128448 00000 n 0000128588 00000 n 0000128670 00000 n 0000128810 00000 n 0000128950 00000 n 0000144015 00000 n 0000144038 00000 n 0000144811 00000 n 0000145025 00000 n 0000146024 00000 n 0000146045 00000 n 0000146241 00000 n 0000148182 00000 n 0000146325 00000 n 0000146467 00000 n 0000148131 00000 n 0000148153 00000 n 0000151254 00000 n 0000148727 00000 n 0000148809 00000 n 0000148951 00000 n 0000151203 00000 n 0000151225 00000 n 0000154637 00000 n 0000151552 00000 n 0000151693 00000 n 0000151835 00000 n 0000151976 00000 n 0000154570 00000 n 0000154592 00000 n 0000154851 00000 n 0000157920 00000 n 0000154935 00000 n 0000155075 00000 n 0000155215 00000 n 0000155357 00000 n 0000155499 00000 n 0000155641 00000 n 0000157837 00000 n 0000157859 00000 n 0000158134 00000 n 0000161044 00000 n 0000158216 00000 n 0000158357 00000 n 0000158499 00000 n 0000158641 00000 n 0000158782 00000 n 0000158924 00000 n 0000160961 00000 n 0000160983 00000 n 0000161258 00000 n 0000161342 00000 n 0000161483 00000 n 0000161625 00000 n 0000161765 00000 n 0000161906 00000 n 0000162048 00000 n 0000164614 00000 n 0000162132 00000 n 0000162273 00000 n 0000162415 00000 n 0000164515 00000 n 0000164537 00000 n 0000164828 00000 n 0000167298 00000 n 0000164910 00000 n 0000165052 00000 n 0000165194 00000 n 0000165336 00000 n 0000167231 00000 n 0000167253 00000 n 0000167512 00000 n 0000170160 00000 n 0000167594 00000 n 0000167735 00000 n 0000167877 00000 n 0000170101 00000 n 0000170123 00000 n 0000170374 00000 n 0000173280 00000 n 0000170458 00000 n 0000170600 00000 n 0000170741 00000 n 0000170883 00000 n 0000171024 00000 n 0000173205 00000 n 0000173227 00000 n 0000173494 00000 n 0000175089 00000 n 0000175111 00000 n 0000178213 00000 n 0000175553 00000 n 0000175635 00000 n 0000175776 00000 n 0000178162 00000 n 0000178184 00000 n 0000178427 00000 n 0000181568 00000 n 0000178511 00000 n 0000178652 00000 n 0000178794 00000 n 0000178935 00000 n 0000179077 00000 n 0000179219 00000 n 0000181485 00000 n 0000181507 00000 n 0000181782 00000 n 0000183621 00000 n 0000183643 00000 n 0000183839 00000 n 0000183921 00000 n 0000184062 00000 n 0000184204 00000 n 0000184345 00000 n 0000184487 00000 n 0000184571 00000 n 0000184713 00000 n 0000184853 00000 n 0000186684 00000 n 0000186706 00000 n 0000186775 00000 n 0000186989 00000 n 0000187131 00000 n 0000189596 00000 n 0000187213 00000 n 0000187354 00000 n 0000189537 00000 n 0000189559 00000 n 0000189810 00000 n 0000189894 00000 n 0000190035 00000 n 0000190177 00000 n 0000190319 00000 n 0000190460 00000 n 0000190602 00000 n 0000192572 00000 n 0000192594 00000 n 0000192655 00000 n 0000192869 00000 n 0000195776 00000 n 0000192951 00000 n 0000193092 00000 n 0000193234 00000 n 0000193375 00000 n 0000195709 00000 n 0000195731 00000 n 0000195990 00000 n 0000200379 00000 n 0000196074 00000 n 0000200675 00000 n 0000196216 00000 n 0000196357 00000 n 0000200593 00000 n 0000196499 00000 n 0000196583 00000 n 0000196725 00000 n 0000196867 00000 n 0000197007 00000 n 0000197149 00000 n 0000197291 00000 n 0000197433 00000 n 0000197574 00000 n 0000197716 00000 n 0000197858 00000 n 0000200240 00000 n 0000200262 00000 n 0000203364 00000 n 0000200757 00000 n 0000200896 00000 n 0000200978 00000 n 0000201119 00000 n 0000203305 00000 n 0000203327 00000 n 0000203578 00000 n 0000206043 00000 n 0000203660 00000 n 0000203801 00000 n 0000203943 00000 n 0000205984 00000 n 0000206006 00000 n 0000206257 00000 n 0000209473 00000 n 0000206341 00000 n 0000206423 00000 n 0000206564 00000 n 0000206648 00000 n 0000206789 00000 n 0000206931 00000 n 0000207073 00000 n 0000207215 00000 n 0000209390 00000 n 0000209412 00000 n 0000209687 00000 n 0000211479 00000 n 0000209769 00000 n 0000209909 00000 n 0000211428 00000 n 0000211450 00000 n 0000211693 00000 n 0000211834 00000 n 0000211976 00000 n 0000212116 00000 n 0000214360 00000 n 0000214382 00000 n 0000214427 00000 n 0000214641 00000 n 0000217620 00000 n 0000214725 00000 n 0000214809 00000 n 0000214950 00000 n 0000215091 00000 n 0000215233 00000 n 0000215374 00000 n 0000215516 00000 n 0000217537 00000 n 0000217559 00000 n 0000217834 00000 n 0000219393 00000 n 0000219415 00000 n 0000219611 00000 n 0000220929 00000 n 0000220951 00000 n 0000221147 00000 n 0000221229 00000 n 0000221370 00000 n 0000221512 00000 n 0000221654 00000 n 0000223876 00000 n 0000221736 00000 n 0000221878 00000 n 0000223801 00000 n 0000223823 00000 n 0000224090 00000 n 0000227297 00000 n 0000224172 00000 n 0000224256 00000 n 0000224397 00000 n 0000224479 00000 n 0000224621 00000 n 0000224763 00000 n 0000224904 00000 n 0000225046 00000 n 0000225187 00000 n 0000227206 00000 n 0000227228 00000 n 0000227511 00000 n 0000227593 00000 n 0000227734 00000 n 0000227876 00000 n 0000228017 00000 n 0000229967 00000 n 0000229989 00000 n 0000230034 00000 n 0000230248 00000 n 0000233093 00000 n 0000230332 00000 n 0000230414 00000 n 0000230555 00000 n 0000230697 00000 n 0000230838 00000 n 0000230980 00000 n 0000233018 00000 n 0000233040 00000 n 0000233307 00000 n 0000235673 00000 n 0000233390 00000 n 0000233531 00000 n 0000235622 00000 n 0000235644 00000 n 0000235887 00000 n 0000238269 00000 n 0000235969 00000 n 0000236110 00000 n 0000236251 00000 n 0000236393 00000 n 0000236535 00000 n 0000238194 00000 n 0000238216 00000 n 0000238483 00000 n 0000238823 00000 n 0000238844 00000 n 0000239040 00000 n 0000241425 00000 n 0000241447 00000 n 0000241643 00000 n 0000241725 00000 n 0000241867 00000 n 0000242007 00000 n 0000244464 00000 n 0000244486 00000 n 0000244523 00000 n 0000244737 00000 n 0000246785 00000 n 0000246807 00000 n 0000247003 00000 n 0000248853 00000 n 0000248875 00000 n 0000249071 00000 n 0000250009 00000 n 0000250030 00000 n 0000250226 00000 n 0000250310 00000 n 0000250452 00000 n 0000250532 00000 n 0000250674 00000 n 0000250753 00000 n 0000250895 00000 n 0000250974 00000 n 0000251116 00000 n 0000251258 00000 n 0000251400 00000 n 0000253565 00000 n 0000253587 00000 n 0000253656 00000 n 0000253870 00000 n 0000254210 00000 n 0000254231 00000 n 0000254427 00000 n 0000254568 00000 n 0000254709 00000 n 0000255363 00000 n 0000255384 00000 n 0000255421 00000 n 0000255635 00000 n 0000255975 00000 n 0000255996 00000 n 0000256192 00000 n 0000270061 00000 n 0000256274 00000 n 0000256358 00000 n 0000256500 00000 n 0000256584 00000 n 0000256726 00000 n 0000256810 00000 n 0000256952 00000 n 0000257036 00000 n 0000257178 00000 n 0000257263 00000 n 0000257405 00000 n 0000257490 00000 n 0000257632 00000 n 0000257717 00000 n 0000257859 00000 n 0000257944 00000 n 0000258086 00000 n 0000258170 00000 n 0000258312 00000 n 0000258395 00000 n 0000258537 00000 n 0000258621 00000 n 0000258763 00000 n 0000258847 00000 n 0000258989 00000 n 0000259073 00000 n 0000259215 00000 n 0000259298 00000 n 0000259440 00000 n 0000259523 00000 n 0000259665 00000 n 0000259748 00000 n 0000259890 00000 n 0000259973 00000 n 0000260115 00000 n 0000260199 00000 n 0000260339 00000 n 0000260423 00000 n 0000260563 00000 n 0000260647 00000 n 0000260789 00000 n 0000260873 00000 n 0000261015 00000 n 0000261099 00000 n 0000261241 00000 n 0000261325 00000 n 0000261467 00000 n 0000261551 00000 n 0000261693 00000 n 0000261835 00000 n 0000261977 00000 n 0000262119 00000 n 0000262261 00000 n 0000262403 00000 n 0000262545 00000 n 0000262687 00000 n 0000262771 00000 n 0000262913 00000 n 0000262997 00000 n 0000263139 00000 n 0000263223 00000 n 0000263365 00000 n 0000263449 00000 n 0000263591 00000 n 0000263733 00000 n 0000263817 00000 n 0000263959 00000 n 0000264043 00000 n 0000264185 00000 n 0000264269 00000 n 0000264411 00000 n 0000264553 00000 n 0000264637 00000 n 0000264779 00000 n 0000264863 00000 n 0000265005 00000 n 0000265147 00000 n 0000265231 00000 n 0000265373 00000 n 0000265515 00000 n 0000265599 00000 n 0000265741 00000 n 0000265883 00000 n 0000265967 00000 n 0000266109 00000 n 0000266251 00000 n 0000266335 00000 n 0000266477 00000 n 0000266619 00000 n 0000266761 00000 n 0000266903 00000 n 0000267045 00000 n 0000267129 00000 n 0000267271 00000 n 0000267411 00000 n 0000269570 00000 n 0000269592 00000 n 0000270275 00000 n 0000270416 00000 n 0000270558 00000 n 0000270640 00000 n 0000270781 00000 n 0000270923 00000 n 0000271007 00000 n 0000271149 00000 n 0000271291 00000 n 0000271373 00000 n 0000271515 00000 n 0000271655 00000 n 0000271737 00000 n 0000271879 00000 n 0000272021 00000 n 0000272105 00000 n 0000272247 00000 n 0000272387 00000 n 0000272469 00000 n 0000272611 00000 n 0000272753 00000 n 0000272837 00000 n 0000272978 00000 n 0000273120 00000 n 0000273262 00000 n 0000273404 00000 n 0000273486 00000 n 0000273628 00000 n 0000273770 00000 n 0000273854 00000 n 0000273996 00000 n 0000274138 00000 n 0000274220 00000 n 0000274362 00000 n 0000274504 00000 n 0000274646 00000 n 0000274788 00000 n 0000274872 00000 n 0000275014 00000 n 0000275156 00000 n 0000275240 00000 n 0000275382 00000 n 0000275521 00000 n 0000275603 00000 n 0000275744 00000 n 0000275886 00000 n 0000275970 00000 n 0000276112 00000 n 0000276254 00000 n 0000276336 00000 n 0000276478 00000 n 0000276618 00000 n 0000276702 00000 n 0000276843 00000 n 0000276983 00000 n 0000277124 00000 n 0000277266 00000 n 0000277407 00000 n 0000277549 00000 n 0000277631 00000 n 0000277773 00000 n 0000277915 00000 n 0000277998 00000 n 0000278138 00000 n 0000278280 00000 n 0000278421 00000 n 0000278561 00000 n 0000278643 00000 n 0000278784 00000 n 0000278926 00000 n 0000279010 00000 n 0000279151 00000 n 0000279293 00000 n 0000279375 00000 n 0000279516 00000 n 0000279658 00000 n 0000279740 00000 n 0000279881 00000 n 0000280023 00000 n 0000280105 00000 n 0000280245 00000 n 0000280387 00000 n 0000289737 00000 n 0000289759 00000 n 0000290244 00000 n 0000290458 00000 n 0000290600 00000 n 0000290742 00000 n 0000290826 00000 n 0000290968 00000 n 0000291110 00000 n 0000291252 00000 n 0000291336 00000 n 0000291478 00000 n 0000291620 00000 n 0000291703 00000 n 0000291845 00000 n 0000291927 00000 n 0000292069 00000 n 0000292152 00000 n 0000292292 00000 n 0000292434 00000 n 0000292518 00000 n 0000292660 00000 n 0000292744 00000 n 0000292886 00000 n 0000292969 00000 n 0000293111 00000 n 0000293253 00000 n 0000293395 00000 n 0000293537 00000 n 0000293679 00000 n 0000293763 00000 n 0000293905 00000 n 0000294047 00000 n 0000294130 00000 n 0000294272 00000 n 0000294414 00000 n 0000294556 00000 n 0000294698 00000 n 0000294840 00000 n 0000294982 00000 n 0000295124 00000 n 0000295266 00000 n 0000295407 00000 n 0000295547 00000 n 0000295689 00000 n 0000295773 00000 n 0000295915 00000 n 0000296057 00000 n 0000296199 00000 n 0000296283 00000 n 0000296425 00000 n 0000296509 00000 n 0000296651 00000 n 0000296735 00000 n 0000296877 00000 n 0000297019 00000 n 0000297103 00000 n 0000297245 00000 n 0000297329 00000 n 0000297471 00000 n 0000297556 00000 n 0000297698 00000 n 0000297840 00000 n 0000297982 00000 n 0000298124 00000 n 0000298207 00000 n 0000298349 00000 n 0000298491 00000 n 0000298574 00000 n 0000298716 00000 n 0000298799 00000 n 0000298941 00000 n 0000299024 00000 n 0000299166 00000 n 0000299249 00000 n 0000299391 00000 n 0000299476 00000 n 0000299618 00000 n 0000299702 00000 n 0000299844 00000 n 0000299927 00000 n 0000300069 00000 n 0000300211 00000 n 0000302393 00000 n 0000302415 00000 n 0000302868 00000 n 0000303082 00000 n 0000303224 00000 n 0000303366 00000 n 0000303449 00000 n 0000303591 00000 n 0000303675 00000 n 0000303817 00000 n 0000303901 00000 n 0000304043 00000 n 0000304127 00000 n 0000304269 00000 n 0000304353 00000 n 0000304495 00000 n 0000304579 00000 n 0000304721 00000 n 0000304806 00000 n 0000304950 00000 n 0000305035 00000 n 0000305179 00000 n 0000305322 00000 n 0000305407 00000 n 0000305551 00000 n 0000305636 00000 n 0000305780 00000 n 0000305924 00000 n 0000306009 00000 n 0000306153 00000 n 0000306238 00000 n 0000306382 00000 n 0000306467 00000 n 0000306611 00000 n 0000306755 00000 n 0000306840 00000 n 0000306984 00000 n 0000307069 00000 n 0000307213 00000 n 0000307356 00000 n 0000307440 00000 n 0000307584 00000 n 0000307669 00000 n 0000307813 00000 n 0000307898 00000 n 0000308042 00000 n 0000308127 00000 n 0000308271 00000 n 0000308355 00000 n 0000308499 00000 n 0000308584 00000 n 0000308728 00000 n 0000308813 00000 n 0000308957 00000 n 0000309100 00000 n 0000309243 00000 n 0000309386 00000 n 0000309528 00000 n 0000309613 00000 n 0000309755 00000 n 0000309840 00000 n 0000309982 00000 n 0000310066 00000 n 0000310210 00000 n 0000310295 00000 n 0000310439 00000 n 0000310521 00000 n 0000310665 00000 n 0000310808 00000 n 0000310951 00000 n 0000311095 00000 n 0000311180 00000 n 0000311324 00000 n 0000311409 00000 n 0000311553 00000 n 0000311639 00000 n 0000311783 00000 n 0000311867 00000 n 0000312011 00000 n 0000312095 00000 n 0000312239 00000 n 0000312324 00000 n 0000312468 00000 n 0000312554 00000 n 0000312698 00000 n 0000312783 00000 n 0000312927 00000 n 0000313012 00000 n 0000313156 00000 n 0000313242 00000 n 0000313386 00000 n 0000313470 00000 n 0000313614 00000 n 0000313696 00000 n 0000313840 00000 n 0000313984 00000 n 0000314127 00000 n 0000314212 00000 n 0000314356 00000 n 0000314500 00000 n 0000314583 00000 n 0000314727 00000 n 0000314870 00000 n 0000315013 00000 n 0000315156 00000 n 0000315299 00000 n 0000315442 00000 n 0000315527 00000 n 0000315671 00000 n 0000315756 00000 n 0000315900 00000 n 0000316043 00000 n 0000316128 00000 n 0000316272 00000 n 0000316357 00000 n 0000316501 00000 n 0000316644 00000 n 0000316787 00000 n 0000316872 00000 n 0000317016 00000 n 0000317101 00000 n 0000317245 00000 n 0000317330 00000 n 0000317473 00000 n 0000317558 00000 n 0000317700 00000 n 0000317785 00000 n 0000317927 00000 n 0000320525 00000 n 0000320548 00000 n 0000321228 00000 n 0000321445 00000 n 0000321530 00000 n 0000321674 00000 n 0000321759 00000 n 0000321901 00000 n 0000321986 00000 n 0000322130 00000 n 0000322272 00000 n 0000322357 00000 n 0000322501 00000 n 0000322586 00000 n 0000322730 00000 n 0000322815 00000 n 0000322959 00000 n 0000323044 00000 n 0000323188 00000 n 0000323273 00000 n 0000323417 00000 n 0000323560 00000 n 0000323703 00000 n 0000323788 00000 n 0000323932 00000 n 0000324017 00000 n 0000324161 00000 n 0000324246 00000 n 0000324390 00000 n 0000324475 00000 n 0000324619 00000 n 0000324761 00000 n 0000324904 00000 n 0000324988 00000 n 0000325132 00000 n 0000325217 00000 n 0000325361 00000 n 0000325505 00000 n 0000325649 00000 n 0000325793 00000 n 0000325878 00000 n 0000326022 00000 n 0000326166 00000 n 0000326309 00000 n 0000326392 00000 n 0000326536 00000 n 0000326679 00000 n 0000326822 00000 n 0000326966 00000 n 0000327051 00000 n 0000327194 00000 n 0000327278 00000 n 0000327420 00000 n 0000327505 00000 n 0000327647 00000 n 0000327733 00000 n 0000327877 00000 n 0000328020 00000 n 0000328163 00000 n 0000328248 00000 n 0000328392 00000 n 0000328477 00000 n 0000328621 00000 n 0000328705 00000 n 0000328849 00000 n 0000328934 00000 n 0000329078 00000 n 0000329163 00000 n 0000329307 00000 n 0000329451 00000 n 0000329594 00000 n 0000329737 00000 n 0000329822 00000 n 0000329966 00000 n 0000330109 00000 n 0000330252 00000 n 0000330338 00000 n 0000330482 00000 n 0000330568 00000 n 0000330712 00000 n 0000330796 00000 n 0000330940 00000 n 0000331026 00000 n 0000331170 00000 n 0000331255 00000 n 0000331399 00000 n 0000331485 00000 n 0000331629 00000 n 0000331773 00000 n 0000331859 00000 n 0000332003 00000 n 0000332147 00000 n 0000332291 00000 n 0000332435 00000 n 0000332579 00000 n 0000332723 00000 n 0000332865 00000 n 0000335101 00000 n 0000335124 00000 n 0000335686 00000 n 0000335903 00000 n 0000336047 00000 n 0000336132 00000 n 0000336276 00000 n 0000336420 00000 n 0000336564 00000 n 0000336708 00000 n 0000336852 00000 n 0000336937 00000 n 0000337081 00000 n 0000337224 00000 n 0000337368 00000 n 0000337453 00000 n 0000337597 00000 n 0000337682 00000 n 0000337826 00000 n 0000337910 00000 n 0000338054 00000 n 0000338139 00000 n 0000338283 00000 n 0000338426 00000 n 0000338570 00000 n 0000338714 00000 n 0000338798 00000 n 0000338942 00000 n 0000339086 00000 n 0000339171 00000 n 0000339315 00000 n 0000339459 00000 n 0000339602 00000 n 0000339745 00000 n 0000339829 00000 n 0000339973 00000 n 0000340116 00000 n 0000340260 00000 n 0000340402 00000 n 0000340544 00000 n 0000340687 00000 n 0000340831 00000 n 0000340974 00000 n 0000341117 00000 n 0000341261 00000 n 0000341405 00000 n 0000341548 00000 n 0000341692 00000 n 0000341835 00000 n 0000341978 00000 n 0000342121 00000 n 0000342264 00000 n 0000342348 00000 n 0000342492 00000 n 0000342636 00000 n 0000342780 00000 n 0000342864 00000 n 0000343008 00000 n 0000343151 00000 n 0000343295 00000 n 0000343379 00000 n 0000343523 00000 n 0000343607 00000 n 0000343751 00000 n 0000343895 00000 n 0000343979 00000 n 0000344123 00000 n 0000344266 00000 n 0000344409 00000 n 0000344551 00000 n 0000344693 00000 n 0000344835 00000 n 0000347022 00000 n 0000347045 00000 n 0000347553 00000 n 0000347770 00000 n 0000347855 00000 n 0000347999 00000 n 0000348082 00000 n 0000348226 00000 n 0000348369 00000 n 0000348513 00000 n 0000348656 00000 n 0000348797 00000 n 0000348939 00000 n 0000349080 00000 n 0000349221 00000 n 0000349363 00000 n 0000349505 00000 n 0000349646 00000 n 0000349790 00000 n 0000349934 00000 n 0000350077 00000 n 0000350163 00000 n 0000350306 00000 n 0000350449 00000 n 0000350592 00000 n 0000350735 00000 n 0000350877 00000 n 0000351018 00000 n 0000351161 00000 n 0000351305 00000 n 0000351448 00000 n 0000351591 00000 n 0000351734 00000 n 0000351878 00000 n 0000352022 00000 n 0000352166 00000 n 0000352310 00000 n 0000352454 00000 n 0000352598 00000 n 0000352742 00000 n 0000352886 00000 n 0000353029 00000 n 0000353173 00000 n 0000353316 00000 n 0000353460 00000 n 0000353604 00000 n 0000353748 00000 n 0000353892 00000 n 0000354036 00000 n 0000354180 00000 n 0000354324 00000 n 0000354468 00000 n 0000354609 00000 n 0000356653 00000 n 0000356676 00000 n 0000357112 00000 n 0000357329 00000 n 0000357473 00000 n 0000357616 00000 n 0000357759 00000 n 0000357902 00000 n 0000358045 00000 n 0000358188 00000 n 0000358331 00000 n 0000358474 00000 n 0000358617 00000 n 0000358760 00000 n 0000358903 00000 n 0000359046 00000 n 0000359189 00000 n 0000359332 00000 n 0000359475 00000 n 0000359618 00000 n 0000359761 00000 n 0000359904 00000 n 0000360047 00000 n 0000360190 00000 n 0000360333 00000 n 0000360476 00000 n 0000360619 00000 n 0000360762 00000 n 0000360905 00000 n 0000361048 00000 n 0000361191 00000 n 0000361334 00000 n 0000361477 00000 n 0000361620 00000 n 0000361763 00000 n 0000361906 00000 n 0000361991 00000 n 0000362135 00000 n 0000362276 00000 n 0000362419 00000 n 0000362563 00000 n 0000362707 00000 n 0000362851 00000 n 0000362995 00000 n 0000363139 00000 n 0000363283 00000 n 0000363427 00000 n 0000363571 00000 n 0000363715 00000 n 0000363858 00000 n 0000364002 00000 n 0000364146 00000 n 0000364290 00000 n 0000364434 00000 n 0000364578 00000 n 0000364722 00000 n 0000364866 00000 n 0000365010 00000 n 0000365154 00000 n 0000365298 00000 n 0000365442 00000 n 0000365527 00000 n 0000365671 00000 n 0000365815 00000 n 0000365959 00000 n 0000366102 00000 n 0000366246 00000 n 0000366390 00000 n 0000366534 00000 n 0000366618 00000 n 0000366762 00000 n 0000366903 00000 n 0000369294 00000 n 0000369317 00000 n 0000369924 00000 n 0000370141 00000 n 0000370284 00000 n 0000370427 00000 n 0000370570 00000 n 0000370713 00000 n 0000370857 00000 n 0000371001 00000 n 0000371144 00000 n 0000371287 00000 n 0000371430 00000 n 0000371573 00000 n 0000371717 00000 n 0000371861 00000 n 0000372005 00000 n 0000372090 00000 n 0000372234 00000 n 0000372318 00000 n 0000372462 00000 n 0000372606 00000 n 0000372749 00000 n 0000372892 00000 n 0000373035 00000 n 0000373178 00000 n 0000373322 00000 n 0000373466 00000 n 0000373610 00000 n 0000373754 00000 n 0000373897 00000 n 0000374040 00000 n 0000374183 00000 n 0000374324 00000 n 0000374467 00000 n 0000374611 00000 n 0000374755 00000 n 0000374898 00000 n 0000375041 00000 n 0000375183 00000 n 0000375324 00000 n 0000375467 00000 n 0000375611 00000 n 0000375755 00000 n 0000375899 00000 n 0000376043 00000 n 0000376187 00000 n 0000376331 00000 n 0000376475 00000 n 0000376619 00000 n 0000376763 00000 n 0000376907 00000 n 0000377051 00000 n 0000377195 00000 n 0000377339 00000 n 0000377483 00000 n 0000377626 00000 n 0000377769 00000 n 0000377913 00000 n 0000378057 00000 n 0000378201 00000 n 0000378345 00000 n 0000378489 00000 n 0000378632 00000 n 0000378776 00000 n 0000378920 00000 n 0000379064 00000 n 0000379148 00000 n 0000379292 00000 n 0000379435 00000 n 0000379578 00000 n 0000379722 00000 n 0000379866 00000 n 0000380010 00000 n 0000380094 00000 n 0000380238 00000 n 0000380322 00000 n 0000380466 00000 n 0000380610 00000 n 0000380695 00000 n 0000380839 00000 n 0000380983 00000 n 0000381127 00000 n 0000381271 00000 n 0000381356 00000 n 0000381499 00000 n 0000381641 00000 n 0000384206 00000 n 0000384229 00000 n 0000384935 00000 n 0000385152 00000 n 0000385237 00000 n 0000385381 00000 n 0000385525 00000 n 0000385669 00000 n 0000385813 00000 n 0000385956 00000 n 0000386099 00000 n 0000386242 00000 n 0000386386 00000 n 0000386529 00000 n 0000386673 00000 n 0000386817 00000 n 0000386961 00000 n 0000387105 00000 n 0000387249 00000 n 0000387393 00000 n 0000387536 00000 n 0000387680 00000 n 0000387824 00000 n 0000387968 00000 n 0000388112 00000 n 0000388256 00000 n 0000388399 00000 n 0000388542 00000 n 0000388686 00000 n 0000388830 00000 n 0000388974 00000 n 0000389118 00000 n 0000389262 00000 n 0000389346 00000 n 0000389490 00000 n 0000389633 00000 n 0000389775 00000 n 0000389918 00000 n 0000390062 00000 n 0000390206 00000 n 0000390350 00000 n 0000390493 00000 n 0000390637 00000 n 0000390781 00000 n 0000390925 00000 n 0000391069 00000 n 0000391213 00000 n 0000391356 00000 n 0000391499 00000 n 0000391584 00000 n 0000391728 00000 n 0000391812 00000 n 0000391956 00000 n 0000392040 00000 n 0000392184 00000 n 0000392327 00000 n 0000392471 00000 n 0000392556 00000 n 0000392700 00000 n 0000392785 00000 n 0000392929 00000 n 0000393014 00000 n 0000393158 00000 n 0000393243 00000 n 0000393387 00000 n 0000393531 00000 n 0000393675 00000 n 0000393819 00000 n 0000393963 00000 n 0000394107 00000 n 0000394250 00000 n 0000394394 00000 n 0000394538 00000 n 0000394680 00000 n 0000396903 00000 n 0000396926 00000 n 0000397497 00000 n 0000397714 00000 n 0000397858 00000 n 0000398002 00000 n 0000398145 00000 n 0000398289 00000 n 0000398433 00000 n 0000398577 00000 n 0000398721 00000 n 0000398864 00000 n 0000399007 00000 n 0000399151 00000 n 0000399236 00000 n 0000399380 00000 n 0000399523 00000 n 0000399667 00000 n 0000399810 00000 n 0000399953 00000 n 0000400097 00000 n 0000400241 00000 n 0000400385 00000 n 0000400529 00000 n 0000400672 00000 n 0000400814 00000 n 0000400958 00000 n 0000401101 00000 n 0000401244 00000 n 0000401387 00000 n 0000401530 00000 n 0000401674 00000 n 0000401817 00000 n 0000401959 00000 n 0000402101 00000 n 0000402183 00000 n 0000402327 00000 n 0000402470 00000 n 0000402614 00000 n 0000402758 00000 n 0000402902 00000 n 0000403046 00000 n 0000403190 00000 n 0000403334 00000 n 0000403478 00000 n 0000403622 00000 n 0000403766 00000 n 0000403910 00000 n 0000404054 00000 n 0000404197 00000 n 0000404341 00000 n 0000404485 00000 n 0000404629 00000 n 0000404773 00000 n 0000404917 00000 n 0000405061 00000 n 0000405204 00000 n 0000405348 00000 n 0000405492 00000 n 0000405636 00000 n 0000405780 00000 n 0000405924 00000 n 0000406068 00000 n 0000406212 00000 n 0000406356 00000 n 0000406500 00000 n 0000406644 00000 n 0000406788 00000 n 0000406932 00000 n 0000407075 00000 n 0000407216 00000 n 0000409509 00000 n 0000409532 00000 n 0000410139 00000 n 0000410356 00000 n 0000410499 00000 n 0000410581 00000 n 0000410725 00000 n 0000410869 00000 n 0000411012 00000 n 0000411156 00000 n 0000411300 00000 n 0000411444 00000 n 0000411588 00000 n 0000411731 00000 n 0000411874 00000 n 0000412017 00000 n 0000412160 00000 n 0000412304 00000 n 0000412447 00000 n 0000412590 00000 n 0000412734 00000 n 0000412878 00000 n 0000413022 00000 n 0000413166 00000 n 0000414418 00000 n 0000414441 00000 n 0000414634 00000 n 0000414851 00000 n 0000415193 00000 n 0000415215 00000 n 0000415413 00000 n 0000415495 00000 n 0000415579 00000 n 0000415664 00000 n 0000415749 00000 n 0000415834 00000 n 0000415919 00000 n 0000416004 00000 n 0000416089 00000 n 0000416174 00000 n 0000416259 00000 n 0000416340 00000 n 0000453952 00000 n 0000416529 00000 n 0000416446 00000 n 0000416643 00000 n 0000417754 00000 n 0000416790 00000 n 0000417590 00000 n 0000417010 00000 n 0000417414 00000 n 0000417206 00000 n 0000418578 00000 n 0000417990 00000 n 0000418378 00000 n 0000418170 00000 n 0000421007 00000 n 0000418826 00000 n 0000420079 00000 n 0000419775 00000 n 0000419061 00000 n 0000419603 00000 n 0000419252 00000 n 0000420327 00000 n 0000420587 00000 n 0000420807 00000 n 0000426274 00000 n 0000421327 00000 n 0000426142 00000 n 0000421478 00000 n 0000422042 00000 n 0000421710 00000 n 0000421842 00000 n 0000423838 00000 n 0000422342 00000 n 0000423638 00000 n 0000422490 00000 n 0000423422 00000 n 0000422726 00000 n 0000423154 00000 n 0000422974 00000 n 0000424030 00000 n 0000424310 00000 n 0000425886 00000 n 0000424538 00000 n 0000424770 00000 n 0000425018 00000 n 0000425306 00000 n 0000425606 00000 n 0000427186 00000 n 0000426534 00000 n 0000426974 00000 n 0000426706 00000 n 0000432891 00000 n 0000427471 00000 n 0000432635 00000 n 0000428907 00000 n 0000427647 00000 n 0000428627 00000 n 0000427827 00000 n 0000428143 00000 n 0000428411 00000 n 0000430879 00000 n 0000429087 00000 n 0000430635 00000 n 0000429339 00000 n 0000429647 00000 n 0000429851 00000 n 0000430083 00000 n 0000430359 00000 n 0000431079 00000 n 0000432367 00000 n 0000431303 00000 n 0000431503 00000 n 0000431819 00000 n 0000432071 00000 n 0000433615 00000 n 0000433199 00000 n 0000433403 00000 n 0000433799 00000 n 0000434011 00000 n 0000434096 00000 n 0000434202 00000 n 0000434316 00000 n 0000434434 00000 n 0000434545 00000 n 0000434643 00000 n 0000435770 00000 n 0000435793 00000 n 0000435901 00000 n 0000436017 00000 n 0000436130 00000 n 0000436250 00000 n 0000436360 00000 n 0000436519 00000 n 0000436669 00000 n 0000436771 00000 n 0000436888 00000 n 0000437008 00000 n 0000437131 00000 n 0000437242 00000 n 0000437350 00000 n 0000437464 00000 n 0000437581 00000 n 0000437707 00000 n 0000437848 00000 n 0000437968 00000 n 0000438079 00000 n 0000438166 00000 n 0000438247 00000 n 0000438352 00000 n 0000438469 00000 n 0000438559 00000 n 0000438667 00000 n 0000438769 00000 n 0000438874 00000 n 0000438955 00000 n 0000439054 00000 n 0000439141 00000 n 0000439246 00000 n 0000439345 00000 n 0000439423 00000 n 0000439521 00000 n 0000439641 00000 n 0000439746 00000 n 0000439851 00000 n 0000439974 00000 n 0000440091 00000 n 0000440166 00000 n 0000440310 00000 n 0000440400 00000 n 0000440490 00000 n 0000440583 00000 n 0000440694 00000 n 0000440799 00000 n 0000440907 00000 n 0000441009 00000 n 0000441107 00000 n 0000441205 00000 n 0000441346 00000 n 0000441481 00000 n 0000441577 00000 n 0000441664 00000 n 0000441769 00000 n 0000441868 00000 n 0000441946 00000 n 0000442042 00000 n 0000442132 00000 n 0000442231 00000 n 0000442339 00000 n 0000442453 00000 n 0000442579 00000 n 0000442699 00000 n 0000442777 00000 n 0000442873 00000 n 0000442963 00000 n 0000443062 00000 n 0000443180 00000 n 0000443267 00000 n 0000443376 00000 n 0000443455 00000 n 0000443545 00000 n 0000443641 00000 n 0000443746 00000 n 0000443863 00000 n 0000443962 00000 n 0000444062 00000 n 0000444143 00000 n 0000444251 00000 n 0000444368 00000 n 0000444485 00000 n 0000444642 00000 n 0000444756 00000 n 0000444876 00000 n 0000445029 00000 n 0000445122 00000 n 0000445233 00000 n 0000445338 00000 n 0000445434 00000 n 0000445534 00000 n 0000445645 00000 n 0000445774 00000 n 0000445897 00000 n 0000446023 00000 n 0000446158 00000 n 0000446287 00000 n 0000446394 00000 n 0000446499 00000 n 0000446598 00000 n 0000446718 00000 n 0000446823 00000 n 0000446925 00000 n 0000447046 00000 n 0000447160 00000 n 0000447253 00000 n 0000447365 00000 n 0000447470 00000 n 0000447551 00000 n 0000447650 00000 n 0000447743 00000 n 0000447854 00000 n 0000447959 00000 n 0000448043 00000 n 0000448145 00000 n 0000448241 00000 n 0000448315 00000 n 0000448411 00000 n 0000448489 00000 n 0000448585 00000 n 0000448675 00000 n 0000448756 00000 n 0000448840 00000 n 0000448943 00000 n 0000449039 00000 n 0000449139 00000 n 0000449232 00000 n 0000449325 00000 n 0000449406 00000 n 0000449561 00000 n 0000449719 00000 n 0000449842 00000 n 0000449974 00000 n 0000450085 00000 n 0000450177 00000 n 0000450282 00000 n 0000450375 00000 n 0000450453 00000 n 0000450558 00000 n 0000450675 00000 n 0000450761 00000 n 0000452889 00000 n 0000453332 00000 n 0000454008 00000 n trailer << /Root 1907 0 R /Info 1 0 R /ID [<1A402009738E5B25E18CCB73EBF1E9FF> <1A402009738E5B25E18CCB73EBF1E9FF>] /Size 1910 >> startxref 454048 %%EOF systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.xml000066400000000000000000000027351356460210500277430ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Tips_Tricks.xml000066400000000000000000000012121356460210500251240ustar00rootroot00000000000000 Tips and Tricks - This chapter covers miscellaneous tips/tricks - This is a tentative section, and will only be included if content can be provided - add use of exit() here - add "basic constructs" here; that is, using if/else, while loops, for loops, examples; if done, consider moving up to before Useful_SystemTap_Scripts.xm, after Understanding_How_SystemTap_Works.xml systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Understanding_How_SystemTap_Works.xml000066400000000000000000000200141356460210500315070ustar00rootroot00000000000000 Understanding How SystemTap Works Short summary; probes, handlers, events Understanding How SystemTap Works SystemTap allows users to write and reuse simple scripts to deeply examine the activities of a running Linux system. These scripts can be designed to extract data, filter it, and summarize it quickly (and safely), enabling the diagnosis of complex performance (or even functional) problems. Understanding How SystemTap Works events and handlers events and handlers handlers and events The essential idea behind a SystemTap script is to name events, and to give them handlers. When SystemTap runs the script, SystemTap monitors for the event; once the event occurs, the Linux kernel then runs the handler as a quick sub-routine, then resumes. Understanding How SystemTap Works event types event types Understanding How SystemTap Works There are several kind of events; entering/exiting a function, timer expiration, session termination, etc. A handler is a series of script language statements that specify the work to be done whenever the event occurs. This work normally includes extracting data from the event context, storing them into internal variables, and printing results.

    Architecture ** add diagram, describe architecture, enumerate common tools ** architecture diagram must be simpler, if at all included ** add design advantages? e.g. "building kmods on-the-fly allows safer execution of script etc etc" Understanding How SystemTap Works architecture architecture of SystemTap SystemTap architecture A SystemTap session begins when you run a SystemTap script. This session occurs in the following fashion: SystemTap Session Understanding How SystemTap Works SystemTap sessions SystemTap sessions sessions, SystemTap First, SystemTap checks the script against the existing tapset library (normally in /usr/share/systemtap/tapset/ for any tapsets used. SystemTap will then substitute any located tapsets with their corresponding definitions in the tapset library. SystemTap then translates the script to C, running the system C compiler to create a kernel module from it. The tools that perform this step are contained in the systemtap package (refer to for more information). SystemTap loads the module, then enables all the probes (events and handlers) in the script. The staprun in the systemtap-runtime package (refer to for more information) provides this functionality. As the events occur, their corresponding handlers are executed. Once the SystemTap session is terminated, the probes are disabled, and the kernel module is unloaded. This sequence is driven from a single command-line program: stap. This program is SystemTap's main front-end tool. For more information about stap, refer to man stap (once SystemTap is properly installed on your machine).
    Tapsets Tapsets definition of definition, significance, difference with stap scripts (previous section), library of tapsets in system: location Tapsets are scripts that form a library of pre-written probes and functions to be used in SystemTap scripts. When a user runs a SystemTap script, SystemTap checks the script's probe events and handlers against the tapset library; SystemTap then loads the corresponding probes and functions before translating the script to C (refer to for information on what transpires in a SystemTap session). Like SystemTap scripts, tapsets use the file name extension .stp. The standard library of tapsets is located in /usr/share/systemtap/tapset/ by default. However, unlike SystemTap scripts, tapsets are not meant for direct execution; rather, they constitute the library from which other scripts can pull definitions. The tapset library is an abstraction layer designed to make it easier for users to define events and functions. Tapsets provide useful aliases for functions that users may want to specify as an event; knowing the proper alias to use is, for the most part, easier than remembering specific kernel functions that might vary between kernel versions. Several handlers and functions in and are defined in tapsets. For example, thread_indent() is defined in indent.stp. any other details to be included? i dont want to dwell too long here, though, since IMHO tapset development is beyond the scope of this "beginner's guide"
    systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Advanced_Scripts.xml000066400000000000000000000030041356460210500274260ustar00rootroot00000000000000 Useful SystemTap Scripts This chapter contains several advanced applications of SystemTap. The scripts enumerated herein combine SystemTap scripts with other tools in order to address some complex administrative tasks. All of these scripts are available at the following link: http://sourceware.org/systemtap/wiki/WarStories?action=fullsearch&context=180&value=traceio2&titlesearch=Titles Due to the relative length of the scripts discussed in this chapter, the full version of each script is documented in . this chapter will feature the following scripts: http://sourceware.org/systemtap/wiki/WSPSTimeouts?highlight=((WarStories)) http://sourceware.org/systemtap/wiki/WSPfiles?highlight=((WarStories)) http://sourceware.org/systemtap/wiki/WSPSTimeouts?highlight=%28%28WarStories%29%29 WAIT http://sourceware.org/systemtap/wiki/WSPanicOnOom?highlight=((WarStories)) http://sourceware.org/systemtap/wiki/WSPfiles?highlight=((WarStories)) systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Disk.xml000066400000000000000000000110271356460210500265350ustar00rootroot00000000000000
    Real-Time Graphing of Disk and CPU Utilization http://sourceware.org/systemtap/examples/subsystem-index.html Graphing Disk and CPU Utilization - http://sourceware.org/systemtap/examples/general/graphs.stp This section describes how you can graph disk and CPU utilization in real-time, that is, in samples of 1 second each. disk-usage-graph.stp #! stap # disk I/O stats probe begin { qnames["ioblock"] ++; qsq_start ("ioblock") } probe ioblock.request { qs_wait ("ioblock") qs_run("ioblock") } probe ioblock.end { qs_done ("ioblock") } # CPU utilization probe begin { qnames["cpu"] ++; qsq_start ("cpu") } probe scheduler.cpu_on { if (!idle) {qs_wait ("cpu") qs_run ("cpu") }} probe scheduler.cpu_off { if (!idle) qs_done ("cpu") } # ------------------------------------------------------------------------ # utilization history tracking global N probe begin { N = 50 } global qnames, util, histidx function qsq_util_reset(q) { u=qsq_utilization (q, 100) qsq_start (q) return u } probe timer.ms(100) { # collect utilization percentages frequently histidx = (histidx + 1) % N # into circular buffer foreach (q in qnames) util[histidx,q] = qsq_util_reset(q) } # ------------------------------------------------------------------------ # general gnuplot graphical report generation probe timer.ms(1000) { # emit gnuplot command to display recent history printf ("set yrange [0:100]\n") printf ("plot ") foreach (q in qnames+) { if (++nq >= 2) printf (", ") printf ("'-' title \"%s\" with lines", q) } printf ("\n") foreach (q in qnames+) { for (i = (histidx + 1) % N; i != histidx; i = (i + 1) % N) printf("%d\n", util[i,q]) printf ("e\n") } printf ("pause 1\n") } outputs raw statistics on both CPU and disk usage per second. I/O usage is tracked through the events ioblock.request and ioblock.request.end, which track each request (and request completion) for a generic block I/O. CPU usage is tracked through scheduler.cpu_on and scheduler.cpu_off, which are activated whenever a process begins (and ends) a command execution on a CPU.
    gnuplot Running by itself hardly presents any data that is useful, as in . Raw disk-usage-graph.stp Output [...] 62 5 3 4 6 4 4 5 5 3 6 5 e pause 1 However, refining the output of through gnuplot presents us with a more useful result. gnuplot is a lightweight, command-line driven plotting program that helps you display data in a graphical format. By piping output to gnuplot (as in stap disk-usage-gr http://sourceware.org/systemtap/examples/subsystem-index.html Graphing Disk and CPU Utilization - http://sourceware.org/systemtap/examples/general/graphs.stp aph.stp | gnuplot), we get a graphical output similar to the following:
    Graphical Output Sample Sample output
presents a cleaner, more useful graphical output. This graph can show you the level of utilization for both I/O and CPU, in real time. question: does this script also capture stap process? that is, does the graph also include CPU utilization by systemtap while the script is running? systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-IO.xml000066400000000000000000000014571356460210500261600ustar00rootroot00000000000000
I/O Subsystem http://sourceware.org/systemtap/examples/subsystem-index.html Tally Reschedule Reason During AIO io_submit Call - http://sourceware.org/systemtap/examples/io/io_submit.stp Periodically Print I/O Activity by Process Name - http://sourceware.org/systemtap/examples/io/iotop.stp Track Cumulative I/O Activity by Process Name - http://sourceware.org/systemtap/examples/io/traceio.stp Watch I/O Activity on a Particular Device http://sourceware.org/systemtap/examples/io/traceio2.stp
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Kernel.xml000066400000000000000000000014151356460210500270630ustar00rootroot00000000000000
Kernel http://sourceware.org/systemtap/examples/subsystem-index.html Tracing Calls for Sections of Code - http://sourceware.org/systemtap/examples/general/para-callgraph.stp Profile kernel functions - http://sourceware.org/systemtap/examples/process/pf2.stp Count Times Functions Called - http://sourceware.org/systemtap/examples/profiling/functioncallcount.stp Profile kernel functions - http://sourceware.org/systemtap/examples/profiling/thread-times.stp
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Network.xml000066400000000000000000000011001356460210500272630ustar00rootroot00000000000000
Network http://sourceware.org/systemtap/examples/subsystem-index.html Periodic Listing of Processes Using Network Interfaces - http://sourceware.org/systemtap/examples/network/nettop.stp Trace Functions called in Network Socket Code - http://sourceware.org/systemtap/examples/network/socket-trace.stp
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Others.xml000066400000000000000000000013331356460210500271060ustar00rootroot00000000000000
Other Useful Scripts http://sourceware.org/systemtap/examples/subsystem-index.html SCHEDULER - Generating Backtraces of Threads Waiting for IO Operations - http://sourceware.org/systemtap/examples/process/sleepingBeauties.stp LOCKING - System-Wide Futex Contention - http://sourceware.org/systemtap/examples/process/futexes.stp CPU - Graphing Disk and CPU Utilization - http://sourceware.org/systemtap/examples/general/graphs.stp
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Signals.xml000066400000000000000000000014101356460210500272360ustar00rootroot00000000000000
Signals http://sourceware.org/systemtap/examples/subsystem-index.html Signal Counts by Process ID - http://sourceware.org/systemtap/examples/process/sig_by_pid.stp Signal Counts by Process Name - http://sourceware.org/systemtap/examples/process/sig_by_proc.stp Track SIGKILL Signals - http://sourceware.org/systemtap/examples/process/sigkill.stp System-Wide Count of Syscalls by PID - http://sourceware.org/systemtap/examples/process/syscalls_by_pid.stp
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Syscalls.xml000066400000000000000000000016701356460210500274430ustar00rootroot00000000000000
System Calls http://sourceware.org/systemtap/examples/subsystem-index.html Trace Time Spent in Read and Write for Files - http://sourceware.org/systemtap/examples/io/iotime.stp Trace Time Spent in nanosleep Syscalls - http://sourceware.org/systemtap/examples/process/sleeptime.stp System-Wide Count of Syscalls by PID - http://sourceware.org/systemtap/examples/process/syscalls_by_pid.stp System-Wide Count of Syscalls by Executable - http://sourceware.org/systemtap/examples/process/syscalls_by_proc.stp Trace Time Spent in wait4 Syscalls - http://sourceware.org/systemtap/examples/process/wait4time.stp
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-disktop.xml000066400000000000000000000163121356460210500273220ustar00rootroot00000000000000
Summarizing Disk Read/Write Traffic script examples summarizing disk I/O traffic examples of SystemTap scripts summarizing disk I/O traffic summarizing disk I/O traffic script examples NO ENTRY IN WAR STORIES: Summarize Disk Read/Write Traffic http://sourceware.org/systemtap/examples/io/disktop.stp disk I/O traffic, summarizing script examples I/O traffic, summarizing script examples heaviest disk reads/writes, identifying script examples summarizing disk I/O traffic script examples identifying heaviest disk reads/writes script examples This section describes how to identify which processes are performing the heaviest disk reads/writes to the system. disktop.stp outputs the top ten processes responsible for the heaviest reads/writes to disk. displays a sample output for this script, and includes the following data per listed process: UID — user ID. A user ID of 0 refers to the root user. PID — the ID of the listed process. PPID — the process ID of the listed process's parent process. CMD — the name of the listed process. DEVICE — which storage device the listed process is reading from or writing to. T — the type of action performed by the listed process; W refers to write, while R refers to read. BYTES — the amount of data read to or written from disk. script examples ctime(), example of usage examples of SystemTap scripts ctime(), example of usage ctime(), example of usage script examples The time and date in the output of is returned by the functions ctime() and gettimeofday_s(). ctime() derives calendar time in terms of seconds passed since the Unix epoch (January 1, 1970). gettimeofday_s() counts the actual number of seconds since Unix epoch, which gives a fairly accurate human-readable timestamp for the output. local variables sample usage $return variables (local) sample usage $return $return sample usage local variables In this script, the $return is a local variable that stores the actual number of bytes each process reads or writes from the virtual file system. $return can only be used in return probes (for example, vfs.read.return and vfs.read.return). <xref linkend="scriptdisktop"/> Sample Output [...] Mon Sep 29 03:38:28 2008 , Average: 19Kb/sec, Read: 7Kb, Write: 89Kb UID PID PPID CMD DEVICE T BYTES 0 26319 26294 firefox sda5 W 90229 0 2758 2757 pam_timestamp_c sda5 R 8064 0 2885 1 cupsd sda5 W 1678 Mon Sep 29 03:38:38 2008 , Average: 1Kb/sec, Read: 7Kb, Write: 1Kb UID PID PPID CMD DEVICE T BYTES 0 2758 2757 pam_timestamp_c sda5 R 8064 0 2885 1 cupsd sda5 W 1678
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-dropwatch.xml000066400000000000000000000102421356460210500276340ustar00rootroot00000000000000
Monitoring Network Packets Drops in Kernel script examples network profiling examples of SystemTap scripts network profiling network profiling examples of SystemTap scripts profiling the network examples of SystemTap scripts network traffic, monitoring examples of SystemTap scripts tracepoint The network stack in Linux can discard packets for various reasons. Some Linux kernels include a tracepoint, kernel.trace("kfree_skb"), which easily tracks where packets are discarded. uses kernel.trace("kfree_skb") to trace packet discards; the script summarizes which locations discard packets every five-second interval. dropwatch.stp The kernel.trace("kfree_skb") traces which places in the kernel drop network packets. The kernel.trace("kfree_skb") has two arguments: a pointer to the buffer being freed ($skb) and the location in kernel code the buffer is being freed ($location). The script provides the function containing $location where possible. The information to map $location back to the function is not in the instrumentation by default. On SystemTap 1.4 the --all-modules option will include the required mapping information and the following command can be used to run the script: stap --all-modules dropwatch.stp On older versions of SystemTap you can use the following command to emulate the --all-modules option: stap -dkernel \ `cat /proc/modules | awk 'BEGIN { ORS = " " } {print "-d"$1}'` \ dropwatch.stp Running the dropwatch.stp script 15 seconds would result in output similar in . The output lists the number of misses for each tracepoint location with either the function name or the address. <xref linkend="dropwatch"/> Sample Output Monitoring for dropped packets 1762 packets dropped at unix_stream_recvmsg 4 packets dropped at tun_do_read 2 packets dropped at nf_hook_slow 467 packets dropped at unix_stream_recvmsg 20 packets dropped at nf_hook_slow 6 packets dropped at tun_do_read 446 packets dropped at unix_stream_recvmsg 4 packets dropped at tun_do_read 4 packets dropped at nf_hook_slow Stopping dropped packet monitor When the script is being compiled on one machine and run on another the --all-modules and /proc/modules directory are not available; the symname function will just print out the raw address. To make the raw address of packet drops more meaningful, refer to the /boot/System.map-`uname -r` file. This file lists the starting addresses for each function, allowing you to map the addresses in the output of to a specific function name. Given the following snippet of the /boot/System.map-`uname -r` file, the address 0xffffffff8149a8ed maps to the function unix_stream_recvmsg: [...] ffffffff8149a420 t unix_dgram_poll ffffffff8149a5e0 t unix_stream_recvmsg ffffffff8149ad00 t unix_find_other [...]
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-functioncalls.xml000066400000000000000000000065351356460210500305170ustar00rootroot00000000000000
Counting Function Calls Made script examples tallying function calls examples of SystemTap scripts tallying function calls tallying function calls examples of SystemTap scripts counting function calls examples of SystemTap scripts function calls, tallying examples of SystemTap scripts WAR STORY: Function call count http://sourceware.org/systemtap/wiki/WSFunctionCallCount?highlight=((WarStories)) no script in examples This section describes how to identify how many times the system called a specific kernel function in a 30-second sample. Depending on the use of wildcards, you can also use this script to target multiple kernel functions. functioncallcount.stp takes the targeted kernel function as an argument. The argument supports wildcards, which enables you to target multiple kernel functions up to a certain extent. script examples timer.ms(), sample usage examples of SystemTap scripts timer.ms(), sample usage timer.ms(), sample usage examples of SystemTap scripts The output of contains the name of the function called and how many times it was called during the sample time (in alphabetical order). contains an excerpt from the output of stap functioncallcount.stp "*@mm/*.c": <xref linkend="countcalls"/> Sample Output [...] __vma_link 97 __vma_link_file 66 __vma_link_list 97 __vma_link_rb 97 __xchg 103 add_page_to_active_list 102 add_page_to_inactive_list 19 add_to_page_cache 19 add_to_page_cache_lru 7 all_vm_events 6 alloc_pages_node 4630 alloc_slabmgmt 67 anon_vma_alloc 62 anon_vma_free 62 anon_vma_lock 66 anon_vma_prepare 98 anon_vma_unlink 97 anon_vma_unlock 66 arch_get_unmapped_area_topdown 94 arch_get_unmapped_exec_area 3 arch_unmap_area_topdown 97 atomic_add 2 atomic_add_negative 97 atomic_dec_and_test 5153 atomic_inc 470 atomic_inc_and_test 1 [...]
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-futexes.xml000066400000000000000000000117151356460210500273320ustar00rootroot00000000000000
Identifying Contended User-Space Locks script examples identifying contended user-space locks (futex contentions) examples of SystemTap scripts identifying contended user-space locks (futex contentions) identifying contended user-space locks (futex contentions) examples of SystemTap scripts contended user-space locks (futex contentions), identifying examples of SystemTap scripts WAR STORY: Futex contention http://sourceware.org/systemtap/wiki/WSFutexContention?highlight=((WarStories)) This section describes how to identify contended user-space locks throughout the system within a specific time period. The ability to identify contended user-space locks can help you investigate poor program performance that you suspect may be caused by futex contentions. futex contentions, identifying examples of SystemTap scripts futex contention, definition examples of SystemTap scripts script examples futex (lock) contentions examples of SystemTap scripts futex (lock) contentions futex (lock) contentions examples of SystemTap scripts Simply put, futex contention occurs when multiple processes are trying to access the same lock variable at the same time. This can result in a poor performance because the lock serializes execution; one process obtains the lock while the other processes must wait for the lock variable to become available again. script examples futex system call examples of SystemTap scripts futex system call futex system call examples of SystemTap scripts The script probes the futex system call to show lock contention. futexes.stp needs to be manually stopped; upon exit, it prints the following information: Name and ID of the process responsible for a contention The location of the contested lock variable How many times the lock variable was contended Average time of contention throughout the probe contains an excerpt from the output of upon exiting the script (after approximately 20 seconds). <xref linkend="futexcontention"/> Sample Output [...] automount[2825] lock 0x00bc7784 contended 18 times, 999931 avg us synergyc[3686] lock 0x0861e96c contended 192 times, 101991 avg us synergyc[3758] lock 0x08d98744 contended 192 times, 101990 avg us synergyc[3938] lock 0x0982a8b4 contended 192 times, 101997 avg us [...]
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-inodewatch.xml000066400000000000000000000122531356460210500277720ustar00rootroot00000000000000
Monitoring Reads and Writes to a File script examples monitoring reads and writes to a file examples of SystemTap scripts monitoring reads and writes to a file monitoring reads and writes to a file examples of SystemTap scripts file reads/writes, monitoring examples of SystemTap scripts reads/writes to a file, monitoring examples of SystemTap scripts writes/reads to a file, monitoring examples of SystemTap scripts WAR STORY: monitoring inode activity http://sourceware.org/systemtap/wiki/WSFileMonitor?highlight=((WarStories)) no script in examples This section describes how to monitor reads from and writes to a file in real time. inodewatch.stp need to add references to sources/man pages that explain how "dev_nr = $file->f_dentry->d_inode->i_sb->s_dev" and "($1 << 20 | $2)". takes the following information about the file as arguments on the command line: script examples file device number (integer format) examples of SystemTap scripts file device number (integer format) file device number (integer format) examples of SystemTap scripts device number of a file (integer format) examples of SystemTap scripts The file's major device number. The file's minor device number. The file's inode number. script examples stat -c, determining file device number (integer format) examples of SystemTap scripts stat -c, determining file device number (integer format) stat -c, determining file device number (integer format) examples of SystemTap scripts To get this information, use stat -c '%D %i' filename, where filename is an absolute path. For instance: to monitor /etc/crontab, run stat -c '%D %i' /etc/crontab first. This gives the following output: 805 1078319 script examples inode number examples of SystemTap scripts inode number inode number examples of SystemTap scripts 805 is the base-16 (hexadecimal) device number. The lower two digits are the minor device number and the upper digits are the major number. 1078319 is the inode number. To start monitoring /etc/crontab, run stap inodewatch.stp 0x8 0x05 1078319 (The 0x prefixes indicate base-16 values. The output of this command contains the name and ID of any process performing a read/write, the function it is performing (that is, vfs_read or vfs_write), the device number (in hex format), and the inode number. contains the output of stap inodewatch.stp 0x8 0x05 1078319 (when cat /etc/crontab is executed while the script is running) : <xref linkend="inodewatch"/> Sample Output cat(16437) vfs_read 0x800005/1078319 cat(16437) vfs_read 0x800005/1078319
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-inodewatch2.xml000066400000000000000000000057141356460210500300600ustar00rootroot00000000000000
Monitoring Changes to File Attributes script examples monitoring changes to file attributes examples of SystemTap scripts monitoring changes to file attributes monitoring changes to file attributes examples of SystemTap scripts changes to file attributes, monitoring examples of SystemTap scripts file attributes, monitoring changes to examples of SystemTap scripts WAR STORY: monitoring more inode activity http://sourceware.org/systemtap/wiki/WSFileMonitor2?highlight=((WarStories)) no script in examples This section describes how to monitor if any processes are changing the attributes of a targeted file, in real time. inodewatch2.stp Like from , takes the targeted file's device number (in integer format) and inode number as arguments. For more information on how to retrieve this information, refer to . The output for is similar to that of , except that also contains the attribute changes to the monitored file, as well as the ID of the user responsible (uid()). shows the output of while monitoring /home/joe/bigfile when user joe executes chmod 777 /home/joe/bigfile and chmod 666 /home/joe/bigfile. <xref linkend="inodewatch2"/> Sample Output chmod(17448) inode_setattr 0x800005/6011835 100777 500 chmod(17449) inode_setattr 0x800005/6011835 100666 500
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-ioblktime.xml000066400000000000000000000066531356460210500276330ustar00rootroot00000000000000
Periodically Print I/O Block Time script examples monitoring I/O block time examples of SystemTap scripts monitoring I/O block time monitoring I/O block time examples of SystemTap scripts I/O block time, monitoring examples of SystemTap scripts printing I/O block time (periodically) examples of SystemTap scripts This section describes how to track the amount of time each block I/O requests spends waiting for completion. This is useful in determining whether there are too many outstanding block I/O operations at any given time. ioblktime.stp computes the average waiting time for block I/O per device, and prints a list every 10 seconds. As always, you can revise this refresh rate by editing the specified value in probe timer.s(10), end {. In some cases, there can be too many outstanding block I/O operations, at which point the script can exceed the default number of MAXMAPENTRIES. MAXMAPENTRIES is the maximum number of rows in an array if the array size is not specified explicitly when declared. If the script exceeds the default MAXMAPENTRIES value of 2048, run the script again with the stap option -DMAXMAPENTRIES=10000. <xref linkend="ioblktime"/> Sample Output device rw total (us) count avg (us) sda W 9659 6 1609 dm-0 W 20278 6 3379 dm-0 R 20524 5 4104 sda R 19277 5 3855 displays the device name, operations performed (rw), total wait time of all operations (total(us)), number of operations (count), and average wait time for all those operations (avg (us)). The times tallied by the script are in microseconds.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-iotime.xml000066400000000000000000000123231356460210500271310ustar00rootroot00000000000000
Tracking I/O Time For Each File Read or Write script examples monitoring I/O time examples of SystemTap scripts monitoring I/O time monitoring I/O time examples of SystemTap scripts I/O time, monitoring examples of SystemTap scripts time of I/O examples of SystemTap scripts This section describes how to monitor the amount of time it takes for each process to read from or write to any file. This is useful to determine what files are slow to load on a given system. iotime.stp tracks each time a system call opens, closes, reads from, and writes to a file. For each file any system call accesses, counts the number of microseconds it takes for any reads or writes to finish and tracks the amount of data (in bytes) read from or written to the file. local variables sample usage $count variables (local) sample usage $count $count sample usage local variables also uses the local variable $count to track the amount of data (in bytes) that any system call attempts to read or write. Note that $return (as used in from ) stores the actual amount of data read/written. $count can only be used on probes that track data reads or writes (that is, syscall.read and syscall.write). <xref linkend="iotime"/> Sample Output [...] 825946 3364 (NetworkManager) access /sys/class/net/eth0/carrier read: 8190 write: 0 825955 3364 (NetworkManager) iotime /sys/class/net/eth0/carrier time: 9 [...] 117061 2460 (pcscd) access /dev/bus/usb/003/001 read: 43 write: 0 117065 2460 (pcscd) iotime /dev/bus/usb/003/001 time: 7 [...] 3973737 2886 (sendmail) access /proc/loadavg read: 4096 write: 0 3973744 2886 (sendmail) iotime /proc/loadavg time: 11 [...] prints out the following data: A timestamp, in microseconds. Process ID and process name. An access or iotime flag. The file accessed. If a process was able to read or write any data, a pair of access and iotime lines should appear together. The access line's timestamp refers to the time that a given process started accessing a file; at the end of the line, it will show the amount of data read/written (in bytes). The iotime line will show the amount of time (in microseconds) that the process took in order to perform the read or write. If an access line is not followed by an iotime line, it means that the process did not read or write any data.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-iotop.xml000066400000000000000000000070011356460210500267720ustar00rootroot00000000000000
Periodically Print I/O Activity script examples monitoring I/O activity examples of SystemTap scripts monitoring I/O activity monitoring I/O activity examples of SystemTap scripts I/O activity, monitoring examples of SystemTap scripts printing I/O activity (periodically) examples of SystemTap scripts This section describes how to monitor I/O activity on the system. iotop.stp prints out the top ten executables generating I/O traffic every 5-second interval, in descending order. Its output contains the process name and the amount of data read or written by the process, in KB. For example: <xref linkend="iotop"/> Sample Output [...] Process KB Read KB Written Xorg 50287 0 staprun 3328 0 multiload-apple 3039 23 sshd 208 1 floaters 14 62 NetworkManager 15 0 gnome-vfs-daemo 8 0 cupsd 3 3 sendmail 4 0 mixer_applet2 3 0 Process KB Read KB Written Xorg 51886 0 staprun 3328 0 multiload-apple 3039 23 sshd 1344 4 snmpd 90 0 floaters 15 66 NetworkManager 23 0 irqbalance 16 0 pam_timestamp_c 9 0 sendmail 4 0 displays top I/O writes and reads within a random 10-second interval. Note that also detects I/O resulting from SystemTap activity — displays reads done by staprun.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-kernelprofiling.xml000066400000000000000000000101741356460210500310370ustar00rootroot00000000000000
Kernel Profiling WAR STORY: Kernel Profiling http://sourceware.org/systemtap/wiki/WSKernelProfile?highlight=((WarStories)) http://sourceware.org/systemtap/examples/process/pf2.stp In , you can revise the wildcards used in the probe to target all kernel functions. This can be useful if you are interested in indentifying what the kernel is performing over a specific time period. However, doing so can cause considerable stress on the machine. In addition, this does not provide any indication of whether a specific function is being called too often during small time increments. This section describes how to profile the kernel properly. does this by providing a list of the top ten kernel functions called within a specific time period, and how many times each function was called during that time. kernelprof.stp #! /usr/bin/env stap global profile, pcount probe timer.profile { pcount <<< 1 fn = probefunc () if (fn != "") profile[fn] <<< 1 } probe timer.ms(5000) { printf ("\n--- %d samples recorded:\n", @count(pcount)) foreach (f in profile- limit 10) { printf ("%-30s\t%6d\n", f, @count(profile[f])) } delete profile delete pcount } records and outputs kernel functions called every 5 seconds. You can change this setting by editing probe timer.ms(5000) accordingly. contains an excerpt of the output over a 20-second period: <xref linkend="kernelprof"/> Sample Output [...] --- 10002 samples recorded: sys_recvfrom 1 memmove 1 __copy_from_user_ll 17 __copy_to_user_ll 15 mwait_idle 5868 link_path_walk 1 kfree 1 fget_light 1 audit_syscall_exit 1 __d_lookup 1 --- 10002 samples recorded: sysfs_read_file 1 free_poll_entry 1 syscall_exit_work 1 profile_hit 1 do_page_fault 2 _read_lock 3 kmap_atomic 4 strncpy_from_user 1 find_vma_prepare 1 __copy_from_user_ll 12 --- 10000 samples recorded: system_call 4 unix_stream_sendmsg 1 __d_path 1 do_page_fault 2 kmap_atomic 1 find_vma 1 __copy_to_user_ll 16 __copy_from_user_ll 10 mwait_idle 5759 memcpy_fromiovec 1 --- 10004 samples recorded: syscall_exit 1 __d_path 1 fput 2 do_page_fault 4 strncpy_from_user 1 may_open 1 ide_outb 1 ide_outsw 1 __copy_to_user_ll 11 __copy_from_user_ll 14 [...] allows you to identify interesting kernel-specific performance facts about the system, such as kernel-intensive workloads and idle times (in this case, mwait_idle. Note that does not count user-space functions, although it counts all kernel functions as part of the sample (even if the script cannot identify from which specific kernel function a call originated.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-nettop.xml000066400000000000000000000141321356460210500271540ustar00rootroot00000000000000
Network Profiling script examples network profiling examples of SystemTap scripts network profiling network profiling examples of SystemTap scripts WAR STORY: Top network users by PID http://sourceware.org/systemtap/wiki/WSNetTop?highlight=((WarStories)) probably http://sourceware.org/systemtap/examples/network/nettop.stp profiling the network examples of SystemTap scripts network traffic, monitoring examples of SystemTap scripts This section describes how to profile network activity. provides a glimpse into how much network traffic each process is generating on a machine. nettop.stp script examples if/else conditionals, alternative syntax examples of SystemTap scripts if/else conditionals, alternative syntax if/else conditionals, alternative syntax examples of SystemTap scripts Note that function print_activity() uses the following expressions: n_xmit ? @sum(ifxmit[pid, dev, exec, uid])/1024 : 0 n_recv ? @sum(ifrecv[pid, dev, exec, uid])/1024 : 0 These expressions are if/else conditionals. The first statement is a more concise way of writing the following psuedo code: if n_recv != 0 then @sum(ifrecv[pid, dev, exec, uid])/1024 else 0 tracks which processes are generating network traffic on the system, and provides the following information about each process: PID — the ID of the listed process. UID — user ID. A user ID of 0 refers to the root user. DEV — which ethernet device the process used to send / receive data (for example, eth0, eth1) XMIT_PK — number of packets transmitted by the process RECV_PK — number of packets received by the process XMIT_KB — amount of data sent by the process, in kilobytes RECV_KB — amount of data received by the service, in kilobytes provides network profile sampling every 5 seconds. You can change this setting by editing probe timer.ms(5000) accordingly. contains an excerpt of the output from over a 20-second period: <xref linkend="nettop"/> Sample Output [...] PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 0 0 eth0 0 5 0 0 swapper 11178 0 eth0 2 0 0 0 synergyc PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 2886 4 eth0 79 0 5 0 cups-polld 11362 0 eth0 0 61 0 5 firefox 0 0 eth0 3 32 0 3 swapper 2886 4 lo 4 4 0 0 cups-polld 11178 0 eth0 3 0 0 0 synergyc PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 0 0 eth0 0 6 0 0 swapper 2886 4 lo 2 2 0 0 cups-polld 11178 0 eth0 3 0 0 0 synergyc 3611 0 eth0 0 1 0 0 Xorg PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 0 0 eth0 3 42 0 2 swapper 11178 0 eth0 43 1 3 0 synergyc 11362 0 eth0 0 7 0 0 firefox 3897 0 eth0 0 1 0 0 multiload-apple [...]
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-paracallgraph.xml000066400000000000000000000122421356460210500304440ustar00rootroot00000000000000
Call Graph Tracing script examples call graph tracing examples of SystemTap scripts call graph tracing call graph tracing examples of SystemTap scripts incoming/outgoing function calls, tracing examples of SystemTap scripts function calls (incoming/outgoing), tracing examples of SystemTap scripts tracing incoming/outgoing function calls examples of SystemTap scripts tracing call graph examples of SystemTap scripts WAR STORY: Call graph tracing http://sourceware.org/systemtap/wiki/WSCallGraph?highlight=((WarStories)) script: http://sourceware.org/systemtap/examples/general/para-callgraph.stp This section describes how to trace incoming and outgoing function calls. para-callgraph.stp script examples multiple command-line arguments, example of examples of SystemTap scripts multiple command-line arguments, example of multiple command-line arguments, example of examples of SystemTap scripts example of multiple command-line arguments examples of SystemTap scripts takes two command-line arguments: script examples trigger function examples of SystemTap scripts trigger function trigger function examples of SystemTap scripts The function/s whose entry/exit call you'd like to trace ($1). A second optional trigger function ($2), which enables or disables tracing on a per-thread basis. Tracing in each thread will continue as long as the trigger function has not exited yet. please verify previous if correct; i'm particularly interested in finding out how to better describe "trigger function" script examples thread_indent(), sample usage examples of SystemTap scripts thread_indent(), sample usage thread_indent(), sample usage examples of SystemTap scripts uses thread_indent(); as such, its output contains the timestamp, process name, and thread ID of $1 (that is, the probe function you are tracing). For more information about thread_indent(), refer to its entry in . The following example contains an excerpt from the output for stap para-callgraph.stp 'kernel.function("*@fs/*.c")' 'kernel.function("sys_read")': <xref linkend="scriptcallgraph"/> Sample Output [...] 267 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5 269 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5 0 gnome-terminal(2921):->fput file=0xffff880111eebbc0 2 gnome-terminal(2921):<-fput 0 gnome-terminal(2921):->fget_light fd=0x3 fput_needed=0xffff88010544df54 3 gnome-terminal(2921):<-fget_light return=0xffff8801116ce980 0 gnome-terminal(2921):->vfs_read file=0xffff8801116ce980 buf=0xc86504 count=0x1000 pos=0xffff88010544df48 4 gnome-terminal(2921): ->rw_verify_area read_write=0x0 file=0xffff8801116ce980 ppos=0xffff88010544df48 count=0x1000 7 gnome-terminal(2921): <-rw_verify_area return=0x1000 12 gnome-terminal(2921): ->do_sync_read filp=0xffff8801116ce980 buf=0xc86504 len=0x1000 ppos=0xffff88010544df48 15 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5 18 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5 0 gnome-terminal(2921):->fput file=0xffff8801116ce980
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-sockettrace.xml000066400000000000000000000104611356460210500301530ustar00rootroot00000000000000
Tracing Functions Called in Network Socket Code script examples tracing functions called in network socket code examples of SystemTap scripts tracing functions called in network socket code tracing functions called in network socket code examples of SystemTap scripts network socket code, tracing functions called in examples of SystemTap scripts functions called in network socket code, tracing examples of SystemTap scripts http://sourceware.org/systemtap/examples/network/socket-trace.stp script examples net/socket.c, tracing functions from examples of SystemTap scripts net/socket.c, tracing functions from net/socket.c, tracing functions from examples of SystemTap scripts This section describes how to trace functions called from the kernel's net/socket.c file. This task helps you identify, in finer detail, how each process interacts with the network at the kernel level. socket-trace.stp is identical to , which was earlier used in to illustrate how thread_indent() works. <xref linkend="sockettrace"/> Sample Output [...] 0 Xorg(3611): -> sock_poll 3 Xorg(3611): <- sock_poll 0 Xorg(3611): -> sock_poll 3 Xorg(3611): <- sock_poll 0 gnome-terminal(11106): -> sock_poll 5 gnome-terminal(11106): <- sock_poll 0 scim-bridge(3883): -> sock_poll 3 scim-bridge(3883): <- sock_poll 0 scim-bridge(3883): -> sys_socketcall 4 scim-bridge(3883): -> sys_recv 8 scim-bridge(3883): -> sys_recvfrom 12 scim-bridge(3883):-> sock_from_file 16 scim-bridge(3883):<- sock_from_file 20 scim-bridge(3883):-> sock_recvmsg 24 scim-bridge(3883):<- sock_recvmsg 28 scim-bridge(3883): <- sys_recvfrom 31 scim-bridge(3883): <- sys_recv 35 scim-bridge(3883): <- sys_socketcall [...] contains a 3-second excerpt of the output for . For more information about the output of this script as provided by thread_indent(), refer to .
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-syscallsbyprocpid.xml000066400000000000000000000073241356460210500314210ustar00rootroot00000000000000
Tracking System Call Volume Per Process script examples monitoring system calls (volume per process) examples of SystemTap scripts monitoring system calls (volume per process) monitoring system calls (volume per process) examples of SystemTap scripts system calls volume (per process), monitoring examples of SystemTap scripts uses systemtap/testsuite/systemtap.examples/process/syscalls_by_p*.stp This section illustrates how to determine which processes are performing the highest volume of system calls. In previous sections, we've described how to monitor the top system calls used by the system over time (). We've also described how to identify which applications use a specific set of "polling suspect" system calls the most (). Monitoring the volume of system calls made by each process provides more data in investigating your system for polling processes and other resource hogs. syscalls_by_proc.stp lists the top 20 processes performing the highest number of system calls. It also lists how many system calls each process performed during the time period. Refer to for a sample output. <xref linkend="topsys"/> Sample Output Collecting data... Type Ctrl-C to exit and display results #SysCalls Process Name 1577 multiload-apple 692 synergyc 408 pcscd 376 mixer_applet2 299 gnome-terminal 293 Xorg 206 scim-panel-gtk 95 gnome-power-man 90 artsd 85 dhcdbd 84 scim-bridge 78 gnome-screensav 66 scim-launcher [...] To display the process IDs instead of the process names, use the following script instead. syscalls_by_pid.stp As indicated in the output, you need to manually exit the script in order to display the results. You can add a timed expiration to either script by simply adding a timer.s() probe; for example, to instruct the script to expire after 5 seconds, add the following probe to the script: probe timer.s(5) { exit() }
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-tcp_connections.xml000066400000000000000000000051661356460210500310420ustar00rootroot00000000000000
Monitoring Incoming TCP Connections script examples monitoring incoming TCP connections examples of SystemTap scripts monitoring incoming TCP connections monitoring incoming TCP connections examples of SystemTap scripts TCP connections (incoming), monitoring examples of SystemTap scripts incoming TCP connections, monitoring examples of SystemTap scripts This section illustrates how to monitor incoming TCP connections. This task is useful in identifying any unauthorized, suspicious, or otherwise unwanted network access requests in real time. tcp_connections.stp While is running, it will print out the following information about any incoming TCP connections accepted by the system in real time: Current UID CMD - the command accepting the connection PID of the command Port used by the connection IP address from which the TCP connection originated <xref linkend="tcpconnections"/> Sample Output UID CMD PID PORT IP_SOURCE 0 sshd 3165 22 10.64.0.227 0 sshd 3165 22 10.64.0.227
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-tcpdumplike.xml000066400000000000000000000075611356460210500301740ustar00rootroot00000000000000
Monitoring TCP Packets script examples monitoring TCP packets examples of SystemTap scripts monitoring TCP packets monitoring TCP packets examples of SystemTap scripts TCP packets, monitoring examples of SystemTap scripts TCP packets, monitoring examples of SystemTap scripts This section illustrates how to monitor TCP packets received by the system. This is useful in analyzing network traffic generated by applications running on the system. tcpdumplike.stp While is running, it will print out the following information about any received TCP packets in real time: Source and destination IP address (saddr, daddr, respectively) Source and destination ports (sport, dport, respectively) Packet flags To determine the flags used by the packet, uses the following functions: urg - urgent ack - acknowledgement psh - push rst - reset syn - synchronize fin - finished The aforementioned functions return 1 or 0 to specify whether the packet uses the corresponding flag. <xref linkend="tcpdumplike"/> Sample Output ----------------------------------------------------------------- Source IP Dest IP SPort DPort U A P R S F ----------------------------------------------------------------- 209.85.229.147 10.0.2.15 80 20373 0 1 1 0 0 0 92.122.126.240 10.0.2.15 80 53214 0 1 0 0 1 0 92.122.126.240 10.0.2.15 80 53214 0 1 0 0 0 0 209.85.229.118 10.0.2.15 80 63433 0 1 0 0 1 0 209.85.229.118 10.0.2.15 80 63433 0 1 0 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.118 10.0.2.15 80 63433 0 1 1 0 0 0 [...]
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-threadtimes.xml000066400000000000000000000056671356460210500301710ustar00rootroot00000000000000
Determining Time Spent in Kernel and User Space script examples determining time spent in kernel and user space examples of SystemTap scripts determining time spent in kernel and user space determining time spent in kernel and user space examples of SystemTap scripts time spent in kernel/user space, determining examples of SystemTap scripts kernel and user space, determining time spent in examples of SystemTap scripts user and kernel space, determining time spent in examples of SystemTap scripts http://sourceware.org/systemtap/examples/profiling/thread-times.stp This section illustrates how to determine the amount of time any given thread is spending in either kernel or user-space. thread-times.stp script examples CPU ticks examples of SystemTap scripts CPU ticks CPU ticks examples of SystemTap scripts lists the top 20 processes currently taking up CPU time within a 5-second sample, along with the total number of CPU ticks made during the sample. The output of this script also notes the percentage of CPU time each process used, as well as whether that time was spent in kernel space or user space. contains a 5-second sample of the output for : <xref linkend="threadtimes"/> Sample Output tid %user %kernel (of 20002 ticks) 0 0.00% 87.88% 32169 5.24% 0.03% 9815 3.33% 0.36% 9859 0.95% 0.00% 3611 0.56% 0.12% 9861 0.62% 0.01% 11106 0.37% 0.02% 32167 0.08% 0.08% 3897 0.01% 0.08% 3800 0.03% 0.00% 2886 0.02% 0.00% 3243 0.00% 0.01% 3862 0.01% 0.00% 3782 0.00% 0.00% 21767 0.00% 0.00% 2522 0.00% 0.00% 3883 0.00% 0.00% 3775 0.00% 0.00% 3943 0.00% 0.00% 3873 0.00% 0.00%
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-timeout.xml000066400000000000000000000110161356460210500273270ustar00rootroot00000000000000
Monitoring Polling Applications script examples monitoring polling applications examples of SystemTap scripts monitoring polling applications monitoring polling applications examples of SystemTap scripts polling applications, monitoring examples of SystemTap scripts uses systemtap/testsuite/systemtap.examples/profiling/timeout.stp This section describes how to identify and monitor which applications are polling. Doing so allows you to track unnecessary or excessive polling, which can help you pinpoint areas for improvement in terms of CPU usage and power savings. timeout.stp tracks how many times each of the following system calls completed due to time expiring rather than due to an actual event occurring: poll select epoll itimer futex nanosleep signal script examples timer.s(), sample usage examples of SystemTap scripts timer.s(), sample usage timer.s(), sample usage examples of SystemTap scripts <xref linkend="timeouts"/> Sample Output uid | poll select epoll itimer futex nanosle signal| process 28937 | 148793 0 0 4727 37288 0 0| firefox 22945 | 0 56949 0 1 0 0 0| scim-bridge 0 | 0 0 0 36414 0 0 0| swapper 4275 | 23140 0 0 1 0 0 0| mixer_applet2 4191 | 0 14405 0 0 0 0 0| scim-launcher 22941 | 7908 1 0 62 0 0 0| gnome-terminal 4261 | 0 0 0 2 0 7622 0| escd 3695 | 0 0 0 0 0 7622 0| gdm-binary 3483 | 0 7206 0 0 0 0 0| dhcdbd 4189 | 6916 0 0 2 0 0 0| scim-panel-gtk 1863 | 5767 0 0 0 0 0 0| iscsid 2562 | 0 2881 0 1 0 1438 0| pcscd 4257 | 4255 0 0 1 0 0 0| gnome-power-man 4278 | 3876 0 0 60 0 0 0| multiload-apple 4083 | 0 1331 0 1728 0 0 0| Xorg 3921 | 1603 0 0 0 0 0 0| gam_server 4248 | 1591 0 0 0 0 0 0| nm-applet 3165 | 0 1441 0 0 0 0 0| xterm 29548 | 0 1440 0 0 0 0 0| httpd 1862 | 0 0 0 0 0 1438 0| iscsid You can increase the sample time by editing the second probe (timer.s(1)). The output of contains the name and UID of the top 20 polling applications, along with how many times each application performed each polling system call (over time). contains an excerpt of the script. In this particular example firefox is doing an excessive amount of polling due to a plugin module.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-topsys.xml000066400000000000000000000073321356460210500272100ustar00rootroot00000000000000
Tracking Most Frequently Used System Calls script examples monitoring system calls examples of SystemTap scripts monitoring system calls monitoring system calls examples of SystemTap scripts system calls, monitoring examples of SystemTap scripts from helps you identify which applications are polling by examining a small subset of system calls ( poll, select, epoll, itimer, futex, nanosleep, and signal). However, in some systems, an excessive number of system calls outside that small subset might be responsible for time spent in the kernel. If you suspect that an application is using system calls excessively, you need to identify the most frequently used system calls on the system. To do this, use . topsys.stp lists the top 20 system calls used by the system per 5-second interval. It also lists how many times each system call was used during that period. Refer to for a sample output. script examples timer.s(), sample usage examples of SystemTap scripts timer.s(), sample usage timer.s(), sample usage examples of SystemTap scripts <xref linkend="topsys"/> Sample Output -------------------------------------------------------------- SYSCALL COUNT gettimeofday 1857 read 1821 ioctl 1568 poll 1033 close 638 open 503 select 455 write 391 writev 335 futex 303 recvmsg 251 socket 137 clock_gettime 124 rt_sigprocmask 121 sendto 120 setitimer 106 stat 90 time 81 sigreturn 72 fstat 66 --------------------------------------------------------------
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-traceio.xml000066400000000000000000000114771356460210500273020ustar00rootroot00000000000000
Track Cumulative IO script examples tracking cumulative I/O examples of SystemTap scripts tracking cumulative I/O tracking cumulative I/O examples of SystemTap scripts cumulative I/O, tracking examples of SystemTap scripts monitoring cumulative I/O examples of SystemTap scripts printing I/O activity (cumulative) examples of SystemTap scripts This section describes how to track the cumulative amount of I/O to the system. traceio.stp prints the top ten executables generating I/O traffic over time. In addition, it also tracks the cumulative amount of I/O reads and writes done by those ten executables. This information is tracked and printed out in 1-second intervals, and in descending order. local variables sample usage $return variables (local) sample usage $return $return sample usage local variables Note that also uses the local variable $return, which is also used by from . <xref linkend="traceio"/> Sample Output [...] Xorg r: 583401 KiB w: 0 KiB floaters r: 96 KiB w: 7130 KiB multiload-apple r: 538 KiB w: 537 KiB sshd r: 71 KiB w: 72 KiB pam_timestamp_c r: 138 KiB w: 0 KiB staprun r: 51 KiB w: 51 KiB snmpd r: 46 KiB w: 0 KiB pcscd r: 28 KiB w: 0 KiB irqbalance r: 27 KiB w: 4 KiB cupsd r: 4 KiB w: 18 KiB Xorg r: 588140 KiB w: 0 KiB floaters r: 97 KiB w: 7143 KiB multiload-apple r: 543 KiB w: 542 KiB sshd r: 72 KiB w: 72 KiB pam_timestamp_c r: 138 KiB w: 0 KiB staprun r: 51 KiB w: 51 KiB snmpd r: 46 KiB w: 0 KiB pcscd r: 28 KiB w: 0 KiB irqbalance r: 27 KiB w: 4 KiB cupsd r: 4 KiB w: 18 KiB
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-traceio2.xml000066400000000000000000000126671356460210500273660ustar00rootroot00000000000000
I/O Monitoring (By Device) script examples monitoring device I/O examples of SystemTap scripts monitoring device I/O monitoring device I/O examples of SystemTap scripts I/O monitoring (by device) examples of SystemTap scripts device I/O, monitoring examples of SystemTap scripts example from http://sourceware.org/systemtap/examples/io/traceio2.stp, but error WAR STORY: http://sourceware.org/systemtap/wiki/WSDeviceMonitor?highlight=((WarStories)), but script errored was able to correct script through http://sourceware.org/systemtap/wiki/WSFileMonitor?highlight=((WarStories)) This section describes how to monitor I/O activity on a specific device. traceio2.stp script examples stat -c, determining whole device number examples of SystemTap scripts stat -c, determining whole device number stat -c, determining whole device number examples of SystemTap scripts script examples whole device number (usage as a command-line argument) examples of SystemTap scripts whole device number (usage as a command-line argument) whole device number (usage as a command-line argument) examples of SystemTap scripts takes 1 argument: the whole device number. To get this number, use stat -c "0x%D" directory, where directory is located in the device to be monitored. script examples usrdev2kerndev() examples of SystemTap scripts usrdev2kerndev() usrdev2kerndev() examples of SystemTap scripts The usrdev2kerndev() function converts the whole device number into the format understood by the kernel. The output produced by usrdev2kerndev() is used in conjunction with the MKDEV(), MINOR(), and MAJOR() functions to determine the major and minor numbers of a specific device. The output of includes the name and ID of any process performing a read/write, the function it is performing (that is, vfs_read or vfs_write), and the kernel device number. The following example is an excerpt from the full output of stap traceio2.stp 0x805, where 0x805 is the whole device number of /home. /home resides in /dev/sda5, which is the device we wish to monitor. <xref linkend="traceio2"/> Sample Output [...] synergyc(3722) vfs_read 0x800005 synergyc(3722) vfs_read 0x800005 cupsd(2889) vfs_write 0x800005 cupsd(2889) vfs_write 0x800005 cupsd(2889) vfs_write 0x800005 [...]
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Useful_SystemTap_Scripts.xml000066400000000000000000000111411356460210500276530ustar00rootroot00000000000000 Useful SystemTap Scripts SystemTap scripts useful examples examples of SystemTap scripts useful examples of SystemTap scripts systemtap-testsuite package sample scripts This chapter enumerates several SystemTap scripts you can use to monitor and investigate different subsystems. All of these scripts are available at /usr/share/systemtap/testsuite/systemtap.examples/ once you install the systemtap-testsuite RPM. short intro, reference to online source (http://sourceware.org/systemtap/examples/subsystem-index.html); "always updated" short description of gnuplot (?) for better GUI of results case studies and more info on some scripts here - http://sourceware.org/systemtap/wiki/WarStories
Network The following sections showcase scripts that trace network-related functions and build a profile of network activity.
Disk The following sections showcase scripts that monitor disk and I/O activity.
Profiling The following sections showcase scripts that profile kernel activity by monitoring function calls.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Userspace_probing.xml000066400000000000000000000274641356460210500263610ustar00rootroot00000000000000 User-space Probing SystemTap initially focused on kernel-space probing. Because there are many instances where user-space probing can help diagnose a problem, SystemTap 0.6 added support to allow probing user-space processes. SystemTap can probe the entry into and return from a function in user-space processes, probe predefined markers in user-space code, and monitor user-process events. SystemTap requires the uprobes module to perform user-space probing. If your Linux kernel is version 3.5 or higher, it already includes uprobes. To verify that the current kernel supports uprobes natively, run the following command: grep CONFIG_UPROBES /boot/config-`uname -r` If uprobes is integrated, the output of this command is as follows: CONFIG_UPROBES=y If you are running a kernel prior to version 3.5, SystemTap automatically builds the uprobes module. However, you also need the utrace kernel extensions required by the SystemTap user-space probing to track various user-space events. More details about the utrace infrastructure are available at . To determine whether the currently running Linux kernel provides the needed utrace support, type the following at a shell prompt: grep CONFIG_UTRACE /boot/config-`uname -r` If the Linux kernel supports user-space probing, the command produces the following output: CONFIG_UTRACE=y
User-Space Events Events user-space All user-space event probes begin with process. You can limit the process events to a specific running process by specifying the process ID. You can also limit the process events to monitor a particular executable by specifying the path to the executable (PATH). SystemTap makes use of the PATH environment variable, which allows you to use both the name used on the command-line to start the executable and the absolute path to the executable. Several of the user-space probe events limit their scope to a particular executable name (PATH), because SystemTap must use debug information to statically analyze where to place the probes. But for many user-space probe events, the process ID and executable name are optional. Any process event in the list below that include process ID or the path to the executable must include those arguments. The process ID and path to the executable are optional for the process events that do not list them: process("PATH").function("function") The entry to the user-space function function for the executable PATH. This event is the user-space analogue of the kernel.function("function") event. It allows wildcards for the function function and .return suffix. process("PATH").statement("statement") The earliest instruction in the code for statement. This is the user-space analogue of kernel.statement("statement"). process("PATH").mark("marker") The static probe point marker defined in PATH. You can use wildcards for marker to specify multiple marks with a single probe. The static probe points may also have numbered arguments ($1, $2, and so on) available to the probe. A variety of user-space packages such as Java include these static probe points. Most packages that provide static probe points also provide aliases for the raw user-space mark events. Below is one such alias for the x86_64 Java hotspot JVM: probe hotspot.gc_begin = process("/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so").mark("gc__begin") process.begin A user-space process is created. You can limit this to a particular process ID or a full path to the executable. process.thread.begin A user-space thread is created. You can limit this to a particular process ID or a full path to the executable. process.end A user-space process dies. You can limit this to a particular process ID or a full path to the executable. process.thread.end A user-space thread is destroyed. You can limit this to a particular process ID or a full path to the executable. process.syscall A user-space process makes a system call. The system call number is available in the $syscall context variable, and the fist six arguments are available in $arg1 through $arg6. The .return suffix places the probe at the return from the system call. For syscall.return, the return value is available through the $return context variable. You can limit this to a particular process ID or a full path to the executable.
Accessing User-Space Target Variables target variables user-space You can access user-space target variables in the same manner as described in . In Linux, however, there are separate address spaces for the user and kernel code. When using the -> operator, SystemTap accesses the appropriate address space. For pointers to base types such as integers and strings, there are a number of functions listed below to access user-space data. The first argument for each functions is the pointer to the data item. user_char(address) Obtains the character at address for the current user process. user_short(address) Obtains the short integer at address for the current user process. user_int(address) Obtains the integer at address for the current user process. user_long(address) Obtains the long integer at address for the current user process. user_string(address) Obtains the string at address for the current user process. user_string_n(address, n) Obtains the string at address for the current user process and limits the string to n bytes.
User-Space Stack Backtraces Stack backtrace user-space The probe point (pp) function indicates which particular event triggered the SystemTap event handler. A probe on the entry into a function would list the function name. However, in many cases the same probe point event may be triggered by many different modules in the program; this is particularly true for functions in shared libraries. A SystemTap backtrace of the user-space stack can provide additional context on how the probe point event is triggered. The user-space stack backtrace generation is complicated by the compiler producing code optimized to eliminate stack frame pointers. However, the compiler also includes information in the debug information section to allow debugging tools to produce stack backtraces. SystemTap user-space stack backtrace mechanism makes use of that debug information to walk the stack to generate stack traces for 32-bit and 64-bit x86 processors; other processor architectures do not yet support the use of debug information to unwind the user-space stack. To ensure that the needed debug information is used to produce the user-space stack backtraces, use the option for executables and for shared libraries. For example, you can use the user-space backtrack functions to see how the xmalloc function is being called by the ls command. With the debuginfo for the ls command installed, the following SystemTap command provides a backtrace each time the xmalloc function is called: stap -d /bin/ls --ldd \ -e 'probe process("ls").function("xmalloc") {print_usyms(ubacktrace())}' \ -c "ls /" When executed, this command produces output similar to the following: bin dev lib media net proc sbin sys var boot etc lib64 misc op_session profilerc selinux tmp cgroup home lost+found mnt opt root srv usr 0x4116c0 : xmalloc+0x0/0x20 [/bin/ls] 0x4116fc : xmemdup+0x1c/0x40 [/bin/ls] 0x40e68b : clone_quoting_options+0x3b/0x50 [/bin/ls] 0x4087e4 : main+0x3b4/0x1900 [/bin/ls] 0x3fa441ec5d : __libc_start_main+0xfd/0x1d0 [/lib64/libc-2.12.so] 0x402799 : _start+0x29/0x2c [/bin/ls] 0x4116c0 : xmalloc+0x0/0x20 [/bin/ls] 0x4116fc : xmemdup+0x1c/0x40 [/bin/ls] 0x40e68b : clone_quoting_options+0x3b/0x50 [/bin/ls] 0x40884a : main+0x41a/0x1900 [/bin/ls] 0x3fa441ec5d : __libc_start_main+0xfd/0x1d0 [/lib64/libc-2.12.so] ... For more details on the functions available for user-space stack backtraces, refer to ucontext-symbols.stp and ucontext-unwind.stp tapsets. You can also find the description of the functions in the aforementioned tapsets in the SystemTap Tapset Reference Manual.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/Using_SystemTap.xml000066400000000000000000000317151356460210500257770ustar00rootroot00000000000000 Using SystemTap short intro, contents of chapter Using SystemTap This chapter documents how to install SystemTap in the system and explains how to use the stap utility to run SystemTap scripts.
Running SystemTap Scripts - basic commands (e.g. stap), useful options per command (e.g. stap -vv), tool references (man pages, related kernel-doc), references within book (i.e. errors chapter) - running systemtap scripts Usage running SystemTap scripts running SystemTap scripts Usage Usage stap stap Usage Usage staprun staprun Usage SystemTap is distributed with a number of command line tools that allow you to monitor the activities of the system. The stap command reads probing instructions from a SystemTap script, translates these instructions into C code, builds a kernel module, and loads it into the running Linux kernel. The staprun command runs SystemTap instrumentation, that is, a kernel module built from SystemTap scripts during a cross-instrumentation. SystemTap scripts, how to run Running stap and staprun requires elevated privileges to the system. Because not all users can be granted root access just to run SystemTap, you can allow a non-privileged user to run SystemTap instrumentation on their machine by adding them to one of the following user groups: stapdev Usage stapdev stapdev Usage Members of this group can use the stap command to run SystemTap scripts, or staprun to run SystemTap instrumentation modules. Running the stap command involves compiling SystemTap scripts into kernel modules and loading them into the kernel. This operation requires elevated privileges to the system, which are granted to stapdev members. Unfortunately, such privileges also grant effective root access to stapdev members. As a consequence, only grant stapdev group membership to users whom you can trust with root access. stapusr Usage stapusr stapusr Usage Members of this group can only use the staprun command to run SystemTap instrumentation modules. In addition, they can only run modules from the /lib/modules/kernel_version/systemtap/ directory. Note that this directory must be owned only by the root user, and must only be writable by the root user. The stap command reads a SystemTap script either from a file, or from standard input. To tell stap to read a SystemTap script from a file, specify the file name on the command line: stap file_name Usage standard input, running scripts from standard input, running scripts from Usage running scripts from standard input To instruct stap to read a SystemTap script from standard input, use the switch instead of the file name. Note that any command-line options you wish to use must be inserted before the switch. For example, to make the output of the stap command more verbose, type: echo "probe timer.s(1) {exit()}" | stap -v - Below is a list of commonly used stap options: Usage options, stap options, stap Usage stap options -v Makes the output of the SystemTap session more verbose. You can repeat this option multiple times to provide more details on the script's execution, for example: stap -vvv script.stp This option is particularly useful if you encounter any errors in running the script. For more information about common SystemTap script errors, refer to . -o file_name Sends the standard output to a file named file_name. -S size,count Limits the maximum size of output files to size megabytes and the maximum number of stored files to count. This option implements logrotate operations for SystemTap and the resulting file names have a sequence number suffix. -x process_id Sets the SystemTap handler function target() to the specified process ID. For more information about target(), refer to . -c 'command' Sets the SystemTap handler function target() to the specified command and runs the SystemTap instrumentation for the duration of this command. For more information about target(), refer to . -e 'script' Uses script rather than a file as input for the SystemTap translator. -F Uses SystemTap's flight recorder mode and makes the script a background process. For more information about flight recorder mode, refer to . any other useful options worth noting here for beginners? For more information about the stap command, refer to the stap1 man page. For more information about the staprun command and cross-instrumentation, refer to or the staprun8 man page.
SystemTap Flight Recorder Mode flight recorder mode SystemTap's flight recorder mode allows you to run a SystemTap script for long periods of time and just focus on recent output. The flight recorder mode limits the amount of output generated. There are two variations of the flight recorder mode: in-memory and file mode. In both cases, the SystemTap script runs as a background process.
In-memory Flight Recorder flight recorder mode in-memory mode When flight recorder mode is used without a file name, SystemTap uses a buffer in kernel memory to store the output of the script. Once the SystemTap instrumentation module is loaded and the probes start running, the instrumentation detaches and is put in the background. When the interesting event occurs, you can reattach to the instrumentation to see the recent output in the memory buffer and any continuing output. To run a SystemTap script by using the flight recorder in-memory mode, run the stap command with the command line option: stap -F iotime.stp Once the script starts, stap prints a message similar to the following to provide you with the command to reconnect to the running script: Disconnecting from systemtap module. To reconnect, type "staprun -A stap_5dd0073edcb1f13f7565d8c343063e68_19556" When the interesting event occurs, run the following command to connect to the currently running script, output the recent data in the memory buffer, and get continuing output: staprun -A stap_5dd0073edcb1f13f7565d8c343063e68_19556 By default, the kernel buffer is 1MB in size. You can increase this value by using the option with the size in megabytes (rounded up to the next power over 2) for the buffer. For example, on the SystemTap command line would specify 2MB for the buffer.
File Flight Recorder flight recorder mode file mode The flight recorder mode can also store data to files. You can control the number and size of the files kept by using the option followed by two numerical arguments separated by a comma: the first argument is the maximum size in megabytes for the each output file, the second argument is the number of recent files to keep. To specify the file name, use the option followed by the name. SystemTap automatically adds a number suffix to the file name to indicate the order of the files. The following command starts SystemTap in file flight recorder mode with the output going to files named /tmp/pfaults.log.[0-9]+, each file 1MB or smaller, and keeping latest two files: stap -F -o /tmp/pfaults.log -S 1,2 pfaults.stp The command prints the process ID to standard output. Sending a SIGTERM to the process terminates the SystemTap script and stops the data collection. For example, if the previous command listed 7590 as the process ID, the following command would stop the SystemTap script: kill -s SIGTERM 7590 In this example, only the most recent two files generated by the script are kept: SystemTap automatically removes older files. As a result, the ls -sh /tmp/pfaults.log.* command lists two files: 1020K /tmp/pfaults.log.5 44K /tmp/pfaults.log.6 To examine the latest data, read the file with the highest number, in this case /tmp/pfaults.log.6.
systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/000077500000000000000000000000001356460210500234565ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/cast_example.stp000066400000000000000000000001571356460210500266560ustar00rootroot00000000000000function task_state:long (task:long) { return @cast(task, "task_struct", "kernel")->state } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/defined_example.stp000066400000000000000000000004341356460210500273200ustar00rootroot00000000000000probe vm.pagefault = kernel.function("__handle_mm_fault@mm/memory.c") ?, kernel.function("handle_mm_fault@mm/memory.c") ? { name = "pagefault" write_access = (@defined($flags) ? $flags & FAULT_FLAG_WRITE : $write_access) address = $address } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/fedoradebugurl.sh000077500000000000000000000005151356460210500270100ustar00rootroot00000000000000#! /bin/bash echo -n "Enter nvr of kernel-debuginfo (e.g. 2.6.25-14.fc9.x86_64) " ; \ read NVR; \ BASE=`uname -m` ; \ NVR=`echo $NVR | sed s/.$BASE//` ; \ VERSION=`echo $NVR | awk -F- '{print $1}'` ; \ RELEASE=`echo $NVR | awk -F- '{print $2}'` ; \ echo "http://kojipkgs.fedoraproject.org/\ packages/kernel/$VERSION/$RELEASE/$BASE/" systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/perror.stp000066400000000000000000000000371356460210500255170ustar00rootroot00000000000000probe vfs.read probe vfs.write systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/rhelchannels.sh000077500000000000000000000010401356460210500264560ustar00rootroot00000000000000#! /bin/bash pkg=`rpm -q --whatprovides "redhat-release"` releasever=`rpm -q --qf "%{version}" $pkg` variant=`echo $releasever | tr -d "[:digit:]" | tr "[:upper:]" "[:lower:]" ` if test -z "$variant"; then echo "No Red Hat Enterprise Linux variant (workstation/client/server) found." exit 1 fi version=`echo $releasever | tr -cd "[:digit:]"` base=`uname -i` echo "rhel-$base-$variant-$version" echo "rhel-$base-$variant-$version-debuginfo" echo "rhel-$base-$variant-optional-$version-debuginfo" echo "rhel-$base-$variant-optional-$version" systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/rheldebugurl.sh000077500000000000000000000003211356460210500264750ustar00rootroot00000000000000#! /bin/bash pkg=`rpm -q --whatprovides "redhat-release"` releasever=`rpm -q --qf "%{version}" $pkg` base=`uname -m` echo "ftp://ftp.redhat.com/pub/redhat/linux/\ enterprise/$releasever/en/os/$base/Debuginfo" systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/extras/werror.stp000066400000000000000000000000401356460210500255200ustar00rootroot00000000000000probe begin { printf("x") = 1 } systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/images/000077500000000000000000000000001356460210500234155ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/images/gnuplotsample.png000077500000000000000000000201361356460210500270220ustar00rootroot00000000000000PNG  IHDR/(?Zj9Rp,T0vӖ@8X|,-:m}w_q)Y[@=϶bG??=U+ret'jW|Wb>x^DϏ2.a7x_K IE[33흉4J*OVϾ^]}aj^Ze2cK*53[^[I^`C>ǻvEXbB1Bs;( _>smU_S(#?yo}{bpݖ(Gyh}cj9xq5qqՙƏw?戈­<_c?O;ŎxW ^;1q,v]zVڛKqڦ(DǷlzω~+rh`]Gi[`׶2^.X~NQaU!yk*Oo?gS{ĚU08Q񙣱MqR|Ǣʸ3wXuם1ykbx썋>1v)q=?3O_.ſ#l^{ŧF̖w?3GǮw5ψgLįwC8DXِ3al6vFӇ㦏aZc#(Dsz&Y""";C#;bpxc|s +]Q>c黷џq] Y' q+N[M7~qݟ}=ν Ҧ8[_Ŋ WgC}{|3q}\1߽q]/+Ц37Yᐫ`l0lfQ [~ϝlzKF#]X,E(cx !~qXl^76Gqh =|~t\~Ʌ1yc<qlÉV#~hMص=btgLĖnG7"޹kKēOXx幨=9^yں""b~ȑ,5~Z-\|w>qQ??ﷴ`\tSK.q,GY0Bt|[C</ kO}`8qL kFk㵙r bqu i;^駝6EY\/m<=퉁_u?\=3D9" Q,ΝAX_5# @vUS0Y5n<߯T>v'/nk=Gab1sO\g<5n'̪8gkGFDՋ>G1x;p~/M[t߁xGc7/z*> _}ol*m[mϝ~š(->8=Q\j\V4RnzJM/"ED?}iӫ-wmPsxb?s?}XٵW/y-~ŕgxybpp0~qPu4k};?ϼgGuWqI|;~=u7K.Wc?&>{b"V,ڿg'㪷oyyQ(_Սq|/Vm0 '?q8ct_vYِ3#xg?v k̅fg˯{OplƸ-7f{LP oUFy]1u᱋<;cO1>3GFapexqxط2k/O_DqyiW;?wgLY\?؁'bQj1t뢸vSsqm7Ǒ쫇"b{թSlȑv[jf>8 b[ ].V@N7lGt_;QّQ(Ć~#G;}l #Q.GXgF#p=]ry& +q{˳[X1ç]6Gg"ʅ1vSV+]O8zhCSQ\Ŋi: ][I^Љ5QXLoX"b`u[Ea~V †m1uG7!V]+5^;T}8}׿bzȤ]sG/ES,ݰW3w|ݷTMO04W;}uߛ5 xe(k?c+`ގkOcD7-'X2;(Z4#H~0ƺq2͢pjb|} c%}:}cX Y>F! [`rVO}W6,A5nLpJ:#1PIEqFcF͜Mzэw %`$د;"FR=S}G.?Ȃ8u lr*1GѸQ',zH`dA *< pt]@0fR_ԍ,a[@0rh#XH p `@0F#,7@02J;`IF#Iֿ`@0 rr"`@0 Dq 059[,"#H7 Ʈ-rjǃpjb|_u V>h$ !Fk0TaeT]ݜ@%,`RRu79n]T;poŴ-B3)znTI5ωEcm$.st@@iR&nx@0 F#(nx@0""`@0w@\ `@0  a~߹#`w=@0'#U~1S<@0 F nx@0 !K@q4S9HMOLj<_VD#`r1$`Ré<洖uxV_jC^u`l:OE {ij$6Ӷ* ͨ#˲͹9X{tuV>'rAҹ X;FFHF#X:@0 -#S1ŝ~`@0B4:EFF#FX.1R#G`@0 @0R5z{@F;P (#]0eLX]a]D F.FF#\FЎҘG 2`@0)aHFԤFȉq@0 C`@0 !+F ""'cG#uNݍ:Gx1951.A $Vb1"D#@ރ:lXn\0ާ`\û(1 F2R טК\(@sU@f$QuYQ0t 1 F#|cbq46Һ!yiɒDhi,&Ubs~`T@0vh3r]΃q[~;D:,LUdbȷnIYDF,h;(#݌E@³]0ژ軤-B#@?$z^iWQ,8Ob^[rրRnJ؁gDZF92ix#Ɣx{#qsO` `>Mhe$p7=4nZU`>WӸ| E;f<@콳m{di;59 Iiv{ rJ@$}OAέw#=y 2߶:*hTBZ Z^P򶿭nLig\D+ =7ĐEFv_[woj/F!1 dQgHwbp2g)v{~SA0f2{A_,v*Mōɖ]ؼ}xN\x7{`p 7ۉ_QGȳf](`lC3)|-^L؀<`RF̀ιT0BnLuG 'n1(31 H F ׌. F(`%~-@04A^F# QǹYLϣ3{ftNы4?[{Lz:d::۾5x:}}!tp50/k?#6֧dcVaw~<گڗmRӚ֧XLԟ캷,oY[Y;޽uhv_.NIg:Y|D#cVyy]:La\.Gwӓ{&ŏ54'F#`@0 @0 F#@ Vݖmo`B\.[ 4/IENDB`systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/images/icon.svg000066400000000000000000003301271356460210500250740ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/xsl/000077500000000000000000000000001356460210500227565ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/xsl/defaults.xsl000066400000000000000000000173461356460210500253300ustar00rootroot00000000000000 figure after example before equation before table before procedure before qanda 0 0 CONFIDENTIAL maybe ansi 0 1 _ _ No DocBook localization exists for " " or " ". Using default " ". systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/xsl/html.xsl000066400000000000000000000254241356460210500244610ustar00rootroot00000000000000


The following annotations are from this essay. You are seeing them here because your browser doesn’t support the user-interface techniques used to make them appear as ‘popups’ on modern browsers.

title

  • SystemTap Beginners Guide


systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/xsl/pdf.xsl000066400000000000000000003430401356460210500242630ustar00rootroot00000000000000 ]> left left 0 - - true italic #0066cc start wrap \ wrap \ #f5f5f5 black 6pt 6pt 6pt pt 1pt solid #aaaaaa 0em 0em 0em 0em 0em 0em 0pt always 0.8em 1em 1.2em 0.8em 1em 1.2em true wrap false preserve preserve start justify start Common_Content/images/ 0em 0em 0em 0em 3em 13pt #eeeeec bold true always #8e9f00 #d08e13 #9e0000 #dddddd 0em 0em #eeeeec 1pt solid #aaaaaa 1pt solid #aaaaaa 1pt solid #aaaaaa 1.5em 1em 1em 0em 0em always black white 0pt 0pt 0em set toc book toc,qandadiv article toc chapter nop qandadiv nop qandaset nop sect1 nop sect2 nop sect3 nop sect4 nop sect5 nop section nop part nop 3 Common_Content/images/ 10pt 1 0.1pt 0.1pt 0.1pt 1em 1em 1em 0.1em 0.1em 0.1em 1em 1em 1em 1em 1em 1em 5pt 0.5em 0.5em 0.5em 0.5pt dashed black always 4pt 4pt 2pt 2pt bold 25pt normal 16pt 0.6pt 0.6pt black black white white white white 1 1 1 15mm 9mm 11mm 8mm 5mm 15mm 19mm 31mm 0pt 0pt 0pt 4pc 0pc #336699 white bold pt false bold always 0.8em 1.0em 1.2em 3pt solid #aaaaaa auto 0em 0.8em 0em 1.5em 2em 2em 2em 0.5em 1em 2em 0.5em 1em 2em auto normal pt 0.1pt 0.1pt 0.1pt normal pt 1em 0.5em 2em 0.1pt 0.1pt 0.1pt pt pt pt pt pt pt bold always 1.8em 2.0em 2.2em 0.1em 0.1em 0.1em left body-start() 0.1em 0.1em 0.1em 1em 0.8em 1.2em bold 12pt center always false black center left white pt 24pt bold left 1em 1em 24pt bold center bold white KacstBook, IPAPGothic,Sazanami Gothic, Baekmuk Batang, ZYSong18030,AR PL UMing CN, Lohit Assamese,Lohit Bengali, Lohit Bengali, Lohit Tamil, Lohit Punjabi, Lohit Hindi, Lohit Devanagari,Lohit Marathi,Lohit Hindi, Lohit Gujarati, AR PL ShanHeiSun Uni,AR PL UMing TW, Lohit Kannada, Meera,Lohit Malayalam, Lohit Oriya, Lohit Telugu, LKLUG, KacstFarsi, David CLM, Garuda, Liberation Sans,sans-serif KacstScreen, IPAGothic,Sazanami Gothic, Baekmuk Batang, ZYSong18030,AR PL UMing CN, Lohit Assamese,Lohit Bengali, Lohit Bengali, Lohit Tamil, Lohit Punjabi, Lohit Hindi, Lohit Devanagari,Lohit Marathi,Lohit Hindi, Lohit Gujarati, AR PL ShanHeiSun Uni,AR PL UMing TW, Lohit Kannada, Meera,Lohit Malayalam, Lohit Oriya, Lohit Telugu, LKLUG, KacstFarsi, Miriam Mono CLM, Garuda, Liberation Mono,monospace no-wrap 0.5pt solid black 0.5pt solid black pt 66.66% normal normal 0.25em 48pt black normal normal 0pt black rule 1in 0 : 6pt 6pt 8pt bold left 18pt 18pt 24pt bold left   right fo:wrapper , , , , always always 0 0 0 0 1 0 0 1.0 1.0 auto auto auto auto auto % scale-to-fit auto auto % scale-to-fit auto before center after auto #0000ff #007f00 #5C3566 #ff00ff #FF00FF #0000ff #00007f #ff0000 #00007f #007f00 #5C3566 #002F5D #ffa500 #b03060 #96b9ff #9b30ff #5C3566 #0000ff #0000ff #000000 < > italic #ff00ff , lot front front back back back index back body -draft -draft . Error: CALS tables must specify the number of columns. fixed No adjustColumnWidths function available. always Don't know how to do callouts with Unexpected verbatim environment: 1 No numberLines function available. 1em -3em 4em 0em 0em 0em 0em 2em systemtap-4.2/doc/SystemTap_Beginners_Guide/en-US/xsl/xhtml-common.xsl000066400000000000000000002754631356460210500261510ustar00rootroot00000000000000 Common_Content/images/ Common_Content/css/default.css Common_Content/css/print.css 0 set toc book toc article nop chapter toc qandadiv toc qandaset toc sect1 nop sect2 nop sect3 nop sect4 nop sect5 nop section toc part toc Note Warning Important Note

before
0 1
<xsl:copy-of select="$title"/> not publican /../chrome.css /../db4.css /..///css/brand.css /../print.cssprint toc_embeded desktop
formalpara

0 0 0 1 0 1.0 1.0 1.0 px px px px 0 0 middle {$alt} Warning: imagemaps not supported on scaled images 0 middle
Sample output of when piped through gnuplot
height: px
background-color:
calspair , , , Warning: only calspair or otherunits='imagemap' supported in imageobjectco Error: CALS tables must specify the number of columns. lt-4-cols gt-4-cols gt-8-cols lt-7-rows gt-7-rows gt-14-rows 100% 100% No convertLength function available. No adjustColumnWidths function available.
No insertCallouts function is available.

{$conum} Don't know how to generate Unicode callouts when $callout.unicode.start.character is ( ) ( ) Unexpected verbatim environment: 1 No numberLines function available. #ftn. [ ]
systemtap-4.2/doc/SystemTap_Beginners_Guide/testsuite000077700000000000000000000000001356460210500255722../../testsuiteustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Tapset_Reference/000077500000000000000000000000001356460210500214065ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Tapset_Reference/.gitignore000066400000000000000000000000461356460210500233760ustar00rootroot00000000000000/docproc stamp-* tapsets/ tapsets.xml systemtap-4.2/doc/SystemTap_Tapset_Reference/Makefile.am000066400000000000000000000043661356460210500234530ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap tapset reference manual ## process this file with automake to produce Makefile.in DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap MAN_INSTALL_DIR = $(DESTDIR)$(mandir)/man3 HTML_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap/tapsets if XMLTO_STRINGPARAM XMLTOHTMLPARAMS=--stringparam use.id.as.filename=1 -m $(abs_srcdir)/generate-toc.xml endif if BUILD_REFDOCS # The tapset documents are now pre generated in the source tree if BUILD_HTMLDOCS noinst_PROGRAMS = docproc SRCTREE=$(abs_top_srcdir)/ DOCPROC=$(abs_builddir)/docproc endif all: stamp-htmldocs tapsets.xml: docproc $(shell find $(SRCTREE)/tapset -name '*.stp') if BUILD_HTMLDOCS sed -e '/^!Syscalls/{r $(abs_srcdir)/syscalls.xmlpart' -e 'd}' $(abs_srcdir)/tapsets.tmpl > tapsets.tmpl.new SRCTREE=$(SRCTREE) $(DOCPROC) doc tapsets.tmpl.new > tapsets.xml.new $(preferred_python) $(srcdir)/overload.py tapsets.xml.new > tapsets.xml.new1 xsltproc $(srcdir)/sort-tapsets.xslt tapsets.xml.new1 > tapsets.xml.new2 rm tapsets.xml.new tapsets.xml.new1 tapsets.tmpl.new if test -s tapsets.xml && cmp tapsets.xml.new2 tapsets.xml >/dev/null ; then \ echo tapsets.xml unchanged; \ rm tapsets.xml.new2; \ else \ mv tapsets.xml.new2 tapsets.xml; \ fi endif stamp-htmldocs: tapsets.xml if BUILD_HTMLDOCS xmlto $(XMLTOHTMLPARAMS) html -o tapsets tapsets.xml touch stamp-htmldocs endif #FIXME need to figure out where to install things appropriately #installmandocs: mandocs install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) $(MKDIR_P) $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output if BUILD_HTMLDOCS $(MKDIR_P) $(HTML_INSTALL_DIR) $(INSTALL_DATA) tapsets/* $(HTML_INSTALL_DIR) endif endif # Still install prebuilt docs if --enable-docs=prebuilt if !BUILD_REFDOCS if INSTALL_PREBUILT_DOCS install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) $(MKDIR_P) $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output endif endif CLEANFILES=stamp-* tapsets.pdf tapsets.xml clean-local: rm -rf tapsets systemtap-4.2/doc/SystemTap_Tapset_Reference/Makefile.in000066400000000000000000000512071356460210500234600ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap tapset reference manual VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@noinst_PROGRAMS = \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ docproc$(EXEEXT) subdir = doc/SystemTap_Tapset_Reference ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) docproc_SOURCES = docproc.c docproc_OBJECTS = docproc.$(OBJEXT) docproc_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/docproc.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = docproc.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ elfutils_abs_srcdir = @elfutils_abs_srcdir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = @oldincludedir@ openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap MAN_INSTALL_DIR = $(DESTDIR)$(mandir)/man3 HTML_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap/tapsets @XMLTO_STRINGPARAM_TRUE@XMLTOHTMLPARAMS = --stringparam use.id.as.filename=1 -m $(abs_srcdir)/generate-toc.xml @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@SRCTREE = $(abs_top_srcdir)/ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@DOCPROC = $(abs_builddir)/docproc CLEANFILES = stamp-* tapsets.pdf tapsets.xml all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/SystemTap_Tapset_Reference/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/SystemTap_Tapset_Reference/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) docproc$(EXEEXT): $(docproc_OBJECTS) $(docproc_DEPENDENCIES) $(EXTRA_docproc_DEPENDENCIES) @rm -f docproc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(docproc_OBJECTS) $(docproc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/docproc.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_FALSE@install-data-hook: clean: clean-am clean-am: clean-generic clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/docproc.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/docproc.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-data-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-local clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-tags dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-hook \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @BUILD_REFDOCS_TRUE@all: stamp-htmldocs @BUILD_REFDOCS_TRUE@tapsets.xml: docproc $(shell find $(SRCTREE)/tapset -name '*.stp') @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ sed -e '/^!Syscalls/{r $(abs_srcdir)/syscalls.xmlpart' -e 'd}' $(abs_srcdir)/tapsets.tmpl > tapsets.tmpl.new @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ SRCTREE=$(SRCTREE) $(DOCPROC) doc tapsets.tmpl.new > tapsets.xml.new @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ $(preferred_python) $(srcdir)/overload.py tapsets.xml.new > tapsets.xml.new1 @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ xsltproc $(srcdir)/sort-tapsets.xslt tapsets.xml.new1 > tapsets.xml.new2 @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ rm tapsets.xml.new tapsets.xml.new1 tapsets.tmpl.new @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ if test -s tapsets.xml && cmp tapsets.xml.new2 tapsets.xml >/dev/null ; then \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ echo tapsets.xml unchanged; \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ rm tapsets.xml.new2; \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ else \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ mv tapsets.xml.new2 tapsets.xml; \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ fi @BUILD_REFDOCS_TRUE@stamp-htmldocs: tapsets.xml @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ xmlto $(XMLTOHTMLPARAMS) html -o tapsets tapsets.xml @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ touch stamp-htmldocs #FIXME need to figure out where to install things appropriately #installmandocs: mandocs @BUILD_REFDOCS_TRUE@install-data-hook: @BUILD_REFDOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ $(MKDIR_P) $(MAN_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ $(MKDIR_P) $(HTML_INSTALL_DIR) @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ $(INSTALL_DATA) tapsets/* $(HTML_INSTALL_DIR) # Still install prebuilt docs if --enable-docs=prebuilt @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@install-data-hook: @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(MAN_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output clean-local: rm -rf tapsets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.2/doc/SystemTap_Tapset_Reference/docproc.c000066400000000000000000000263021356460210500232060ustar00rootroot00000000000000/* * docproc is a simple preprocessor for the template files * used as placeholders for the kernel internal documentation. * docproc is used for documentation-frontend and * dependency-generator. * The two usages have in common that they require * some knowledge of the .tmpl syntax, therefore they * are kept together. * * documentation-frontend * Scans the template file and call kernel-doc for * all occurrences of ![EIF]file * Beforehand each referenced file is scanned for * any symbols that are exported via these macros: * EXPORT_SYMBOL(), EXPORT_SYMBOL_GPL(), & * EXPORT_SYMBOL_GPL_FUTURE() * This is used to create proper -function and * -nofunction arguments in calls to kernel-doc. * Usage: docproc doc file.tmpl * * dependency-generator: * Scans the template file and list all files * referenced in a format recognized by make. * Usage: docproc depend file.tmpl * Writes dependency information to stdout * in the following format: * file.tmpl src.c src2.c * The filenames are obtained from the following constructs: * !Efilename * !Ifilename * !Dfilename * !Ffilename * !Pfilename * */ #include #include #include #include #include #include #include #include /* exitstatus is used to keep track of any failing calls to kernel-doc, * but execution continues. */ int exitstatus = 0; typedef void DFL(char *); DFL *defaultline; typedef void FILEONLY(char * file); FILEONLY *internalfunctions; FILEONLY *externalfunctions; FILEONLY *symbolsonly; typedef void FILELINE(char * file, char * line); FILELINE * singlefunctions; FILELINE * entity_system; FILELINE * docsection; #define MAXLINESZ 2048 #define MAXFILES 250 #define KERNELDOCPATH "scripts/" #define KERNELDOC "kernel-doc" #define DOCBOOK "-docbook" #define FUNCTION "-function" #define NOFUNCTION "-nofunction" #define NODOCSECTIONS "-no-doc-sections" char *srctree; void usage (void) { fprintf(stderr, "Usage: docproc {doc|depend} file\n"); fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n"); fprintf(stderr, "doc: frontend when generating kernel documentation\n"); fprintf(stderr, "depend: generate list of files referenced within file\n"); fprintf(stderr, "Environment variable SRCTREE: absolute path to kernel source tree.\n"); } /* * Execute kernel-doc with parameters given in svec */ void exec_kernel_doc(char **svec) { pid_t pid; int ret; char real_filename[PATH_MAX + 1]; /* Make sure output generated so far are flushed */ fflush(stdout); switch (pid=fork()) { case -1: perror("fork"); exit(1); case 0: memset(real_filename, 0, sizeof(real_filename)); strncat(real_filename, srctree, PATH_MAX - 1); strncat(real_filename, KERNELDOCPATH KERNELDOC, PATH_MAX - strlen(real_filename) - 1); execvp(real_filename, svec); fprintf(stderr, "exec "); perror(real_filename); exit(1); default: waitpid(pid, &ret ,0); } if (WIFEXITED(ret)) exitstatus |= WEXITSTATUS(ret); else exitstatus = 0xff; } /* Types used to create list of all exported symbols in a number of files */ struct symbols { char *name; }; struct symfile { char *filename; struct symbols *symbollist; int symbolcnt; }; struct symfile symfilelist[MAXFILES]; int symfilecnt = 0; void add_new_symbol(struct symfile *sym, char * symname) { sym->symbollist = realloc(sym->symbollist, (sym->symbolcnt + 1) * sizeof(char *)); sym->symbollist[sym->symbolcnt++].name = strdup(symname); } /* Add a filename to the list */ struct symfile * add_new_file(char * filename) { symfilelist[symfilecnt++].filename = strdup(filename); return &symfilelist[symfilecnt - 1]; } /* Check if file already are present in the list */ struct symfile * filename_exist(char * filename) { int i; for (i=0; i < symfilecnt; i++) if (strcmp(symfilelist[i].filename, filename) == 0) return &symfilelist[i]; return NULL; } /* * List all files referenced within the template file. * Files are separated by tabs. */ void adddep(char * file) { printf("\t%s", file); } void adddep2(char * file, char * line) { line = line; adddep(file); } void noaction(char * line) { line = line; } void noaction2(char * file, char * line) { file = file; line = line; } /* Echo the line without further action */ void printline(char * line) { printf("%s", line); } /* * Find all symbols in filename that are exported with EXPORT_SYMBOL & * EXPORT_SYMBOL_GPL (& EXPORT_SYMBOL_GPL_FUTURE implicitly). * All symbols located are stored in symfilelist. */ void find_export_symbols(char * filename) { FILE * fp; struct symfile *sym; char line[MAXLINESZ]; if (filename_exist(filename) == NULL) { char real_filename[PATH_MAX + 1]; memset(real_filename, 0, sizeof(real_filename)); strncat(real_filename, srctree, PATH_MAX - 1); strncat(real_filename, filename, PATH_MAX - strlen(real_filename) - 1); sym = add_new_file(filename); fp = fopen(real_filename, "r"); if (fp == NULL) { fprintf(stderr, "docproc: "); perror(real_filename); exit(1); } while (fgets(line, MAXLINESZ, fp)) { char *p; char *e; if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != NULL) || ((p = strstr(line, "EXPORT_SYMBOL")) != NULL)) { /* Skip EXPORT_SYMBOL{_GPL} */ while (isalnum(*p) || *p == '_') p++; /* Remove parentheses & additional whitespace */ while (isspace(*p)) p++; if (*p != '(') continue; /* Syntax error? */ else p++; while (isspace(*p)) p++; e = p; while (isalnum(*e) || *e == '_') e++; *e = '\0'; add_new_symbol(sym, p); } } fclose(fp); } } /* * Document all external or internal functions in a file. * Call kernel-doc with following parameters: * kernel-doc -docbook -nofunction function_name1 filename * Function names are obtained from all the src files * by find_export_symbols. * intfunc uses -nofunction * extfunc uses -function */ void docfunctions(char * filename, char * type) { int i,j; int symcnt = 0; int idx = 0; char **vec; for (i=0; i <= symfilecnt; i++) symcnt += symfilelist[i].symbolcnt; vec = malloc((2 + 2 * symcnt + 3) * sizeof(char *)); if (vec == NULL) { perror("docproc: "); exit(1); } vec[idx++] = KERNELDOC; vec[idx++] = DOCBOOK; vec[idx++] = NODOCSECTIONS; for (i=0; i < symfilecnt; i++) { struct symfile * sym = &symfilelist[i]; for (j=0; j < sym->symbolcnt; j++) { vec[idx++] = type; vec[idx++] = sym->symbollist[j].name; } } vec[idx++] = filename; vec[idx] = NULL; printf("\n", filename); exec_kernel_doc(vec); fflush(stdout); free(vec); } void intfunc(char * filename) { docfunctions(filename, NOFUNCTION); } void extfunc(char * filename) { docfunctions(filename, FUNCTION); } /* * Document specific function(s) in a file. * Call kernel-doc with the following parameters: * kernel-doc -docbook -function function1 [-function function2] */ void singfunc(char * filename, char * line) { char *vec[200]; /* Enough for specific functions */ int i, idx = 0; int startofsym = 1; vec[idx++] = KERNELDOC; vec[idx++] = DOCBOOK; /* Split line up in individual parameters preceded by FUNCTION */ for (i=0; line[i]; i++) { if (isspace(line[i])) { line[i] = '\0'; startofsym = 1; continue; } if (startofsym) { startofsym = 0; vec[idx++] = FUNCTION; vec[idx++] = &line[i]; } } vec[idx++] = filename; vec[idx] = NULL; exec_kernel_doc(vec); } /* * Insert specific documentation section from a file. * Call kernel-doc with the following parameters: * kernel-doc -docbook -function "doc section" filename */ void docsect(char *filename, char *line) { char *vec[6]; /* kerneldoc -docbook -function "section" file NULL */ char *s; for (s = line; *s; s++) if (*s == '\n') *s = '\0'; vec[0] = KERNELDOC; vec[1] = DOCBOOK; vec[2] = FUNCTION; vec[3] = line; vec[4] = filename; vec[5] = NULL; exec_kernel_doc(vec); } /* * Parse file, calling action specific functions for: * 1) Lines containing !E * 2) Lines containing !I * 3) Lines containing !D * 4) Lines containing !F * 5) Lines containing !P * 6) Default lines - lines not matching the above */ void parse_file(FILE *infile) { char line[MAXLINESZ]; char * s; while (fgets(line, MAXLINESZ, infile)) { if (line[0] == '!') { s = line + 2; switch (line[1]) { case 'E': while (*s && !isspace(*s)) s++; *s = '\0'; externalfunctions(line+2); break; case 'I': while (*s && !isspace(*s)) s++; *s = '\0'; internalfunctions(line+2); break; case 'D': while (*s && !isspace(*s)) s++; *s = '\0'; symbolsonly(line+2); break; case 'F': /* filename */ while (*s && !isspace(*s)) s++; *s++ = '\0'; /* function names */ while (isspace(*s)) s++; singlefunctions(line +2, s); break; case 'P': /* filename */ while (*s && !isspace(*s)) s++; *s++ = '\0'; /* DOC: section name */ while (isspace(*s)) s++; docsection(line + 2, s); break; default: defaultline(line); } } else { defaultline(line); } } fflush(stdout); } int main(int argc, char *argv[]) { FILE * infile; srctree = getenv("SRCTREE"); if (!srctree) srctree = getcwd(NULL, 0); if (argc != 3) { usage(); exit(1); } /* Open file, exit on error */ infile = fopen(argv[2], "r"); if (infile == NULL) { fprintf(stderr, "docproc: "); perror(argv[2]); exit(2); } if (strcmp("doc", argv[1]) == 0) { /* Need to do this in two passes. * First pass is used to collect all symbols exported * in the various files; * Second pass generate the documentation. * This is required because some functions are declared * and exported in different files :-(( */ /* Collect symbols */ defaultline = noaction; internalfunctions = find_export_symbols; externalfunctions = find_export_symbols; symbolsonly = find_export_symbols; singlefunctions = noaction2; docsection = noaction2; parse_file(infile); /* Rewind to start from beginning of file again */ fseek(infile, 0, SEEK_SET); defaultline = printline; internalfunctions = intfunc; externalfunctions = extfunc; symbolsonly = printline; singlefunctions = singfunc; docsection = docsect; parse_file(infile); } else if (strcmp("depend", argv[1]) == 0) { /* Create first part of dependency chain * file.tmpl */ printf("%s\t", argv[2]); defaultline = noaction; internalfunctions = adddep; externalfunctions = adddep; symbolsonly = adddep; singlefunctions = adddep2; docsection = adddep2; parse_file(infile); printf("\n"); } else { fprintf(stderr, "Unknown option: %s\n", argv[1]); exit(1); } fclose(infile); fflush(stdout); return exitstatus; } systemtap-4.2/doc/SystemTap_Tapset_Reference/dummy-tapsets.xml000066400000000000000000000025731356460210500247530ustar00rootroot00000000000000 SystemTap Tapset Reference Manual 2008-2013 Red Hat, Inc. and others SystemTap Hackers Introduction SystemTap provides free software (GPL) infrastructure to simplify the gathering of information about the running Linux system. This assists diagnosis of a performance or functional problem. SystemTap eliminates the need for the developer to go through the tedious and disruptive instrument, recompile, install, and reboot sequence that may be otherwise required to collect data. SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live running kernel. The instrumentation makes extensive use of the probe points and functions provided in the tapset library. This document describes the various probe points and functions. systemtap-4.2/doc/SystemTap_Tapset_Reference/generate-toc.xml000066400000000000000000000010111356460210500244760ustar00rootroot00000000000000 appendix toc,title article/appendix nop article nop,title book toc,title,figure,table,example,equation chapter nop,title part nop,title preface toc,title qandadiv toc qandaset toc reference nop,title sect1 toc sect2 toc sect3 toc sect4 toc sect5 toc section toc set toc,title systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/000077500000000000000000000000001356460210500222445ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::-.3stap000066400000000000000000000000531356460210500253040ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::HZ.3stap000066400000000000000000000030011356460210500254650ustar00rootroot00000000000000'\" t .\" Title: function::HZ .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HZ" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::HZ \- Kernel HZ .SH "SYNOPSIS" .sp .nf HZ:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the value of the kernel HZ macro, which corresponds to the rate of increase of the jiffies value\&. .SH SEE ALSO\n .IR tapset::timestamp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::MAJOR.3stap000066400000000000000000000027321356460210500260260ustar00rootroot00000000000000'\" t .\" Title: function::MAJOR .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MAJOR" "3stap" "November 2019" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::MAJOR \- Extract major device number from a kernel device number (kdev_t) .SH "SYNOPSIS" .sp .nf MAJOR:long(dev:long) .fi .SH "ARGUMENTS" .PP \fIdev\fR .RS 4 Kernel device number to query\&. .RE .SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::MINOR.3stap000066400000000000000000000027321356460210500260420ustar00rootroot00000000000000'\" t .\" Title: function::MINOR .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MINOR" "3stap" "November 2019" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::MINOR \- Extract minor device number from a kernel device number (kdev_t) .SH "SYNOPSIS" .sp .nf MINOR:long(dev:long) .fi .SH "ARGUMENTS" .PP \fIdev\fR .RS 4 Kernel device number to query\&. .RE .SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::MKDEF.3stap000066400000000000000000000000501356460210500257730ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::MKDEV.3stap000066400000000000000000000030011356460210500260120ustar00rootroot00000000000000'\" t .\" Title: function::MKDEV .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MKDEV" "3stap" "November 2019" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::MKDEV \- Creates a value that can be compared to a kernel device number (kdev_t) .SH "SYNOPSIS" .sp .nf MKDEV:long(major:long,minor:long) .fi .SH "ARGUMENTS" .PP \fImajor\fR .RS 4 Intended major device number\&. .RE .PP \fIminor\fR .RS 4 Intended minor device number\&. .RE systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::abort.3stap000066400000000000000000000033411356460210500262620ustar00rootroot00000000000000'\" t .\" Title: function::abort .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ABORT" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::abort \- Immediately shutting down probing script\&. .SH "SYNOPSIS" .sp .nf abort() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This is similar to \fBexit\fR but immediately aborts the current probe handler instead of waiting for its completion\&. Probe handlers already running on *other* CPU cores, however, will still continue to their completion\&. Unlike \fBerror\fR, this function call cannot be caught by \*(Aqtry \&.\&.\&. catch\*(Aq\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::addr.3stap000066400000000000000000000032411356460210500260640ustar00rootroot00000000000000'\" t .\" Title: function::addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ADDR" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::addr \- Address of the current probe point\&. .SH "SYNOPSIS" .sp .nf addr:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the instruction pointer from the current probe\*(Aqs register state\&. Not all probe types have registers though, in which case zero is returned\&. The returned address is suitable for use with functions like \fBsymname\fR and \fBsymdata\fR\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::addr_to_node.3stap000066400000000000000000000032071356460210500275750ustar00rootroot00000000000000'\" t .\" Title: function::addr_to_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ADDR_TO_NO" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::addr_to_node \- Returns which node a given address belongs to within a NUMA system .SH "SYNOPSIS" .sp .nf addr_to_node:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the address of the faulting memory access .RE .SH "DESCRIPTION" .PP This function accepts an address, and returns the node that the given address belongs to in a NUMA system\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_clear_screen.3stap000066400000000000000000000032061356460210500306120ustar00rootroot00000000000000'\" t .\" Title: function::ansi_clear_screen .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CLEAR" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_clear_screen \- Move cursor to top left and clear screen\&. .SH "SYNOPSIS" .sp .nf ansi_clear_screen() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for moving cursor to top left and then the ansi code for clearing the screen from the cursor position to the end\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_hide.3stap000066400000000000000000000030201356460210500304650ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_hide .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_hide \- Hides the cursor\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_hide() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for hiding the cursor\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_move.3stap000066400000000000000000000033411356460210500305300ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_move .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_move \- Move cursor to new coordinates\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_move(x:long,y:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Row to move the cursor to\&. .RE .PP \fIy\fR .RS 4 Colomn to move the cursor to\&. .RE .SH "DESCRIPTION" .PP Sends ansi code for positioning the cursor at row x and column y\&. Coordinates start at one, (1,1) is the top\-left corner\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_restore.3stap000066400000000000000000000031651356460210500312510ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_restore .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_restore \- Restores a previously saved cursor position\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_restore() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for restoring the current cursor position previously saved with \fBansi_cursor_save\fR\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_save.3stap000066400000000000000000000030521356460210500305170ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_save .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_save \- Saves the cursor position\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_save() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for saving the current cursor position\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_show.3stap000066400000000000000000000030211356460210500305350ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_show .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_show \- Shows the cursor\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_show() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for showing the cursor\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_new_line.3stap000066400000000000000000000030011356460210500277560ustar00rootroot00000000000000'\" t .\" Title: function::ansi_new_line .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_NEW_L" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_new_line \- Move cursor to new line\&. .SH "SYNOPSIS" .sp .nf ansi_new_line() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code new line\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_reset_color.3stap000066400000000000000000000031241356460210500305040ustar00rootroot00000000000000'\" t .\" Title: function::ansi_reset_color .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_RESET" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_reset_color \- Resets Select Graphic Rendition mode\&. .SH "SYNOPSIS" .sp .nf ansi_reset_color() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code to reset foreground, background and color attribute to default values\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ansi_set_color.3stap000066400000000000000000000052601356460210500301600ustar00rootroot00000000000000'\" t .\" Title: function::ansi_set_color .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_SET_C" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_set_color \- Set the ansi Select Graphic Rendition mode\&. .SH "SYNOPSIS" .sp .nf 1) ansi_set_color(fg:long) .fi .sp .nf 2) ansi_set_color(fg:long,bg:long) .fi .sp .nf 3) ansi_set_color(fg:long,bg:long,attr:long) .fi .SH "ARGUMENTS" .PP \fIfg\fR .RS 4 Foreground color to set\&. .RE .PP \fIbg\fR .RS 4 Background color to set\&. .RE .PP \fIattr\fR .RS 4 Color attribute to set\&. .RE .SH "DESCRIPTION" .PP 1) Sends ansi code for Select Graphic Rendition mode for the given forground color\&. Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37)\&. .PP 2) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37) and the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47)\&. .PP 3) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37), the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47) and the color attribute All attributes off (0), Intensity Bold (1), Underline Single (4), Blink Slow (5), Blink Rapid (6), Image Negative (7)\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::asmlinkage.3stap000066400000000000000000000031101356460210500272600ustar00rootroot00000000000000'\" t .\" Title: function::asmlinkage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ASMLINKAGE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::asmlinkage \- Mark function as declared asmlinkage .SH "SYNOPSIS" .sp .nf asmlinkage() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared asmlinkage in the source\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::assert.3stap000066400000000000000000000037251356460210500264620ustar00rootroot00000000000000'\" t .\" Title: function::assert .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ASSERT" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::assert \- evaluate assertion .SH "SYNOPSIS" .sp .nf 1) assert(expression:long) .fi .sp .nf 2) assert(expression:long,msg:string) .fi .SH "ARGUMENTS" .PP \fIexpression\fR .RS 4 The expression to evaluate .RE .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP 1) This function checks the expression and aborts the current running probe if expression evaluates to zero\&. Uses\fBerror\fR and may be caught by try{} catch{}\&. A default message will be displayed\&. .PP 2) This function checks the expression and aborts the current running probe if expression evaluates to zero\&. Uses\fBerror\fR and may be caught by try{} catch{}\&. The specified message will be displayed\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::atomic_long_read.3stap000066400000000000000000000033171356460210500304440ustar00rootroot00000000000000'\" t .\" Title: function::atomic_long_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ATOMIC_LON" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::atomic_long_read \- Retrieves an atomic long variable from kernel memory .SH "SYNOPSIS" .sp .nf atomic_long_read:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 pointer to atomic long variable .RE .SH "DESCRIPTION" .PP Safely perform the read of an atomic long variable\&. This will be a NOP on kernels that do not have ATOMIC_LONG_INIT set on the kernel config\&. .SH SEE ALSO\n .IR tapset::atomic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::atomic_read.3stap000066400000000000000000000031251356460210500274220ustar00rootroot00000000000000'\" t .\" Title: function::atomic_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ATOMIC_REA" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::atomic_read \- Retrieves an atomic variable from kernel memory .SH "SYNOPSIS" .sp .nf atomic_read:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 pointer to atomic variable .RE .SH "DESCRIPTION" .PP Safely perform the read of an atomic variable\&. .SH SEE ALSO\n .IR tapset::atomic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::backtrace.3stap000066400000000000000000000032271356460210500270750ustar00rootroot00000000000000'\" t .\" Title: function::backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::BACKTRACE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::backtrace \- Hex backtrace of current kernel stack .SH "SYNOPSIS" .sp .nf backtrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns a string of hex addresses that are a backtrace of the kernel stack\&. Output may be truncated as per maximum string length (MAXSTRINGLEN)\&. See \fBubacktrace\fR for user\-space backtrace\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::bytes_to_string.3stap000066400000000000000000000040251356460210500303710ustar00rootroot00000000000000'\" t .\" Title: function::bytes_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::BYTES_TO_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::bytes_to_string \- Human readable string for given bytes .SH "SYNOPSIS" .sp .nf bytes_to_string:string(bytes:long) .fi .SH "ARGUMENTS" .PP \fIbytes\fR .RS 4 Number of bytes to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of bytes (up to 1024 bytes), the number of kilobytes (when less than 1024K) postfixed by \*(AqK\*(Aq, the number of megabytes (when less than 1024M) postfixed by \*(AqM\*(Aq or the number of gigabytes postfixed by \*(AqG\*(Aq\&. If representing K, M or G, and the number is amount is less than 100, it includes a \*(Aq\&.\*(Aq plus the remainer\&. The returned string will be 5 characters wide (padding with whitespace at the front) unless negative or representing more than 9999G bytes\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::caller.3stap000066400000000000000000000031551356460210500264200ustar00rootroot00000000000000'\" t .\" Title: function::caller .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLER" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::caller \- Return name and address of calling function .SH "SYNOPSIS" .sp .nf caller:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the address and name of the calling function\&. This is equivalent to calling: sprintf("\fBs\fR 0x\fBx\fR", symname(\fBcaller_addr\fR), \fBcaller_addr\fR) .SH SEE ALSO\n .IR tapset::context-caller (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::caller_addr.3stap000066400000000000000000000027641356460210500274170ustar00rootroot00000000000000'\" t .\" Title: function::caller_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLER_ADD" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::caller_addr \- Return caller address .SH "SYNOPSIS" .sp .nf caller_addr:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the address of the calling function\&. .SH SEE ALSO\n .IR tapset::context-caller (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::callers.3stap000066400000000000000000000033661356460210500266070ustar00rootroot00000000000000'\" t .\" Title: function::callers .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLERS" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::callers \- Return first n elements of kernel stack backtrace .SH "SYNOPSIS" .sp .nf callers:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack (not counting the top level)\&. If n is \-1, print the entire stack\&. .RE .SH "DESCRIPTION" .PP This function returns a string of the first n hex addresses from the backtrace of the kernel stack\&. Output may be truncated as per maximum string length (MAXSTRINGLEN)\&. .SH SEE ALSO\n .IR tapset::context-caller (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cmdline_arg.3stap000066400000000000000000000033341356460210500274210ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_AR" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cmdline_arg \- Fetch a command line argument .SH "SYNOPSIS" .sp .nf cmdline_arg:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 Argument to get (zero is the program itself) .RE .SH "DESCRIPTION" .PP Returns argument the requested argument from the current process or the empty string when there are not that many arguments or there is a problem retrieving the argument\&. Argument zero is traditionally the command itself\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cmdline_args.3stap000066400000000000000000000041071356460210500276030ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_args .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_AR" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cmdline_args \- Fetch command line arguments from current process .SH "SYNOPSIS" .sp .nf cmdline_args:string(n:long,m:long,delim:string) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 First argument to get (zero is normally the program itself) .RE .PP \fIm\fR .RS 4 Last argument to get (or minus one for all arguments after n) .RE .PP \fIdelim\fR .RS 4 String to use to separate arguments when more than one\&. .RE .SH "DESCRIPTION" .PP Returns arguments from the current process starting with argument number n, up to argument m\&. If there are less than n arguments, or the arguments cannot be retrieved from the current process, the empty string is returned\&. If m is smaller than n then all arguments starting from argument n are returned\&. Argument zero is traditionally the command itself\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cmdline_str.3stap000066400000000000000000000031331356460210500274550ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_ST" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cmdline_str \- Fetch all command line arguments from current process .SH "SYNOPSIS" .sp .nf cmdline_str:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns all arguments from the current process delimited by spaces\&. Returns the empty string when the arguments cannot be retrieved\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::commit.3stap000066400000000000000000000031461356460210500264460ustar00rootroot00000000000000'\" t .\" Title: function::commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::COMMIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::commit \- Write out all output related to a speculation buffer .SH "SYNOPSIS" .sp .nf commit(id:long) .fi .SH "ARGUMENTS" .PP \fIid\fR .RS 4 of the buffer to store the information in .RE .SH "DESCRIPTION" .PP Output all the output for \fIid\fR in the order that it was entered into the speculative buffer by \fBspeculative\fR\&. .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cpu.3stap000066400000000000000000000027121356460210500257430ustar00rootroot00000000000000'\" t .\" Title: function::cpu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu \- Returns the current cpu number .SH "SYNOPSIS" .sp .nf cpu:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the current cpu number\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_ms.3stap000066400000000000000000000033401356460210500276130ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_ms \- Number of milliseconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_ms:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of milliseconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_ns.3stap000066400000000000000000000033361356460210500276210ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_ns \- Number of nanoseconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_ns:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of nanoseconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_s.3stap000066400000000000000000000033231356460210500274370ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_s \- Number of seconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_s:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of seconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_us.3stap000066400000000000000000000033401356460210500276230ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_us \- Number of microseconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_us:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of microseconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cpuid.3stap000066400000000000000000000030221356460210500262530ustar00rootroot00000000000000'\" t .\" Title: function::cpuid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpuid \- Returns the current cpu number .SH "SYNOPSIS" .sp .nf cpuid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the current cpu number\&. Deprecated in SystemTap 1\&.4 and removed in SystemTap 1\&.5\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_msecs.3stap000066400000000000000000000030041356460210500305110ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_msecs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cputime_to_msecs \- Translates the given cputime into milliseconds .SH "SYNOPSIS" .sp .nf cputime_to_msecs:long(cputime:long) .fi .SH "ARGUMENTS" .PP \fIcputime\fR .RS 4 Time to convert to milliseconds\&. .RE .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_string.3stap000066400000000000000000000031171356460210500307120ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cputime_to_string \- Human readable string for given cputime .SH "SYNOPSIS" .sp .nf cputime_to_string:string(cputime:long) .fi .SH "ARGUMENTS" .PP \fIcputime\fR .RS 4 Time to translate\&. .RE .SH "DESCRIPTION" .PP Equivalent to calling: msec_to_string (cputime_to_msecs (cputime)\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_usecs.3stap000066400000000000000000000030041356460210500305210ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_usecs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cputime_to_usecs \- Translates the given cputime into microseconds .SH "SYNOPSIS" .sp .nf cputime_to_usecs:long(cputime:long) .fi .SH "ARGUMENTS" .PP \fIcputime\fR .RS 4 Time to convert to microseconds\&. .RE .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ctime.3stap000066400000000000000000000057141356460210500262620ustar00rootroot00000000000000'\" t .\" Title: function::ctime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CTIME" "3stap" "November 2019" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ctime \- Convert seconds since epoch into human readable date/time string .SH "SYNOPSIS" .sp .nf 1) ctime:string(epochsecs:long) .fi .sp .nf 2) ctime:string() .fi .SH "ARGUMENTS" .PP \fIepochsecs\fR .RS 4 Number of seconds since epoch (as returned by \fBgettimeofday_s\fR) .RE .SH "DESCRIPTION" .PP 1) Takes an argument of seconds since the epoch as returned by\fBgettimeofday_s\fR\&. Returns a string of the form .PP 2) \(lqWed Jun 30 21:49:08 1993\(rq .PP The string will always be exactly 24 characters\&. If the time would be unreasonable far in the past (before what can be represented with a 32 bit offset in seconds from the epoch) an error will occur (which can be avoided with try/catch)\&. If the time would be unreasonable far in the future, an error will also occur\&. .PP Note that the epoch (zero) corresponds to .PP \(lqThu Jan 1 00:00:00 1970\(rq .PP The earliest full date given by ctime, corresponding to epochsecs \-2147483648 is \(lqFri Dec 13 20:45:52 1901\(rq\&. The latest full date given by ctime, corresponding to epochsecs 2147483647 is \(lqTue Jan 19 03:14:07 2038\(rq\&. .PP The abbreviations for the days of the week are \(oqSun\(cq, \(oqMon\(cq, \(oqTue\(cq, \(oqWed\(cq, \(oqThu\(cq, \(oqFri\(cq, and \(oqSat\(cq\&. The abbreviations for the months are \(oqJan\(cq, \(oqFeb\(cq, \(oqMar\(cq, \(oqApr\(cq, \(oqMay\(cq, \(oqJun\(cq, \(oqJul\(cq, \(oqAug\(cq, \(oqSep\(cq, \(oqOct\(cq, \(oqNov\(cq, and \(oqDec\(cq\&. .PP Note that the real C library \fBctime\fR function puts a newline (\*(Aq\en\*(Aq) character at the end of the string that this function does not\&. Also note that since the kernel has no concept of timezones, the returned time is always in GMT\&. .PP .SH SEE ALSO\n .IR tapset::ctime (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::current_exe_file.3stap000066400000000000000000000033261356460210500305000ustar00rootroot00000000000000'\" t .\" Title: function::current_exe_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CURRENT_EX" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::current_exe_file \- get the file struct pointer for the current task\*(Aqs executable file .SH "SYNOPSIS" .sp .nf current_exe_file:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the file struct pointer for the current task\*(Aqs executable file\&. Note that the file struct pointer isn\*(Aqt locked on return\&. The return value of this function can be passed to \fBfullpath_struct_file\fR to get the path from the file struct\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::d_name.3stap000066400000000000000000000027551356460210500264060ustar00rootroot00000000000000'\" t .\" Title: function::d_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::D_NAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::d_name \- get the dirent name .SH "SYNOPSIS" .sp .nf d_name:string(dentry:long) .fi .SH "ARGUMENTS" .PP \fIdentry\fR .RS 4 Pointer to dentry\&. .RE .SH "DESCRIPTION" .PP .PP Returns the dirent name (path basename)\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::d_path.3stap000066400000000000000000000030361356460210500264130ustar00rootroot00000000000000'\" t .\" Title: function::d_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::D_PATH" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::d_path \- get the full nameidata path .SH "SYNOPSIS" .sp .nf d_path:string(nd:long) .fi .SH "ARGUMENTS" .PP \fInd\fR .RS 4 Pointer to nameidata\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::delete_stopwatch.3stap000066400000000000000000000030241356460210500305070ustar00rootroot00000000000000'\" t .\" Title: function::delete_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DELETE_STO" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::delete_stopwatch \- Remove an existing stopwatch .SH "SYNOPSIS" .sp .nf delete_stopwatch(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 the stopwatch name .RE .SH "DESCRIPTION" .PP Remove stopwatch \fIname\fR\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::discard.3stap000066400000000000000000000027321356460210500265670ustar00rootroot00000000000000'\" t .\" Title: function::discard .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DISCARD" "3stap" "November 2019" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::discard \- Discard all output related to a speculation buffer .SH "SYNOPSIS" .sp .nf discard(id:long) .fi .SH "ARGUMENTS" .PP \fIid\fR .RS 4 of the buffer to store the information in .RE .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::egid.3stap000066400000000000000000000027511356460210500260670ustar00rootroot00000000000000'\" t .\" Title: function::egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EGID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::egid \- Returns the effective gid of a target process .SH "SYNOPSIS" .sp .nf egid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the effective gid of a target process .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::env_var.3stap000066400000000000000000000032311356460210500266110ustar00rootroot00000000000000'\" t .\" Title: function::env_var .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ENV_VAR" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::env_var \- Fetch environment variable from current process .SH "SYNOPSIS" .sp .nf env_var:string(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 Name of the environment variable to fetch .RE .SH "DESCRIPTION" .PP Returns the contents of the specified environment value for the current process\&. If the variable isn\*(Aqt set an empty string is returned\&. .SH SEE ALSO\n .IR tapset::context-envvar (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::errno_str.3stap000066400000000000000000000032141356460210500271670ustar00rootroot00000000000000'\" t .\" Title: function::errno_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ERRNO_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::errno_str \- Symbolic string associated with error code .SH "SYNOPSIS" .sp .nf errno_str:string(err:long) .fi .SH "ARGUMENTS" .PP \fIerr\fR .RS 4 The error number received .RE .SH "DESCRIPTION" .PP This function returns the symbolic string associated with the giver error code, such as ENOENT for the number 2, or E#3333 for an out\-of\-range value such as 3333\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::error.3stap000066400000000000000000000032351356460210500263060ustar00rootroot00000000000000'\" t .\" Title: function::error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ERROR" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::error \- Send an error message .SH "SYNOPSIS" .sp .nf error(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP An implicit end\-of\-line is added\&. staprun prepends the string \(lqERROR:\(rq\&. Sending an error message aborts the currently running probe\&. Depending on the MAXERRORS parameter, it may trigger an \fBexit\fR\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::euid.3stap000066400000000000000000000027431356460210500261060ustar00rootroot00000000000000'\" t .\" Title: function::euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EUID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::euid \- Return the effective uid of a target process .SH "SYNOPSIS" .sp .nf euid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the effective user ID of the target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::execname.3stap000066400000000000000000000030261356460210500267400ustar00rootroot00000000000000'\" t .\" Title: function::execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EXECNAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::execname \- Returns the execname of a target process (or group of processes) .SH "SYNOPSIS" .sp .nf execname:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the execname of a target process (or group of processes)\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::exit.3stap000066400000000000000000000031141356460210500261220ustar00rootroot00000000000000'\" t .\" Title: function::exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EXIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::exit \- Start shutting down probing script\&. .SH "SYNOPSIS" .sp .nf exit() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This only enqueues a request to start shutting down the script\&. New probes will not fire (except \(lqend\(rq probes), but all currently running ones may complete their work\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::fastcall.3stap000066400000000000000000000030741356460210500267470ustar00rootroot00000000000000'\" t .\" Title: function::fastcall .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FASTCALL" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fastcall \- Mark function as declared fastcall .SH "SYNOPSIS" .sp .nf fastcall() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared fastcall in the source\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::format_ipaddr.3stap000066400000000000000000000030731356460210500277700ustar00rootroot00000000000000'\" t .\" Title: function::format_ipaddr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FORMAT_IPA" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::format_ipaddr \- Returns a string representation for an IP address .SH "SYNOPSIS" .sp .nf format_ipaddr:string(addr:long,family:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the IP address .RE .PP \fIfamily\fR .RS 4 the IP address family (either AF_INET or AF_INET6) .RE .SH SEE ALSO\n .IR tapset::ip (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ftrace.3stap000066400000000000000000000032271356460210500264220ustar00rootroot00000000000000'\" t .\" Title: function::ftrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FTRACE" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ftrace \- Send a message to the ftrace ring\-buffer .SH "SYNOPSIS" .sp .nf ftrace(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP If the ftrace ring\-buffer is configured & available, see /debugfs/tracing/trace for the message\&. Otherwise, the message may be quietly dropped\&. An implicit end\-of\-line is added\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_file.3stap000066400000000000000000000032121356460210500313720ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fullpath_struct_file \- get the full path .SH "SYNOPSIS" .sp .nf fullpath_struct_file:string(task:long,file:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE .PP \fIfile\fR .RS 4 Pointer to \(lqstruct file\(rq\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_nameidata.3stap000066400000000000000000000032111356460210500323750ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_nameidata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fullpath_struct_nameidata \- get the full nameidata path .SH "SYNOPSIS" .sp .nf fullpath_struct_nameidata(nd:) .fi .SH "ARGUMENTS" .PP \fInd\fR .RS 4 Pointer to \(lqstruct nameidata\(rq\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel (and systemtap\-tapset) d_path function, with a \(lq/\(rq\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_path.3stap000066400000000000000000000031201356460210500314050ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fullpath_struct_path \- get the full path .SH "SYNOPSIS" .sp .nf fullpath_struct_path:string(path:long) .fi .SH "ARGUMENTS" .PP \fIpath\fR .RS 4 Pointer to \(lqstruct path\(rq\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::get_cycles.3stap000066400000000000000000000033261356460210500272770ustar00rootroot00000000000000'\" t .\" Title: function::get_cycles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_CYCLES" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_cycles \- Processor cycle count .SH "SYNOPSIS" .sp .nf get_cycles:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the processor cycle counter value if available, else it returns zero\&. The cycle counter is free running and unsynchronized on each processor\&. Thus, the order of events cannot determined by comparing the results of the get_cycles function on different processors\&. .SH SEE ALSO\n .IR tapset::timestamp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::get_loadavg_index.3stap000066400000000000000000000036361356460210500306250ustar00rootroot00000000000000'\" t .\" Title: function::get_loadavg_index .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_LOADAV" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_loadavg_index \- Get the load average for a specified interval .SH "SYNOPSIS" .sp .nf get_loadavg_index:long(indx:long) .fi .SH "ARGUMENTS" .PP \fIindx\fR .RS 4 The load average interval to capture\&. .RE .SH "DESCRIPTION" .PP This function returns the load average at a specified interval\&. The three load average values 1, 5 and 15 minute average corresponds to indexes 0, 1 and 2 of the avenrun array \- see linux/sched\&.h\&. Please note that the truncated\-integer portion of the load average is returned\&. If the specified index is out\-of\-bounds, then an error message and exception is thrown\&. .SH SEE ALSO\n .IR tapset::loadavg (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::get_sa_flags.3stap000066400000000000000000000027401356460210500275730ustar00rootroot00000000000000'\" t .\" Title: function::get_sa_flags .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_SA_FLA" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_sa_flags \- Returns the numeric value of sa_flags .SH "SYNOPSIS" .sp .nf get_sa_flags:long(act:long) .fi .SH "ARGUMENTS" .PP \fIact\fR .RS 4 address of the sigaction to query\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::get_sa_handler.3stap000066400000000000000000000027501356460210500301150ustar00rootroot00000000000000'\" t .\" Title: function::get_sa_handler .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_SA_HAN" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_sa_handler \- Returns the numeric value of sa_handler .SH "SYNOPSIS" .sp .nf get_sa_handler:long(act:long) .fi .SH "ARGUMENTS" .PP \fIact\fR .RS 4 address of the sigaction to query\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_ms.3stap000066400000000000000000000030421356460210500303310ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_ms \- Number of milliseconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_ms:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of milliseconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_ns.3stap000066400000000000000000000030401356460210500303300ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_ns \- Number of nanoseconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_ns:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of nanoseconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_s.3stap000066400000000000000000000030251356460210500301550ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_s \- Number of seconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_s:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of seconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_us.3stap000066400000000000000000000030421356460210500303410ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_us \- Number of microseconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_us:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of microseconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::gid.3stap000066400000000000000000000027361356460210500257250ustar00rootroot00000000000000'\" t .\" Title: function::gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gid \- Returns the group ID of a target process .SH "SYNOPSIS" .sp .nf gid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the group ID of a target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::htonl.3stap000066400000000000000000000026761356460210500263110ustar00rootroot00000000000000'\" t .\" Title: function::htonl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONL" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::htonl \- Convert 32\-bit long from host to network order .SH "SYNOPSIS" .sp .nf htonl:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::htonll.3stap000066400000000000000000000027071356460210500264600ustar00rootroot00000000000000'\" t .\" Title: function::htonll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONLL" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::htonll \- Convert 64\-bit long long from host to network order .SH "SYNOPSIS" .sp .nf htonll:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::htons.3stap000066400000000000000000000026771356460210500263210ustar00rootroot00000000000000'\" t .\" Title: function::htons .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONS" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::htons \- Convert 16\-bit short from host to network order .SH "SYNOPSIS" .sp .nf htons:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::indent.3stap000066400000000000000000000034241356460210500264360ustar00rootroot00000000000000'\" t .\" Title: function::indent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INDENT" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::indent \- returns an amount of space to indent .SH "SYNOPSIS" .sp .nf indent:string(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of space added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns a string with appropriate indentation\&. Call it with a small positive or matching negative delta\&. Unlike the thread_indent function, the indent does not track individual indent values on a per thread basis\&. .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::indent_depth.3stap000066400000000000000000000035021356460210500276170ustar00rootroot00000000000000'\" t .\" Title: function::indent_depth .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INDENT_DEP" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::indent_depth \- returns the global nested\-depth .SH "SYNOPSIS" .sp .nf indent_depth:long(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of depth added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns a number for appropriate indentation, similar to \fBindent\fR\&. Call it with a small positive or matching negative delta\&. Unlike the thread_indent_depth function, the indent does not track individual indent values on a per thread basis\&. .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::inet_get_ip_source.3stap000066400000000000000000000030001356460210500310110ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_ip_source .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_I" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inet_get_ip_source \- Provide IP source address string for a kernel socket .SH "SYNOPSIS" .sp .nf inet_get_ip_source:string(sock:long) .fi .SH "ARGUMENTS" .PP \fIsock\fR .RS 4 pointer to the kernel socket .RE .SH SEE ALSO\n .IR tapset::inet_sock (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::inet_get_local_port.3stap000066400000000000000000000027721356460210500311760ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_L" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inet_get_local_port \- Provide local port number for a kernel socket .SH "SYNOPSIS" .sp .nf inet_get_local_port:long(sock:long) .fi .SH "ARGUMENTS" .PP \fIsock\fR .RS 4 pointer to the kernel socket .RE .SH SEE ALSO\n .IR tapset::inet_sock (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::inode_name.3stap000066400000000000000000000030211356460210500272440ustar00rootroot00000000000000'\" t .\" Title: function::inode_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INODE_NAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inode_name \- get the inode name .SH "SYNOPSIS" .sp .nf inode_name:string(inode:long) .fi .SH "ARGUMENTS" .PP \fIinode\fR .RS 4 Pointer to inode\&. .RE .SH "DESCRIPTION" .PP .PP Returns the first path basename associated with the given inode\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::inode_path.3stap000066400000000000000000000030151356460210500272630ustar00rootroot00000000000000'\" t .\" Title: function::inode_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INODE_PATH" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inode_path \- get the path to an inode .SH "SYNOPSIS" .sp .nf inode_path:string(inode:long) .fi .SH "ARGUMENTS" .PP \fIinode\fR .RS 4 Pointer to inode\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full path associated with the given inode\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::int_arg.3stap000066400000000000000000000031151356460210500265750ustar00rootroot00000000000000'\" t .\" Title: function::int_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INT_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::int_arg \- Return function argument as signed int .SH "SYNOPSIS" .sp .nf int_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a signed int (i\&.e\&., a 32\-bit integer sign\-extended to 64 bits)\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ip_ntop.3stap000066400000000000000000000027521356460210500266300ustar00rootroot00000000000000'\" t .\" Title: function::ip_ntop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IP_NTOP" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ip_ntop \- Returns a string representation for an IPv4 address .SH "SYNOPSIS" .sp .nf ip_ntop:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the IPv4 address represented as an integer .RE .SH SEE ALSO\n .IR tapset::ip (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ipmib_filter_key.3stap000066400000000000000000000037551356460210500305010ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_FILT" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_filter_key \- Default filter function for ipmib\&.* probes .SH "SYNOPSIS" .sp .nf ipmib_filter_key:long(skb:long,op:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff .RE .PP \fIop\fR .RS 4 value to be counted if \fIskb\fR passes the filter .RE .PP \fISourceIsLocal\fR .RS 4 1 is local operation and 0 is non\-local operation .RE .SH "DESCRIPTION" .PP This function is a default filter function\&. The user can replace this function with their own\&. The user\-supplied filter function returns an index key based on the values in \fIskb\fR\&. A return value of 0 means this particular \fIskb\fR should be not be counted\&. .SH SEE ALSO\n .IR tapset::ipmib-filter-default (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ipmib_get_proto.3stap000066400000000000000000000030471356460210500303400ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_get_proto .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_GET_" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_get_proto \- Get the protocol value .SH "SYNOPSIS" .sp .nf ipmib_get_proto:long(skb:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .SH "DESCRIPTION" .PP Returns the protocol value from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ipmib_local_addr.3stap000066400000000000000000000032071356460210500304200ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_local_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_LOCA" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_local_addr \- Get the local ip address .SH "SYNOPSIS" .sp .nf ipmib_local_addr:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the local ip address \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ipmib_remote_addr.3stap000066400000000000000000000032211356460210500306150ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_remote_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_REMO" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_remote_addr \- Get the remote ip address .SH "SYNOPSIS" .sp .nf ipmib_remote_addr:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the remote ip address from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ipmib_tcp_local_port.3stap000066400000000000000000000032241356460210500313370ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_tcp_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_TCP_" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_tcp_local_port \- Get the local tcp port .SH "SYNOPSIS" .sp .nf ipmib_tcp_local_port:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the local tcp port from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ipmib_tcp_remote_port.3stap000066400000000000000000000032311356460210500315360ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_tcp_remote_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_TCP_" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_tcp_remote_port \- Get the remote tcp port .SH "SYNOPSIS" .sp .nf ipmib_tcp_remote_port:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the remote tcp port from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::is_myproc.3stap000066400000000000000000000031051356460210500271550ustar00rootroot00000000000000'\" t .\" Title: function::is_myproc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_MYPROC" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::is_myproc \- Determines if the current probe point has occurred in the user\*(Aqs own process .SH "SYNOPSIS" .sp .nf is_myproc:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns 1 if the current probe point has occurred in the user\*(Aqs own process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::is_return.3stap000066400000000000000000000030301356460210500271600ustar00rootroot00000000000000'\" t .\" Title: function::is_return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_RETURN" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::is_return \- Whether the current probe context is a return probe .SH "SYNOPSIS" .sp .nf is_return:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns 1 if the current probe context is a return probe, returns 0 otherwise\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::is_sig_blocked.3stap000066400000000000000000000031021356460210500301060ustar00rootroot00000000000000'\" t .\" Title: function::is_sig_blocked .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_SIG_BLO" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::is_sig_blocked \- Returns 1 if the signal is currently blocked, or 0 if it is not .SH "SYNOPSIS" .sp .nf is_sig_blocked:long(task:long,sig:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 address of the task_struct to query\&. .RE .PP \fIsig\fR .RS 4 the signal number to test\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::isdigit.3stap000066400000000000000000000031441356460210500266100ustar00rootroot00000000000000'\" t .\" Title: function::isdigit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ISDIGIT" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::isdigit \- Checks for a digit .SH "SYNOPSIS" .sp .nf isdigit:long(str:string) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 string to check .RE .SH "DESCRIPTION" .PP Checks for a digit (0 through 9) as the first character of a string\&. Returns non\-zero if true, and a zero if false\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::isinstr.3stap000066400000000000000000000032271356460210500266510ustar00rootroot00000000000000'\" t .\" Title: function::isinstr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ISINSTR" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::isinstr \- Returns whether a string is a substring of another string .SH "SYNOPSIS" .sp .nf isinstr:long(s1:string,s2:string) .fi .SH "ARGUMENTS" .PP \fIs1\fR .RS 4 string to search in .RE .PP \fIs2\fR .RS 4 substring to find .RE .SH "DESCRIPTION" .PP This function returns 1 if string \fIs1\fR contains \fIs2\fR, otherwise zero\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::jiffies.3stap000066400000000000000000000031511356460210500265710ustar00rootroot00000000000000'\" t .\" Title: function::jiffies .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JIFFIES" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::jiffies \- Kernel jiffies count .SH "SYNOPSIS" .sp .nf jiffies:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the value of the kernel jiffies variable\&. This value is incremented periodically by timer interrupts, and may wrap around a 32\-bit or 64\-bit boundary\&. See \fBHZ\fR\&. .SH SEE ALSO\n .IR tapset::timestamp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::json_add_array.3stap000066400000000000000000000033561356460210500301400ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_array \- Add an array .SH "SYNOPSIS" .sp .nf json_add_array:long(name:string,description:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the array\&. .RE .PP \fIdescription\fR .RS 4 Array description\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a array, setting up everything needed\&. Arrays contain other metrics, added with \fBjson_add_array_numeric_metric\fR or \fBjson_add_array_string_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::json_add_array_numeric_metric.3stap000066400000000000000000000037071356460210500332250ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array_numeric_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_array_numeric_metric \- Add a numeric metric to an array .SH "SYNOPSIS" .sp .nf json_add_array_numeric_metric:long(array_name:string,metric_name:string,metric_description:string,metric_units:string) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array the numeric metric should be added to\&. .RE .PP \fImetric_name\fR .RS 4 The name of the numeric metric\&. .RE .PP \fImetric_description\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .PP \fImetric_units\fR .RS 4 Metic units\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a numeric metric to an array, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::json_add_array_string_metric.3stap000066400000000000000000000035351356460210500330700ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array_string_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_array_string_metric \- Add a string metric to an array .SH "SYNOPSIS" .sp .nf json_add_array_string_metric:long(array_name:string,metric_name:string,metric_description:string) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array the string metric should be added to\&. .RE .PP \fImetric_name\fR .RS 4 The name of the string metric\&. .RE .PP \fImetric_description\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a string metric to an array, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::json_add_numeric_metric.3stap000066400000000000000000000034031356460210500320200ustar00rootroot00000000000000'\" t .\" Title: function::json_add_numeric_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_N" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_numeric_metric \- Add a numeric metric .SH "SYNOPSIS" .sp .nf json_add_numeric_metric:long(name:string,description:string,units:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the numeric metric\&. .RE .PP \fIdescription\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .PP \fIunits\fR .RS 4 Metic units\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a numeric metric, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::json_add_string_metric.3stap000066400000000000000000000032501356460210500316640ustar00rootroot00000000000000'\" t .\" Title: function::json_add_string_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_S" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_string_metric \- Add a string metric .SH "SYNOPSIS" .sp .nf json_add_string_metric:long(name:string,description:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the string metric\&. .RE .PP \fIdescription\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a string metric, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::json_set_prefix.3stap000066400000000000000000000032471356460210500303610ustar00rootroot00000000000000'\" t .\" Title: function::json_set_prefix .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_SET_P" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_set_prefix \- Set the metric prefix\&. .SH "SYNOPSIS" .sp .nf json_set_prefix:long(prefix:string) .fi .SH "ARGUMENTS" .PP \fIprefix\fR .RS 4 The prefix name to be used\&. .RE .SH "DESCRIPTION" .PP This function sets the \(lqprefix\(rq, which is the name of the base of the metric hierarchy\&. Calling this function is optional, by default the name of the systemtap module is used\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_buffer_quoted.3stap000066400000000000000000000053211356460210500313450ustar00rootroot00000000000000'\" t .\" Title: function::kernel_buffer_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_BUF" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_buffer_quoted \- Retrieves and quotes buffer from kernel space .SH "SYNOPSIS" .sp .nf 1) kernel_buffer_quoted:string(addr:long,inlen:long) .fi .sp .nf 2) kernel_buffer_quoted:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP 1) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to MAXSTRINGLEN characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .PP 2) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_buffer_quoted_error.3stap000066400000000000000000000042401356460210500325550ustar00rootroot00000000000000'\" t .\" Title: function::kernel_buffer_quoted_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_BUF" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_buffer_quoted_error \- Retrieves and quotes buffer from kernel space .SH "SYNOPSIS" .sp .nf kernel_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when kernel space data is not accessible at the given address, an error is thrown\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_char.3stap000066400000000000000000000032651356460210500274350ustar00rootroot00000000000000'\" t .\" Title: function::kernel_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_CHA" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_char \- Retrieves a char value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_char:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_int.3stap000066400000000000000000000032601356460210500273050ustar00rootroot00000000000000'\" t .\" Title: function::kernel_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_INT" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_int \- Retrieves an int value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_int:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_long.3stap000066400000000000000000000032651356460210500274570ustar00rootroot00000000000000'\" t .\" Title: function::kernel_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_LON" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_long \- Retrieves a long value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_long:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_pointer.3stap000066400000000000000000000033071356460210500301750ustar00rootroot00000000000000'\" t .\" Title: function::kernel_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_POI" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_pointer \- Retrieves a pointer value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_pointer:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the pointer from .RE .SH "DESCRIPTION" .PP Returns the pointer value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_short.3stap000066400000000000000000000032731356460210500276560ustar00rootroot00000000000000'\" t .\" Title: function::kernel_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_SHO" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_short \- Retrieves a short value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_short:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_string.3stap000066400000000000000000000037511356460210500300260ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string \- Retrieves string from kernel memory .SH "SYNOPSIS" .sp .nf 1) kernel_string:string(addr:long) .fi .sp .nf 2) kernel_string:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns the null terminated C string from a given kernel memory address\&. Reports an error on string copy fault\&. .PP 2) This function returns the null terminated C string from a given kernel memory address\&. Reports the given error message on string copy fault\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_n.3stap000066400000000000000000000034441356460210500303420ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_n \- Retrieves string of given length from kernel memory .SH "SYNOPSIS" .sp .nf kernel_string_n:string(addr:long,n:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIn\fR .RS 4 The maximum length of the string (if not null terminated) .RE .SH "DESCRIPTION" .PP Returns the C string of a maximum given length from a given kernel memory address\&. Reports an error on string copy fault\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted.3stap000066400000000000000000000037511356460210500314070ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_quoted \- Retrieves and quotes string from kernel memory .SH "SYNOPSIS" .sp .nf kernel_string_quoted:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel memory address to retrieve the string from .RE .SH "DESCRIPTION" .PP Returns the null terminated C string from a given kernel memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. If the kernel memory data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted_utf16.3stap000066400000000000000000000033241356460210500324300ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_quoted_utf16 \- Quote given kernel UTF\-16 string\&. .SH "SYNOPSIS" .sp .nf kernel_string_quoted_utf16:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-16 decoding as per \fIkernel_string_utf16\fR\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted_utf32.3stap000066400000000000000000000033241356460210500324260ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_quoted_utf32 \- Quote given UTF\-32 kernel string\&. .SH "SYNOPSIS" .sp .nf kernel_string_quoted_utf32:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-32 decoding as per \fIkernel_string_utf32\fR\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_utf16.3stap000066400000000000000000000041671356460210500310550ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_utf16 \- Retrieves UTF\-16 string from kernel memory .SH "SYNOPSIS" .sp .nf 1) kernel_string_utf16:string(addr:long) .fi .sp .nf 2) kernel_string_utf16:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given kernel memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given kernel memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_utf32.3stap000066400000000000000000000041671356460210500310530ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_utf32 \- Retrieves UTF\-32 string from kernel memory .SH "SYNOPSIS" .sp .nf 1) kernel_string_utf32:string(addr:long) .fi .sp .nf 2) kernel_string_utf32:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given kernel memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given kernel memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ktime_get_ns.3stap000066400000000000000000000027701356460210500276300ustar00rootroot00000000000000'\" t .\" Title: function::ktime_get_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KTIME_GET_" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ktime_get_ns \- Number of nanoseconds since boot .SH "SYNOPSIS" .sp .nf ktime_get_ns:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the system ktime\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::linuxmib_filter_key.3stap000066400000000000000000000036141356460210500312220ustar00rootroot00000000000000'\" t .\" Title: function::linuxmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LINUXMIB_F" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::linuxmib_filter_key \- Default filter function for linuxmib\&.* probes .SH "SYNOPSIS" .sp .nf linuxmib_filter_key:long(sk:long,op:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to the struct sock .RE .PP \fIop\fR .RS 4 value to be counted if \fIsk\fR passes the filter .RE .SH "DESCRIPTION" .PP This function is a default filter function\&. The user can replace this function with their own\&. The user\-supplied filter function returns an index key based on the values in \fIsk\fR\&. A return value of 0 means this particular \fIsk\fR should be not be counted\&. .SH SEE ALSO\n .IR tapset::linuxmib-filter-default (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::local_clock_ms.3stap000066400000000000000000000032531356460210500301210ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_ms \- Number of milliseconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_ms:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of milliseconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::local_clock_ns.3stap000066400000000000000000000032511356460210500301200ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_ns \- Number of nanoseconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_ns:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of nanoseconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::local_clock_s.3stap000066400000000000000000000032361356460210500277450ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_s \- Number of seconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_s:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of seconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::local_clock_us.3stap000066400000000000000000000032531356460210500301310ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_us \- Number of microseconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_us:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of microseconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::log.3stap000066400000000000000000000033561356460210500257420ustar00rootroot00000000000000'\" t .\" Title: function::log .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOG" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::log \- Send a line to the common trace buffer .SH "SYNOPSIS" .sp .nf log(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP This function logs data\&. log sends the message immediately to staprun and to the bulk transport (relayfs) if it is being used\&. If the last character given is not a newline, then one is added\&. This function is not as efficient as printf and should be used only for urgent messages\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::long_arg.3stap000066400000000000000000000031571356460210500267500ustar00rootroot00000000000000'\" t .\" Title: function::long_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONG_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::long_arg \- Return function argument as signed long .SH "SYNOPSIS" .sp .nf long_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a signed long\&. On architectures where a long is 32 bits, the value is sign\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::longlong_arg.3stap000066400000000000000000000030551356460210500276250ustar00rootroot00000000000000'\" t .\" Title: function::longlong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONGLONG_A" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::longlong_arg \- Return function argument as 64\-bit value .SH "SYNOPSIS" .sp .nf longlong_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a 64\-bit value\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::matched.3stap000066400000000000000000000036401356460210500265620ustar00rootroot00000000000000'\" t .\" Title: function::matched .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MATCHED" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::matched \- Return a given matched subexpression\&. .SH "SYNOPSIS" .sp .nf matched:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index to the subexpression to return\&. 0 corresponds to the entire regular expression\&. .RE .SH "DESCRIPTION" .PP returns the content of the n\*(Aqth subexpression of the last successful use of the =~ regex matching operator\&. Returns an empty string if the n\*(Aqth subexpression was not matched (e\&.g\&. due to alternation)\&. Throws an error if the last use of =~ was a failed match, or if fewer than n subexpressions are present in the original regexp\&. .SH SEE ALSO\n .IR tapset::regex (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::matched_str.3stap000066400000000000000000000031751356460210500274550ustar00rootroot00000000000000'\" t .\" Title: function::matched_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MATCHED_ST" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::matched_str \- Return the last matched string\&. .SH "SYNOPSIS" .sp .nf matched_str:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP returns the string matched by the last successful use of the =~ regexp matching operator\&. Returns an error if the last use of =~ led to a failed match\&. .SH SEE ALSO\n .IR tapset::regex (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::mdelay.3stap000066400000000000000000000030551356460210500264300ustar00rootroot00000000000000'\" t .\" Title: function::mdelay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MDELAY" "3stap" "November 2019" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::mdelay \- millisecond delay .SH "SYNOPSIS" .sp .nf mdelay(ms:long) .fi .SH "ARGUMENTS" .PP \fIms\fR .RS 4 Number of milliseconds to delay\&. .RE .SH "DESCRIPTION" .PP This function inserts a multi\-millisecond busy\-delay into a probe handler\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::guru-delay (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::mem_page_size.3stap000066400000000000000000000026631356460210500277650ustar00rootroot00000000000000'\" t .\" Title: function::mem_page_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MEM_PAGE_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::mem_page_size \- Number of bytes in a page for this architecture .SH "SYNOPSIS" .sp .nf mem_page_size:long() .fi .SH "ARGUMENTS" .PP None .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::modname.3stap000066400000000000000000000033621356460210500265760ustar00rootroot00000000000000'\" t .\" Title: function::modname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODNAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::modname \- Return the kernel module name loaded at the address .SH "SYNOPSIS" .sp .nf modname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to map to a kernel module name .RE .SH "DESCRIPTION" .PP Returns the module name associated with the given address if known\&. If not known it will raise an error\&. If the address was not in a kernel module, but in the kernel itself, then the string \(lqkernel\(rq will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::module_name.3stap000066400000000000000000000031241356460210500274370ustar00rootroot00000000000000'\" t .\" Title: function::module_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODULE_NAM" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::module_name \- The module name of the current script .SH "SYNOPSIS" .sp .nf module_name:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the name of the stap module\&. Either generated randomly (stap_[0\-9a\-f]+_[0\-9a\-f]+) or set by stap \-m \&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::module_size.3stap000066400000000000000000000030141356460210500274670ustar00rootroot00000000000000'\" t .\" Title: function::module_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODULE_SIZ" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::module_size \- The module size of the current script .SH "SYNOPSIS" .sp .nf module_size:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the sizes of various sections of the stap module\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::msecs_to_string.3stap000066400000000000000000000033631356460210500303610ustar00rootroot00000000000000'\" t .\" Title: function::msecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MSECS_TO_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::msecs_to_string \- Human readable string for given milliseconds .SH "SYNOPSIS" .sp .nf msecs_to_string:string(msecs:long) .fi .SH "ARGUMENTS" .PP \fImsecs\fR .RS 4 Number of milliseconds to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of milliseconds as a human readable string consisting of \(lqXmY\&.ZZZs\(rq, where X is the number of minutes, Y is the number of seconds and ZZZ is the number of milliseconds\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::nfsderror.3stap000066400000000000000000000031011356460210500271510ustar00rootroot00000000000000'\" t .\" Title: function::nfsderror .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NFSDERROR" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::nfsderror \- Convert nfsd error number into string .SH "SYNOPSIS" .sp .nf nfsderror:string(err:long) .fi .SH "ARGUMENTS" .PP \fIerr\fR .RS 4 errnum .RE .SH "DESCRIPTION" .PP This function returns a string for the error number passed into the function\&. .SH SEE ALSO\n .IR tapset::nfsderrno (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ngroups.3stap000066400000000000000000000035761356460210500266620ustar00rootroot00000000000000'\" t .\" Title: function::ngroups .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NGROUPS" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ngroups \- Number of subexpressions in the last match\&. .SH "SYNOPSIS" .sp .nf ngroups:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP returns the number of subexpressions from the last successful use of the =~ regex matching operator\&. .PP Note that this number includes subexpressions which are present in the regex but did not match any string; for example, given the regex \(lqa|(b)\(rq, the subexpressions will count the group for (b) regardless of whether it matched a string or not\&. Throws an error if the last use of =~ was a failed match\&. .SH SEE ALSO\n .IR tapset::regex (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_egid.3stap000066400000000000000000000031411356460210500265610ustar00rootroot00000000000000'\" t .\" Title: function::ns_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_EGID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_egid \- Returns the effective gid of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_egid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the effective gid of a target process as seen in the target user namespace if provided, or the stap process namespace .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_euid.3stap000066400000000000000000000031561356460210500266050ustar00rootroot00000000000000'\" t .\" Title: function::ns_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_EUID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_euid \- Returns the effective user ID of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_euid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the effective user ID of the target process as seen in the target user namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_gid.3stap000066400000000000000000000031261356460210500264170ustar00rootroot00000000000000'\" t .\" Title: function::ns_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_GID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_gid \- Returns the group ID of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_gid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the group ID of a target process as seen in the target user namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_pgrp.3stap000066400000000000000000000031561356460210500266270ustar00rootroot00000000000000'\" t .\" Title: function::ns_pgrp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PGRP" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_pgrp \- Returns the process group ID of the current process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_pgrp:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process group ID of the current process as seen in the target pid namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_pid.3stap000066400000000000000000000030351356460210500264270ustar00rootroot00000000000000'\" t .\" Title: function::ns_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_pid \- Returns the ID of a target process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_pid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the ID of a target process as seen in the target pid namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_ppid.3stap000066400000000000000000000032101356460210500266020ustar00rootroot00000000000000'\" t .\" Title: function::ns_ppid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PPID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_ppid \- Returns the process ID of a target process\*(Aqs parent process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_ppid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function return the process ID of the target proccess\*(Aqs parent process as seen in the target pid namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_sid.3stap000066400000000000000000000033011356460210500264260ustar00rootroot00000000000000'\" t .\" Title: function::ns_sid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_SID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_sid \- Returns the session ID of the current process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_sid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The namespace\-aware session ID of a process is the process group ID of the session leader as seen in the target pid namespace if provided, or the stap process namespace\&. Session ID is stored in the signal_struct since Kernel 2\&.6\&.0\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_tid.3stap000066400000000000000000000031261356460210500264340ustar00rootroot00000000000000'\" t .\" Title: function::ns_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_TID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_tid \- Returns the thread ID of a target process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_tid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the thread ID of a target process as seen in the target pid namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ns_uid.3stap000066400000000000000000000031261356460210500264350ustar00rootroot00000000000000'\" t .\" Title: function::ns_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_UID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_uid \- Returns the user ID of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_uid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the user ID of the target process as seen in the target user namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::nsecs_to_string.3stap000066400000000000000000000033701356460210500303600ustar00rootroot00000000000000'\" t .\" Title: function::nsecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NSECS_TO_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::nsecs_to_string \- Human readable string for given nanoseconds .SH "SYNOPSIS" .sp .nf nsecs_to_string:string(nsecs:long) .fi .SH "ARGUMENTS" .PP \fInsecs\fR .RS 4 Number of nanoseconds to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of nanoseconds as a human readable string consisting of \(lqXmY\&.ZZZZZZs\(rq, where X is the number of minutes, Y is the number of seconds and ZZZZZZZZZ is the number of nanoseconds\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ntohl.3stap000066400000000000000000000026761356460210500263110ustar00rootroot00000000000000'\" t .\" Title: function::ntohl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHL" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ntohl \- Convert 32\-bit long from network to host order .SH "SYNOPSIS" .sp .nf ntohl:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ntohll.3stap000066400000000000000000000027071356460210500264600ustar00rootroot00000000000000'\" t .\" Title: function::ntohll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHLL" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ntohll \- Convert 64\-bit long long from network to host order .SH "SYNOPSIS" .sp .nf ntohll:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ntohs.3stap000066400000000000000000000026771356460210500263210ustar00rootroot00000000000000'\" t .\" Title: function::ntohs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHS" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ntohs \- Convert 16\-bit short from network to host order .SH "SYNOPSIS" .sp .nf ntohs:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pages_to_string.3stap000066400000000000000000000031671356460210500303500ustar00rootroot00000000000000'\" t .\" Title: function::pages_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PAGES_TO_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pages_to_string \- Turns pages into a human readable string .SH "SYNOPSIS" .sp .nf pages_to_string:string(pages:long) .fi .SH "ARGUMENTS" .PP \fIpages\fR .RS 4 Number of pages to translate\&. .RE .SH "DESCRIPTION" .PP Multiplies pages by \fBpage_size\fR to get the number of bytes and returns the result of \fBbytes_to_string\fR\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::panic.3stap000066400000000000000000000031211356460210500262410ustar00rootroot00000000000000'\" t .\" Title: function::panic .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PANIC" "3stap" "November 2019" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::panic \- trigger a panic .SH "SYNOPSIS" .sp .nf panic(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 message to pass to kernel\*(Aqs \fBpanic\fR function .RE .SH "DESCRIPTION" .PP This function triggers an immediate panic of the running kernel with a user\-specified panic message\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::panic (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pexecname.3stap000066400000000000000000000030421356460210500271160ustar00rootroot00000000000000'\" t .\" Title: function::pexecname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PEXECNAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pexecname \- Returns the execname of a target process\*(Aqs parent process .SH "SYNOPSIS" .sp .nf pexecname:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the execname of a target process\*(Aqs parent procces\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pgrp.3stap000066400000000000000000000027701356460210500261300ustar00rootroot00000000000000'\" t .\" Title: function::pgrp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PGRP" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pgrp \- Returns the process group ID of the current process .SH "SYNOPSIS" .sp .nf pgrp:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process group ID of the current process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pid.3stap000066400000000000000000000027221356460210500257310ustar00rootroot00000000000000'\" t .\" Title: function::pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pid \- Returns the ID of a target process .SH "SYNOPSIS" .sp .nf pid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the ID of a target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pid2execname.3stap000066400000000000000000000030321356460210500275140ustar00rootroot00000000000000'\" t .\" Title: function::pid2execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID2EXECNA" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pid2execname \- The name of the given process identifier .SH "SYNOPSIS" .sp .nf pid2execname:string(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 process identifier .RE .SH "DESCRIPTION" .PP Return the name of the given process id\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pid2task.3stap000066400000000000000000000030301356460210500266670ustar00rootroot00000000000000'\" t .\" Title: function::pid2task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID2TASK" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pid2task \- The task_struct of the given process identifier .SH "SYNOPSIS" .sp .nf pid2task:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 process identifier .RE .SH "DESCRIPTION" .PP Return the task struct of the given process id\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pn.3stap000066400000000000000000000031071356460210500255700ustar00rootroot00000000000000'\" t .\" Title: function::pn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PN" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pn \- Returns the active probe name .SH "SYNOPSIS" .sp .nf pn:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the script\-level probe point associated with a currently running probe handler, including wild\-card expansion effects\&. Context: The current probe point\&. .SH SEE ALSO\n .IR tapset::pn (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pnlabel.3stap000066400000000000000000000032561356460210500265750ustar00rootroot00000000000000'\" t .\" Title: function::pnlabel .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PNLABEL" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pnlabel \- Returns the label name parsed from the probe name .SH "SYNOPSIS" .sp .nf pnlabel:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This returns the label name as parsed from the script\-level probe point\&. This function will only work if called directly from the body of a \*(Aq\&.label\*(Aq probe point (i\&.e\&. no aliases)\&. .SH "CONTEXT" .PP The current probe point\&. .SH SEE ALSO\n .IR tapset::pn (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pointer_arg.3stap000066400000000000000000000031331356460210500274630ustar00rootroot00000000000000'\" t .\" Title: function::pointer_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::POINTER_AR" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pointer_arg \- Return function argument as pointer value .SH "SYNOPSIS" .sp .nf pointer_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the unsigned value of argument n, same as ulong_arg\&. Can be used with any type of pointer\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pp.3stap000066400000000000000000000031311356460210500255670ustar00rootroot00000000000000'\" t .\" Title: function::pp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PP" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pp \- Returns the active probe point .SH "SYNOPSIS" .sp .nf pp:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the fully\-resolved probe point associated with a currently running probe handler, including alias and wild\-card expansion effects\&. Context: The current probe point\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ppfunc.3stap000066400000000000000000000030751356460210500264520ustar00rootroot00000000000000'\" t .\" Title: function::ppfunc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PPFUNC" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ppfunc \- Returns the function name parsed from \fBpp\fR .SH "SYNOPSIS" .sp .nf ppfunc:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This returns the function name from the current \fBpp\fR\&. Not all \fBpp\fR have functions in them, in which case "" is returned\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ppid.3stap000066400000000000000000000030221356460210500261030ustar00rootroot00000000000000'\" t .\" Title: function::ppid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PPID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ppid \- Returns the process ID of a target process\*(Aqs parent process .SH "SYNOPSIS" .sp .nf ppid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function return the process ID of the target proccess\*(Aqs parent process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_backtrace.3stap000066400000000000000000000032221356460210500303040ustar00rootroot00000000000000'\" t .\" Title: function::print_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_BACK" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_backtrace \- Print kernel stack back trace .SH "SYNOPSIS" .sp .nf print_backtrace() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function is equivalent to print_stack(\fBbacktrace\fR), except that deeper stack nesting may be supported\&. See print_ubacktrace for user\-space backtrace\&. The function does not return a value\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_regs.3stap000066400000000000000000000030221356460210500273230ustar00rootroot00000000000000'\" t .\" Title: function::print_regs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_REGS" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_regs \- Print a register dump .SH "SYNOPSIS" .sp .nf print_regs() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function prints a register dump\&. Does nothing if no registers are available for the probe point\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_stack.3stap000066400000000000000000000036411356460210500274770ustar00rootroot00000000000000'\" t .\" Title: function::print_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_STAC" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_stack \- Print out kernel stack from string .SH "SYNOPSIS" .sp .nf print_stack(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal addresses .RE .SH "DESCRIPTION" .PP This function performs a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBbacktrace\fR\&. .PP Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function\&. Return nothing\&. .SH "NOTE" .PP it is recommended to use \fBprint_syms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_syms.3stap000066400000000000000000000036341356460210500273670ustar00rootroot00000000000000'\" t .\" Title: function::print_syms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_SYMS" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_syms \- Print out kernel stack from string .SH "SYNOPSIS" .sp .nf print_syms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (kernel) addresses .RE .SH "DESCRIPTION" .PP This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to \fBstack\fR, \fBcallers\fR, and similar functions\&. .PP Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by \fBsymdata\fR\&. Returns nothing\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace.3stap000066400000000000000000000041431356460210500304740ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_ubacktrace \- Print stack back trace for current user\-space task\&. .SH "SYNOPSIS" .sp .nf 1) print_ubacktrace() .fi .sp .nf 2) print_ubacktrace(pc:long,sp:long,fp:long) .fi .SH "ARGUMENTS" .PP \fIpc\fR .RS 4 \-\- undescribed \-\- .RE .PP \fIsp\fR .RS 4 \-\- undescribed \-\- .RE .PP \fIfp\fR .RS 4 \-\- undescribed \-\- .RE .SH "DESCRIPTION" .PP 1) .PP 2) Equivalent to print_ustack(\fBubacktrace\fR), except that deeper stack nesting may be supported\&. Returns nothing\&. See \fBprint_backtrace\fR for kernel backtrace\&. .PP .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace_brief.3stap000066400000000000000000000035001356460210500316370ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace_brief .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_ubacktrace_brief \- Print stack back trace for current user\-space task\&. .SH "SYNOPSIS" .sp .nf print_ubacktrace_brief() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Equivalent to \fBprint_ubacktrace\fR, but output for each symbol is shorter (just name and offset, or just the hex address of no symbol could be found)\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_ustack.3stap000066400000000000000000000037261356460210500276700ustar00rootroot00000000000000'\" t .\" Title: function::print_ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_USTA" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_ustack \- Print out stack for the current task from string\&. .SH "SYNOPSIS" .sp .nf print_ustack(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal addresses for the current task\&. .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBubacktrace\fR for the current task\&. .PP Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function\&. Return nothing\&. .SH "NOTE" .PP it is recommended to use \fBprint_usyms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::print_usyms.3stap000066400000000000000000000036371356460210500275570ustar00rootroot00000000000000'\" t .\" Title: function::print_usyms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_USYM" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_usyms \- Print out user stack from string .SH "SYNOPSIS" .sp .nf print_usyms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (user) addresses .RE .SH "DESCRIPTION" .PP This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to \fBustack\fR, \fBucallers\fR, and similar functions\&. .PP Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by \fBusymdata\fR\&. Returns nothing\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::printk.3stap000066400000000000000000000034501356460210500264630ustar00rootroot00000000000000'\" t .\" Title: function::printk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINTK" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::printk \- Send a message to the kernel trace buffer .SH "SYNOPSIS" .sp .nf printk(level:long,msg:string) .fi .SH "ARGUMENTS" .PP \fIlevel\fR .RS 4 an integer for the severity level (0=KERN_EMERG \&.\&.\&. 7=KERN_DEBUG) .RE .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP Print a line of text to the kernel dmesg/console with the given severity\&. An implicit end\-of\-line is added\&. This function may not be safely called from all kernel probe contexts, so is restricted to guru mode only\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::probe_type.3stap000066400000000000000000000037031356460210500273250ustar00rootroot00000000000000'\" t .\" Title: function::probe_type .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBE_TYPE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::probe_type \- The low level probe handler type of the current probe\&. .SH "SYNOPSIS" .sp .nf probe_type:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns a short string describing the low level probe handler type for the current probe point\&. This is for informational purposes only\&. Depending on the low level probe handler different context functions can or cannot provide information about the current event (for example some probe handlers only trigger in user space and have no associated kernel context)\&. High\-level probes might map to the same or different low\-level probes (depending on systemtap version and/or kernel used)\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::probefunc.3stap000066400000000000000000000037611356460210500271440ustar00rootroot00000000000000'\" t .\" Title: function::probefunc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBEFUNC" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::probefunc \- Return the probe point\*(Aqs function name, if known .SH "SYNOPSIS" .sp .nf probefunc:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the name of the function being probed based on the current address, as computed by symname(\fBaddr\fR) or usymname(\fBuaddr\fR) depending on probe context (whether the probe is a user probe or a kernel probe)\&. .SH "PLEASE NOTE" .PP this function\*(Aqs behaviour differs between SystemTap 2\&.0 and earlier versions\&. Prior to 2\&.0, \fBprobefunc\fR obtained the function name from the probe point string as returned by \fBpp\fR, and used the current address as a fallback\&. .PP Consider using \fBppfunc\fR instead\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::probemod.3stap000066400000000000000000000030451356460210500267630ustar00rootroot00000000000000'\" t .\" Title: function::probemod .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBEMOD" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::probemod \- Return the probe point\*(Aqs kernel module name .SH "SYNOPSIS" .sp .nf probemod:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the name of the kernel module containing the probe point, if known\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_data.3stap000066400000000000000000000035351356460210500277520ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_data .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_D" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_data \- Program data size (data + stack) in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_data:long() .fi .sp .nf 2) proc_mem_data:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the current process data size (data + stack) in pages, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the given process data size (data + stack) in pages, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_rss.3stap000066400000000000000000000035221356460210500276440ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_rss .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_R" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_rss \- Program resident set size in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_rss:long() .fi .sp .nf 2) proc_mem_rss:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the resident set size in pages of the current process, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the resident set size in pages of the given process, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_shr.3stap000066400000000000000000000035551356460210500276370ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_shr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_shr \- Program shared pages (from shared mappings) .SH "SYNOPSIS" .sp .nf 1) proc_mem_shr:long() .fi .sp .nf 2) proc_mem_shr:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the shared pages (from shared mappings) of the current process, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the shared pages (from shared mappings) of the given process, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_size.3stap000066400000000000000000000035571356460210500300170ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_size \- Total program virtual memory size in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_size:long() .fi .sp .nf 2) proc_mem_size:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the total virtual memory size in pages of the current process, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the total virtual memory size in pages of the given process, or zero when that process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_string.3stap000066400000000000000000000036651356460210500303530ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_string \- Human readable string of process memory usage .SH "SYNOPSIS" .sp .nf 1) proc_mem_string:string() .fi .sp .nf 2) proc_mem_string:string(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the current process\&. For example\(lqsize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k\(rq\&. .PP 2) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the given process\&. For example\(lqsize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k\(rq\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_txt.3stap000066400000000000000000000035011356460210500276510ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_txt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_T" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_txt \- Program text (code) size in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_txt:long() .fi .sp .nf 2) proc_mem_txt:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the current process text (code) size in pages, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the given process text (code) size in pages, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::pstrace.3stap000066400000000000000000000032131356460210500266120ustar00rootroot00000000000000'\" t .\" Title: function::pstrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PSTRACE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pstrace \- Chain of processes and pids back to init(1) .SH "SYNOPSIS" .sp .nf pstrace:string(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 Pointer to task struct of process .RE .SH "DESCRIPTION" .PP This function returns a string listing execname and pid for each process starting from \fItask\fR back to the process ancestor that init(1) spawned\&. .SH SEE ALSO\n .IR tapset::pstrace (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qs_done.3stap000066400000000000000000000031431356460210500266030ustar00rootroot00000000000000'\" t .\" Title: function::qs_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_DONE" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qs_done \- Function to record finishing request .SH "SYNOPSIS" .sp .nf qs_done(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the service that finished .RE .SH "DESCRIPTION" .PP This function records that a request originally from the given queue has completed being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qs_run.3stap000066400000000000000000000032341356460210500264630ustar00rootroot00000000000000'\" t .\" Title: function::qs_run .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_RUN" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qs_run \- Function to record being moved from wait queue to being serviced .SH "SYNOPSIS" .sp .nf qs_run(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the service being moved and started .RE .SH "DESCRIPTION" .PP This function records that the previous enqueued request was removed from the given wait queue and is now being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qs_wait.3stap000066400000000000000000000031221356460210500266170ustar00rootroot00000000000000'\" t .\" Title: function::qs_wait .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_WAIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qs_wait \- Function to record enqueue requests .SH "SYNOPSIS" .sp .nf qs_wait(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the queue requesting enqueue .RE .SH "DESCRIPTION" .PP This function records that a new request was enqueued for the given queue name\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_blocked.3stap000066400000000000000000000033111356460210500274370ustar00rootroot00000000000000'\" t .\" Title: function::qsq_blocked .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_BLOCKE" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_blocked \- Returns the time reqest was on the wait queue .SH "SYNOPSIS" .sp .nf qsq_blocked:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the fraction of elapsed time during which one or more requests were on the wait queue\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_print.3stap000066400000000000000000000035401356460210500271740ustar00rootroot00000000000000'\" t .\" Title: function::qsq_print .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_PRINT" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_print \- Prints a line of statistics for the given queue .SH "SYNOPSIS" .sp .nf qsq_print(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .SH "DESCRIPTION" .PP This function prints a line containing the following .SH "STATISTICS FOR THE GIVEN QUEUE" .PP the queue name, the average rate of requests per second, the average wait queue length, the average time on the wait queue, the average time to service a request, the percentage of time the wait queue was used, and the percentage of time request was being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_service_time.3stap000066400000000000000000000033351356460210500305200ustar00rootroot00000000000000'\" t .\" Title: function::qsq_service_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_SERVIC" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_service_time \- Amount of time per request service .SH "SYNOPSIS" .sp .nf qsq_service_time:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average time in microseconds required to service a request once it is removed from the wait queue\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_start.3stap000066400000000000000000000033061356460210500271750ustar00rootroot00000000000000'\" t .\" Title: function::qsq_start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_START" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_start \- Function to reset the stats for a queue .SH "SYNOPSIS" .sp .nf qsq_start(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the service that finished .RE .SH "DESCRIPTION" .PP This function resets the statistics counters for the given queue, and restarts tracking from the moment the function was called\&. This function is also used to create intialize a queue\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_throughput.3stap000066400000000000000000000032541356460210500302530ustar00rootroot00000000000000'\" t .\" Title: function::qsq_throughput .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_THROUG" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_throughput \- Number of requests served per unit time .SH "SYNOPSIS" .sp .nf qsq_throughput:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average number or requests served per microsecond\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_utilization.3stap000066400000000000000000000033241356460210500304130ustar00rootroot00000000000000'\" t .\" Title: function::qsq_utilization .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_UTILIZ" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_utilization \- Fraction of time that any request was being serviced .SH "SYNOPSIS" .sp .nf qsq_utilization:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average time in microseconds that at least one request was being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_wait_queue_length.3stap000066400000000000000000000032321356460210500315470ustar00rootroot00000000000000'\" t .\" Title: function::qsq_wait_queue_length .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_WAIT_Q" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_wait_queue_length \- length of wait queue .SH "SYNOPSIS" .sp .nf qsq_wait_queue_length:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average length of the wait queue .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::qsq_wait_time.3stap000066400000000000000000000033451356460210500300250ustar00rootroot00000000000000'\" t .\" Title: function::qsq_wait_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_WAIT_T" "3stap" "November 2019" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_wait_time \- Amount of time in queue + service per request .SH "SYNOPSIS" .sp .nf qsq_wait_time:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average time in microseconds that it took for a request to be serviced (\fBqs_wait\fR to \fBqa_done\fR)\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::raise.3stap000066400000000000000000000032061356460210500262560ustar00rootroot00000000000000'\" t .\" Title: function::raise .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RAISE" "3stap" "November 2019" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::raise \- raise a signal in the current thread .SH "SYNOPSIS" .sp .nf raise(signo:long) .fi .SH "ARGUMENTS" .PP \fIsigno\fR .RS 4 signal number .RE .SH "DESCRIPTION" .PP This function calls the kernel send_sig routine on the current thread, with the given raw unchecked signal number\&. It may raise an error if \fBsend_sig\fR failed\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::guru-signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::randint.3stap000066400000000000000000000027631356460210500266210ustar00rootroot00000000000000'\" t .\" Title: function::randint .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Random functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RANDINT" "3stap" "November 2019" "SystemTap Tapset Reference" "Random functions Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::randint \- Return a random number between [0,n) .SH "SYNOPSIS" .sp .nf randint:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 Number past upper limit of range, not larger than 2**20\&. .RE .SH SEE ALSO\n .IR tapset::random (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_ms.3stap000066400000000000000000000032031356460210500306560ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_ms \- Reads the time in milliseconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_ms:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in milliseconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_ns.3stap000066400000000000000000000032011356460210500306550ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_ns \- Reads the time in nanoseconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_ns:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in nanoseconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_s.3stap000066400000000000000000000031661356460210500305110ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_s \- Reads the time in seconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_s:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in seconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_us.3stap000066400000000000000000000032031356460210500306660ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_us \- Reads the time in microseconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_us:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in microseconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::real_mount.3stap000066400000000000000000000031171356460210500273210ustar00rootroot00000000000000'\" t .\" Title: function::real_mount .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REAL_MOUNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::real_mount \- get the \*(Aqstruct mount\*(Aq pointer .SH "SYNOPSIS" .sp .nf real_mount:long(vfsmnt:long) .fi .SH "ARGUMENTS" .PP \fIvfsmnt\fR .RS 4 Pointer to \*(Aqstruct vfsmount\*(Aq .RE .SH "DESCRIPTION" .PP .PP Returns the \*(Aqstruct mount\*(Aq pointer value for a \*(Aqstruct vfsmount\*(Aq pointer\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::register.3stap000066400000000000000000000052371356460210500270050ustar00rootroot00000000000000'\" t .\" Title: function::register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGISTER" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::register \- Return the signed value of the named CPU register .SH "SYNOPSIS" .sp .nf register:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 Name of the register to return .RE .SH "DESCRIPTION" .PP Return the value of the named CPU register, as it was saved when the current probe point was hit\&. If the register is 32 bits, it is sign\-extended to 64 bits\&. .PP For the i386 architecture, the following names are recognized\&. (name1/name2 indicates that name1 and name2 are alternative names for the same register\&.) eax/ax, ebp/bp, ebx/bx, ecx/cx, edi/di, edx/dx, eflags/flags, eip/ip, esi/si, esp/sp, orig_eax/orig_ax, xcs/cs, xds/ds, xes/es, xfs/fs, xss/ss\&. .PP For the x86_64 architecture, the following names are recognized: 64\-bit registers: r8, r9, r10, r11, r12, r13, r14, r15, rax/ax, rbp/bp, rbx/bx, rcx/cx, rdi/di, rdx/dx, rip/ip, rsi/si, rsp/sp; 32\-bit registers: eax, ebp, ebx, ecx, edx, edi, edx, eip, esi, esp, flags/eflags, orig_eax; segment registers: xcs/cs, xss/ss\&. .PP For powerpc, the following names are recognized: r0, r1, \&.\&.\&. r31, nip, msr, orig_gpr3, ctr, link, xer, ccr, softe, trap, dar, dsisr, result\&. .PP For s390x, the following names are recognized: r0, r1, \&.\&.\&. r15, args, psw\&.mask, psw\&.addr, orig_gpr2, ilc, trap\&. .PP For AArch64, the following names are recognized: x0, x1, \&.\&.\&. x30, fp, lr, sp, pc, and orig_x0\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::registers_valid.3stap000066400000000000000000000032771356460210500303510ustar00rootroot00000000000000'\" t .\" Title: function::registers_valid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGISTERS_" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::registers_valid \- Determines validity of \fBregister\fR and \fBu_register\fR in current context .SH "SYNOPSIS" .sp .nf registers_valid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns 1 if \fBregister\fR and \fBu_register\fR can be used in the current context, or 0 otherwise\&. For example, \fBregisters_valid\fR returns 0 when called from a begin or end probe\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::regparm.3stap000066400000000000000000000035751356460210500266210ustar00rootroot00000000000000'\" t .\" Title: function::regparm .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGPARM" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::regparm \- Specify regparm value used to compile function .SH "SYNOPSIS" .sp .nf regparm(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 original regparm value .RE .SH "DESCRIPTION" .PP Call this function with argument n before accessing function arguments using the *_arg function is the function was build with the gcc \-mregparm=n option\&. .PP (The i386 kernel is built with \e\-mregparm=3, so systemtap considers regparm(3) the default for kernel functions on that architecture\&.) Only valid on i386 and x86_64 (when probing 32bit applications)\&. Produces an error on other architectures\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::remote_id.3stap000066400000000000000000000035211356460210500271220ustar00rootroot00000000000000'\" t .\" Title: function::remote_id .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REMOTE_ID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::remote_id \- The index of this instance in a remote execution\&. .SH "SYNOPSIS" .sp .nf remote_id:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns a number 0\&.\&.N, which is the unique index of this particular script execution from a swarm of \(lqstap \-\-remote A \-\-remote B \&.\&.\&.\(rq runs, and is the same number \(lqstap \-\-remote\-prefix\(rq would print\&. The function returns \-1 if the script was not launched with \(lqstap \-\-remote\(rq, or if the remote staprun/stapsh are older than version 1\&.7\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::remote_uri.3stap000066400000000000000000000033361356460210500273310ustar00rootroot00000000000000'\" t .\" Title: function::remote_uri .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REMOTE_URI" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::remote_uri \- The name of this instance in a remote execution\&. .SH "SYNOPSIS" .sp .nf remote_uri:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the remote host used to invoke this particular script execution from a swarm of \(lqstap \-\-remote\(rq runs\&. It may not be unique among the swarm\&. The function returns an empty string if the script was not launched with \(lqstap \-\-remote\(rq\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::return_str.3stap000066400000000000000000000034111356460210500273600ustar00rootroot00000000000000'\" t .\" Title: function::return_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURN_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::return_str \- Formats the return value as a string .SH "SYNOPSIS" .sp .nf return_str:string(format:long,ret:long) .fi .SH "ARGUMENTS" .PP \fIformat\fR .RS 4 Variable to determine return type base value .RE .PP \fIret\fR .RS 4 Return value (typically \fB$return\fR) .RE .SH "DESCRIPTION" .PP This function is used by the syscall tapset, and returns a string\&. Set format equal to 1 for a decimal, 2 for hex, 3 for octal\&. .PP Note that this function is preferred over \fBreturnstr\fR\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::returnstr.3stap000066400000000000000000000034461356460210500272310ustar00rootroot00000000000000'\" t .\" Title: function::returnstr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURNSTR" "3stap" "November 2019" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::returnstr \- Formats the return value as a string .SH "SYNOPSIS" .sp .nf returnstr:string(format:long) .fi .SH "ARGUMENTS" .PP \fIformat\fR .RS 4 Variable to determine return type base value .RE .SH "DESCRIPTION" .PP This function is used by the nd_syscall tapset, and returns a string\&. Set format equal to 1 for a decimal, 2 for hex, 3 for octal\&. .PP Note that this function should only be used in dwarfless probes (i\&.e\&. \*(Aqkprobe\&.function(\(lqfoo\(rq)\*(Aq)\&. Other probes should use \fBreturn_str\fR\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::returnval.3stap000066400000000000000000000032731356460210500272010ustar00rootroot00000000000000'\" t .\" Title: function::returnval .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURNVAL" "3stap" "November 2019" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::returnval \- Possible return value of probed function .SH "SYNOPSIS" .sp .nf returnval:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Return the value of the register in which function values are typically returned\&. Can be used in probes where \fB$return\fR isn\*(Aqt available\&. This is only a guess of the actual return value and can be totally wrong\&. Normally only used in dwarfless probes\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::reverse_path_walk.3stap000066400000000000000000000030431356460210500306570ustar00rootroot00000000000000'\" t .\" Title: function::reverse_path_walk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REVERSE_PA" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::reverse_path_walk \- get the full dirent path .SH "SYNOPSIS" .sp .nf reverse_path_walk:string(dentry:long) .fi .SH "ARGUMENTS" .PP \fIdentry\fR .RS 4 Pointer to dentry\&. .RE .SH "DESCRIPTION" .PP .PP Returns the path name (partial path to mount point)\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::rlimit_from_str.3stap000066400000000000000000000032431356460210500303670ustar00rootroot00000000000000'\" t .\" Title: function::rlimit_from_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: RLIMIT Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RLIMIT_FRO" "3stap" "November 2019" "SystemTap Tapset Reference" "RLIMIT Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::rlimit_from_str \- Symbolic string associated with resource limit code .SH "SYNOPSIS" .sp .nf rlimit_from_str:long(lim_str:string) .fi .SH "ARGUMENTS" .PP \fIlim_str\fR .RS 4 The string representation of limit .RE .SH "DESCRIPTION" .PP This function returns the number associated with the given string, such as 0 for the string RLIMIT_CPU, or \-1 for an out\-of\-range value\&. .SH SEE ALSO\n .IR tapset::rlimit (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::s32_arg.3stap000066400000000000000000000030571356460210500264170ustar00rootroot00000000000000'\" t .\" Title: function::s32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::S32_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::s32_arg \- Return function argument as signed 32\-bit value .SH "SYNOPSIS" .sp .nf s32_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the signed 32\-bit value of argument n, same as int_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::s64_arg.3stap000066400000000000000000000030641356460210500264220ustar00rootroot00000000000000'\" t .\" Title: function::s64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::S64_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::s64_arg \- Return function argument as signed 64\-bit value .SH "SYNOPSIS" .sp .nf s64_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the signed 64\-bit value of argument n, same as longlong_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sa_flags_str.3stap000066400000000000000000000027701356460210500276270ustar00rootroot00000000000000'\" t .\" Title: function::sa_flags_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SA_FLAGS_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sa_flags_str \- Returns the string representation of sa_flags .SH "SYNOPSIS" .sp .nf sa_flags_str:string(sa_flags:long) .fi .SH "ARGUMENTS" .PP \fIsa_flags\fR .RS 4 the set of flags to convert to string\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sa_handler.3stap000066400000000000000000000000531356460210500272500ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sa_handler_str.3stap000066400000000000000000000031541356460210500301450ustar00rootroot00000000000000'\" t .\" Title: function::sa_handler_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SA_HANDLER" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sa_handler_str \- Returns the string representation of an sa_handler .SH "SYNOPSIS" .sp .nf sa_handler_str(handler:) .fi .SH "ARGUMENTS" .PP \fIhandler\fR .RS 4 the sa_handler to convert to string\&. .RE .SH "DESCRIPTION" .PP Returns the string representation of an sa_handler\&. If it is not SIG_DFL, SIG_IGN or SIG_ERR, it will return the address of the handler\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_char.3stap000066400000000000000000000034221356460210500303030ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_char \- Writes a char value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_char(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the char to .RE .PP \fIval\fR .RS 4 The char which is to be written .RE .SH "DESCRIPTION" .PP Writes the char value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_int.3stap000066400000000000000000000034141356460210500301610ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_int \- Writes an int value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_int(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the int to .RE .PP \fIval\fR .RS 4 The int which is to be written .RE .SH "DESCRIPTION" .PP Writes the int value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_long.3stap000066400000000000000000000034221356460210500303250ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_long \- Writes a long value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_long(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the long to .RE .PP \fIval\fR .RS 4 The long which is to be written .RE .SH "DESCRIPTION" .PP Writes the long value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_pointer.3stap000066400000000000000000000034521356460210500310510ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_pointer \- Writes a pointer value to kernel memory\&. .SH "SYNOPSIS" .sp .nf set_kernel_pointer(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the pointer to .RE .PP \fIval\fR .RS 4 The pointer which is to be written .RE .SH "DESCRIPTION" .PP Writes the pointer value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_short.3stap000066400000000000000000000034311356460210500305250ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_short \- Writes a short value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_short(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the short to .RE .PP \fIval\fR .RS 4 The short which is to be written .RE .SH "DESCRIPTION" .PP Writes the short value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_string.3stap000066400000000000000000000034111356460210500306720ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_string \- Writes a string to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_string(addr:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the string to .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string to a given kernel memory address\&. Reports an error on string copy fault\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_string_n.3stap000066400000000000000000000035721356460210500312170ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_string_n \- Writes a string of given length to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_string_n(addr:long,n:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the string to .RE .PP \fIn\fR .RS 4 The maximum length of the string .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string up to a maximum given length to a given kernel memory address\&. Reports an error on string copy fault\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_user_char.3stap000066400000000000000000000034071356460210500300040ustar00rootroot00000000000000'\" t .\" Title: function::set_user_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_C" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_char \- Writes a char value to user memory .SH "SYNOPSIS" .sp .nf set_user_char(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the char to .RE .PP \fIval\fR .RS 4 The char which is to be written .RE .SH "DESCRIPTION" .PP Writes the char value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_user_int.3stap000066400000000000000000000034011356460210500276530ustar00rootroot00000000000000'\" t .\" Title: function::set_user_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_I" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_int \- Writes an int value to user memory .SH "SYNOPSIS" .sp .nf set_user_int(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the int to .RE .PP \fIval\fR .RS 4 The int which is to be written .RE .SH "DESCRIPTION" .PP Writes the int value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_user_long.3stap000066400000000000000000000034071356460210500300260ustar00rootroot00000000000000'\" t .\" Title: function::set_user_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_L" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_long \- Writes a long value to user memory .SH "SYNOPSIS" .sp .nf set_user_long(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the long to .RE .PP \fIval\fR .RS 4 The long which is to be written .RE .SH "DESCRIPTION" .PP Writes the long value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_user_pointer.3stap000066400000000000000000000034371356460210500305520ustar00rootroot00000000000000'\" t .\" Title: function::set_user_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_P" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_pointer \- Writes a pointer value to user memory\&. .SH "SYNOPSIS" .sp .nf set_user_pointer(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the pointer to .RE .PP \fIval\fR .RS 4 The pointer which is to be written .RE .SH "DESCRIPTION" .PP Writes the pointer value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_user_short.3stap000066400000000000000000000034161356460210500302260ustar00rootroot00000000000000'\" t .\" Title: function::set_user_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_short \- Writes a short value to user memory .SH "SYNOPSIS" .sp .nf set_user_short(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the short to .RE .PP \fIval\fR .RS 4 The short which is to be written .RE .SH "DESCRIPTION" .PP Writes the short value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_user_string.3stap000066400000000000000000000034211356460210500303710ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_string \- Writes a string to user memory .SH "SYNOPSIS" .sp .nf set_user_string(addr:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the string to .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::set_user_string_n.3stap000066400000000000000000000035571356460210500307200ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_string_n \- Writes a string of given length to user memory .SH "SYNOPSIS" .sp .nf set_user_string_n(addr:long,n:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the string to .RE .PP \fIn\fR .RS 4 The maximum length of the string .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string up to a maximum given length to a given user memory address\&. Reports an error on string copy fault\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sid.3stap000066400000000000000000000030721356460210500257330ustar00rootroot00000000000000'\" t .\" Title: function::sid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sid \- Returns the session ID of the current process .SH "SYNOPSIS" .sp .nf sid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The session ID of a process is the process group ID of the session leader\&. Session ID is stored in the signal_struct since Kernel 2\&.6\&.0\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::signal_str.3stap000066400000000000000000000027451356460210500273270ustar00rootroot00000000000000'\" t .\" Title: function::signal_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SIGNAL_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::signal_str \- Returns the string representation of a signal number .SH "SYNOPSIS" .sp .nf signal_str(num:) .fi .SH "ARGUMENTS" .PP \fInum\fR .RS 4 the signal number to convert to string\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sigset_mask_str.3stap000066400000000000000000000027631356460210500303630ustar00rootroot00000000000000'\" t .\" Title: function::sigset_mask_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SIGSET_MAS" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sigset_mask_str \- Returns the string representation of a sigset .SH "SYNOPSIS" .sp .nf sigset_mask_str:string(mask:long) .fi .SH "ARGUMENTS" .PP \fImask\fR .RS 4 the sigset to convert to string\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sock_fam_num2str.3stap000066400000000000000000000027721356460210500304360ustar00rootroot00000000000000'\" t .\" Title: function::sock_fam_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_FAM_N" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_fam_num2str \- Given a protocol family number, return a string representation .SH "SYNOPSIS" .sp .nf sock_fam_num2str:string(family:long) .fi .SH "ARGUMENTS" .PP \fIfamily\fR .RS 4 The family number .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sock_fam_str2num.3stap000066400000000000000000000030201356460210500304210ustar00rootroot00000000000000'\" t .\" Title: function::sock_fam_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_FAM_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_fam_str2num \- Given a protocol family name (string), return the corresponding protocol family number .SH "SYNOPSIS" .sp .nf sock_fam_str2num:long(family:string) .fi .SH "ARGUMENTS" .PP \fIfamily\fR .RS 4 The family name .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sock_prot_num2str.3stap000066400000000000000000000027661356460210500306620ustar00rootroot00000000000000'\" t .\" Title: function::sock_prot_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_PROT_" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_prot_num2str \- Given a protocol number, return a string representation .SH "SYNOPSIS" .sp .nf sock_prot_num2str:string(proto:long) .fi .SH "ARGUMENTS" .PP \fIproto\fR .RS 4 The protocol number .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sock_prot_str2num.3stap000066400000000000000000000030051356460210500306450ustar00rootroot00000000000000'\" t .\" Title: function::sock_prot_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_PROT_" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_prot_str2num \- Given a protocol name (string), return the corresponding protocol number .SH "SYNOPSIS" .sp .nf sock_prot_str2num:long(proto:string) .fi .SH "ARGUMENTS" .PP \fIproto\fR .RS 4 The protocol name .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sock_state_num2str.3stap000066400000000000000000000027721356460210500310130ustar00rootroot00000000000000'\" t .\" Title: function::sock_state_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_STATE" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_state_num2str \- Given a socket state number, return a string representation .SH "SYNOPSIS" .sp .nf sock_state_num2str:string(state:long) .fi .SH "ARGUMENTS" .PP \fIstate\fR .RS 4 The state number .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sock_state_str2num.3stap000066400000000000000000000027771356460210500310200ustar00rootroot00000000000000'\" t .\" Title: function::sock_state_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_STATE" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_state_str2num \- Given a socket state string, return the corresponding state number .SH "SYNOPSIS" .sp .nf sock_state_str2num:long(state:string) .fi .SH "ARGUMENTS" .PP \fIstate\fR .RS 4 The state name .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::speculate.3stap000066400000000000000000000031521356460210500271400ustar00rootroot00000000000000'\" t .\" Title: function::speculate .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPECULATE" "3stap" "November 2019" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::speculate \- Store a string for possible output later .SH "SYNOPSIS" .sp .nf speculate(id:long,output:string) .fi .SH "ARGUMENTS" .PP \fIid\fR .RS 4 buffer id to store the information in .RE .PP \fIoutput\fR .RS 4 string to write out when commit occurs .RE .SH "DESCRIPTION" .PP Add a string to the speculaive buffer for id\&. .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::speculation.3stap000066400000000000000000000033231356460210500275010ustar00rootroot00000000000000'\" t .\" Title: function::speculation .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPECULATIO" "3stap" "November 2019" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::speculation \- Allocate a new id for speculative output .SH "SYNOPSIS" .sp .nf speculation:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP The \fBspeculation\fR function is called when a new speculation buffer is needed\&. It returns an id for the speculative output\&. There can be multiple threads being speculated on concurrently\&. This id is used by other speculation functions to keep the threads separate\&. .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sprint_backtrace.3stap000066400000000000000000000041511356460210500304710ustar00rootroot00000000000000'\" t .\" Title: function::sprint_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_BAC" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_backtrace \- Return stack back trace as string .SH "SYNOPSIS" .sp .nf sprint_backtrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Returns a simple (kernel) backtrace\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_backtrace\fR\&. Equivalent to sprint_stack(\fBbacktrace\fR), but more efficient (no need to translate between hex strings and final backtrace string)\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sprint_loadavg.3stap000066400000000000000000000031041356460210500301640ustar00rootroot00000000000000'\" t .\" Title: function::sprint_loadavg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_LOA" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_loadavg \- Report a pretty\-printed load average .SH "SYNOPSIS" .sp .nf sprint_loadavg:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the a string with three decimal numbers in the usual format for 1\-, 5\- and 15\-minute load averages\&. .SH SEE ALSO\n .IR tapset::loadavg (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sprint_stack.3stap000066400000000000000000000044221356460210500276600ustar00rootroot00000000000000'\" t .\" Title: function::sprint_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_STA" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_stack \- Return stack for kernel addresses from string .SH "SYNOPSIS" .sp .nf sprint_stack:string(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal (kernel) addresses .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBbacktrace\fR\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_stack\&. .SH "NOTE" .PP it is recommended to use \fBsprint_syms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sprint_syms.3stap000066400000000000000000000044031356460210500275450ustar00rootroot00000000000000'\" t .\" Title: function::sprint_syms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_SYM" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_syms \- Return stack for kernel addresses from string .SH "SYNOPSIS" .sp .nf sprint_syms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (kernel) addresses .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to \fBstack\fR, \fBcallers\fR, and similar functions\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found), as obtained from \fBsymdata\fR\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_syms\fR\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sprint_ubacktrace.3stap000066400000000000000000000045741356460210500306670ustar00rootroot00000000000000'\" t .\" Title: function::sprint_ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_UBA" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_ubacktrace \- Return stack back trace for current user\-space task as string\&. .SH "SYNOPSIS" .sp .nf sprint_ubacktrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Returns a simple backtrace for the current task\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_ubacktrace\fR\&. Equivalent to sprint_ustack(\fBubacktrace\fR), but more efficient (no need to translate between hex strings and final backtrace string)\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sprint_ustack.3stap000066400000000000000000000045001356460210500300420ustar00rootroot00000000000000'\" t .\" Title: function::sprint_ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_UST" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_ustack \- Return stack for the current task from string\&. .SH "SYNOPSIS" .sp .nf sprint_ustack:string(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal addresses for the current task\&. .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBubacktrace\fR for the current task\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_ustack\&. .SH "NOTE" .PP it is recommended to use \fBsprint_usyms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::sprint_usyms.3stap000066400000000000000000000044071356460210500277360ustar00rootroot00000000000000'\" t .\" Title: function::sprint_usyms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_USY" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_usyms \- Return stack for user addresses from string .SH "SYNOPSIS" .sp .nf sprint_usyms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (user) addresses .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to \fBustack\fR, \fBucallers\fR, and similar functions\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found), as obtained from \fBusymdata\fR\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_usyms\fR\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::stack.3stap000066400000000000000000000034151356460210500262620ustar00rootroot00000000000000'\" t .\" Title: function::stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack \- Return address at given depth of kernel stack backtrace .SH "SYNOPSIS" .sp .nf stack:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack\&. .RE .SH "DESCRIPTION" .PP Performs a simple (kernel) backtrace, and returns the element at the specified position\&. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times \fBstack\fR is called, or in what order\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::stack_size.3stap000066400000000000000000000027611356460210500273170ustar00rootroot00000000000000'\" t .\" Title: function::stack_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_SIZE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack_size \- Return the size of the kernel stack .SH "SYNOPSIS" .sp .nf stack_size:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the size of the kernel stack\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::stack_unused.3stap000066400000000000000000000030531356460210500276430ustar00rootroot00000000000000'\" t .\" Title: function::stack_unused .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_UNUS" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack_unused \- Returns the amount of kernel stack currently available .SH "SYNOPSIS" .sp .nf stack_unused:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function determines how many bytes are currently available in the kernel stack\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::stack_used.3stap000066400000000000000000000030211356460210500272730ustar00rootroot00000000000000'\" t .\" Title: function::stack_used .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_USED" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack_used \- Returns the amount of kernel stack used .SH "SYNOPSIS" .sp .nf stack_used:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function determines how many bytes are currently used in the kernel stack\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::start_stopwatch.3stap000066400000000000000000000031041356460210500304010ustar00rootroot00000000000000'\" t .\" Title: function::start_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::START_STOP" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::start_stopwatch \- Start a stopwatch .SH "SYNOPSIS" .sp .nf start_stopwatch(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 the stopwatch name .RE .SH "DESCRIPTION" .PP Start stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::stop_stopwatch.3stap000066400000000000000000000030771356460210500302420ustar00rootroot00000000000000'\" t .\" Title: function::stop_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STOP_STOPW" "3stap" "November 2019" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stop_stopwatch \- Stop a stopwatch .SH "SYNOPSIS" .sp .nf stop_stopwatch(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 the stopwatch name .RE .SH "DESCRIPTION" .PP Stop stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::stp_pid.3stap000066400000000000000000000031351356460210500266160ustar00rootroot00000000000000'\" t .\" Title: function::stp_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STP_PID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stp_pid \- The process id of the stapio process .SH "SYNOPSIS" .sp .nf stp_pid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process id of the stapio process that launched this script\&. There could be other SystemTap scripts and stapio processes running on the system\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::str_replace.3stap000066400000000000000000000034551356460210500274640ustar00rootroot00000000000000'\" t .\" Title: function::str_replace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STR_REPLAC" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::str_replace \- str_replace Replaces all instances of a substring with another .SH "SYNOPSIS" .sp .nf str_replace:string(prnt_str:string,srch_str:string,rplc_str:string) .fi .SH "ARGUMENTS" .PP \fIprnt_str\fR .RS 4 the string to search and replace in .RE .PP \fIsrch_str\fR .RS 4 the substring which is used to search in \fIprnt_str\fR string .RE .PP \fIrplc_str\fR .RS 4 the substring which is used to replace \fIsrch_str\fR .RE .SH "DESCRIPTION" .PP This function returns the given string with substrings replaced\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::string_quoted.3stap000066400000000000000000000034451356460210500300470ustar00rootroot00000000000000'\" t .\" Title: function::string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRING_QUO" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::string_quoted \- Quotes a given string .SH "SYNOPSIS" .sp .nf string_quoted:string(str:string) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 The kernel address to retrieve the string from .RE .SH "DESCRIPTION" .PP Returns the quoted string version of the given string, with characters where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::stringat.3stap000066400000000000000000000034641356460210500270140ustar00rootroot00000000000000'\" t .\" Title: function::stringat .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRINGAT" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stringat \- Returns the char at a given position in the string .SH "SYNOPSIS" .sp .nf stringat:long(str:string,pos:long) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 the string to fetch the character from .RE .PP \fIpos\fR .RS 4 the position to get the character from (first character is 0) .RE .SH "DESCRIPTION" .PP This function returns the character at a given position in the string or zero if the string doesn\*(Aqt have as many characters\&. Reports an error if pos is out of bounds\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::strlen.3stap000066400000000000000000000031021356460210500264550ustar00rootroot00000000000000'\" t .\" Title: function::strlen .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRLEN" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::strlen \- Returns the length of a string .SH "SYNOPSIS" .sp .nf strlen:long(s:string) .fi .SH "ARGUMENTS" .PP \fIs\fR .RS 4 the string .RE .SH "DESCRIPTION" .PP This function returns the length of the string, which can be zero up to MAXSTRINGLEN\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::strpos.3stap000066400000000000000000000034561356460210500265140ustar00rootroot00000000000000'\" t .\" Title: function::strpos .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRPOS" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::strpos \- Returns location of a substring within another string .SH "SYNOPSIS" .sp .nf strpos:long(s1:string,s2:string) .fi .SH "ARGUMENTS" .PP \fIs1\fR .RS 4 string to search in .RE .PP \fIs2\fR .RS 4 substring to find .RE .SH "DESCRIPTION" .PP This function returns location of the first occurence of string \fIs2\fR within \fIs1\fR, namely the return value is 0 in case \fIs2\fR is a prefix of \fIs1\fR\&. If \fIs2\fR is not a substring of \fIs1\fR, then the return value is \-1\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::strtol.3stap000066400000000000000000000033711356460210500265050ustar00rootroot00000000000000'\" t .\" Title: function::strtol .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRTOL" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::strtol \- strtol \- Convert a string to a long .SH "SYNOPSIS" .sp .nf strtol:long(str:string,base:long) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 string to convert .RE .PP \fIbase\fR .RS 4 the base to use .RE .SH "DESCRIPTION" .PP This function converts the string representation of a number to an integer\&. The \fIbase\fR parameter indicates the number base to assume for the string (eg\&. 16 for hex, 8 for octal, 2 for binary)\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::substr.3stap000066400000000000000000000035721356460210500265030ustar00rootroot00000000000000'\" t .\" Title: function::substr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SUBSTR" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::substr \- Returns a substring .SH "SYNOPSIS" .sp .nf substr:string(str:string,start:long,length:long) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 the string to take a substring from .RE .PP \fIstart\fR .RS 4 starting position of the extracted string (first character is 0) .RE .PP \fIlength\fR .RS 4 length of string to return .RE .SH "DESCRIPTION" .PP Returns the substring of the given string at the given start position with the given length (or smaller if the length of the original string is less than start + length, or length is bigger than MAXSTRINGLEN)\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::switch_file.3stap000066400000000000000000000031231356460210500274510ustar00rootroot00000000000000'\" t .\" Title: function::switch_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Output file switching Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SWITCH_FIL" "3stap" "November 2019" "SystemTap Tapset Reference" "Output file switching Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::switch_file \- switch to the next output file .SH "SYNOPSIS" .sp .nf switch_file() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function sends a signal to the stapio process, commanding it to rotate to the next output file when output is sent to file(s)\&. .SH SEE ALSO\n .IR tapset::switchfile (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::symdata.3stap000066400000000000000000000036431356460210500266220ustar00rootroot00000000000000'\" t .\" Title: function::symdata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMDATA" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symdata \- Return the kernel symbol and module offset for the address .SH "SYNOPSIS" .sp .nf symdata:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address if known, the offset from the start and size of the symbol, plus module name (between brackets)\&. If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added\&. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::symfile.3stap000066400000000000000000000031341356460210500266230ustar00rootroot00000000000000'\" t .\" Title: function::symfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMFILE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symfile \- Return the file name of a given address\&. .SH "SYNOPSIS" .sp .nf symfile:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name of the given address, if known\&. If the file name cannot be found, the hex string representation of the address will be returned\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::symfileline.3stap000066400000000000000000000033371356460210500275000ustar00rootroot00000000000000'\" t .\" Title: function::symfileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMFILELIN" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symfileline \- Return the file name and line number of an address\&. .SH "SYNOPSIS" .sp .nf symfileline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name and the (approximate) line number of the given address, if known\&. If the file name or the line number cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::symline.3stap000066400000000000000000000031531356460210500266340ustar00rootroot00000000000000'\" t .\" Title: function::symline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMLINE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symline \- Return the line number of an address\&. .SH "SYNOPSIS" .sp .nf symline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (approximate) line number of the given address, if known\&. If the line number cannot be found, the hex string representation of the address will be returned\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::symname.3stap000066400000000000000000000032301356460210500266210ustar00rootroot00000000000000'\" t .\" Title: function::symname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMNAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symname \- Return the kernel symbol associated with the given address .SH "SYNOPSIS" .sp .nf symname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address if known\&. If not known it will return the hex string representation of addr\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::system.3stap000066400000000000000000000034711356460210500265030ustar00rootroot00000000000000'\" t .\" Title: function::system .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Shell command functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYSTEM" "3stap" "November 2019" "SystemTap Tapset Reference" "Shell command functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::system \- Issue a command to the system .SH "SYNOPSIS" .sp .nf system(cmd:string) .fi .SH "ARGUMENTS" .PP \fIcmd\fR .RS 4 the command to issue to the system .RE .SH "DESCRIPTION" .PP This function runs a command on the system\&. The command is started in the background some time after the current probe completes\&. The command is run with the same UID as the user running the stap or staprun command\&. The runtime may impose a relatively short length limit on the command string\&. Exceeding it may print a warning\&. .SH SEE ALSO\n .IR tapset::system (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::target.3stap000066400000000000000000000034611356460210500264440ustar00rootroot00000000000000'\" t .\" Title: function::target .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::target \- Return the process ID of the target process .SH "SYNOPSIS" .sp .nf target:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process ID of the target process\&. This is useful in conjunction with the \-x PID or \-c CMD command\-line options to stap\&. An example of its use is to create scripts that filter on a specific process\&. .PP \-x \fBtarget\fR returns the pid specified by \-x .PP \-c \fBtarget\fR returns the pid for the executed command specified by \-c .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::target_set_pid.3stap000066400000000000000000000032451356460210500301530ustar00rootroot00000000000000'\" t .\" Title: function::target_set_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET_SET" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::target_set_pid \- Does pid descend from target process? .SH "SYNOPSIS" .sp .nf target_set_pid(pid:) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of the process to query .RE .SH "DESCRIPTION" .PP This function returns whether the given process\-id is within the \(lqtarget set\(rq, that is whether it is a descendant of the top\-level \fBtarget\fR process\&. .SH SEE ALSO\n .IR tapset::target_set (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::target_set_report.3stap000066400000000000000000000030611356460210500307060ustar00rootroot00000000000000'\" t .\" Title: function::target_set_report .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET_SET" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::target_set_report \- Print a report about the target set .SH "SYNOPSIS" .sp .nf target_set_report() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function prints a report about the processes in the target set, and their ancestry\&. .SH SEE ALSO\n .IR tapset::target_set (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_ancestry.3stap000066400000000000000000000033431356460210500300270ustar00rootroot00000000000000'\" t .\" Title: function::task_ancestry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_ANCES" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ancestry \- The ancestry of the given task .SH "SYNOPSIS" .sp .nf task_ancestry:string(task:long,with_time:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .PP \fIwith_time\fR .RS 4 set to 1 to also print the start time of processes (given as a delta from boot time) .RE .SH "DESCRIPTION" .PP Return the ancestry of the given task in the form of \(lqgrandparent_process=>parent_process=>process\(rq\&. .SH SEE ALSO\n .IR tapset::task_ancestry (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_backtrace.3stap000066400000000000000000000032771356460210500301240ustar00rootroot00000000000000'\" t .\" Title: function::task_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_BACKT" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_backtrace \- Hex backtrace of an arbitrary task .SH "SYNOPSIS" .sp .nf task_backtrace:string(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 pointer to task_struct .RE .SH "DESCRIPTION" .PP This function returns a string of hex addresses that are a backtrace of the stack of a particular task Output may be truncated as per maximum string length\&. Deprecated in SystemTap 1\&.6\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_cpu.3stap000066400000000000000000000030251356460210500267630ustar00rootroot00000000000000'\" t .\" Title: function::task_cpu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CPU" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_cpu \- The scheduled cpu of the task .SH "SYNOPSIS" .sp .nf task_cpu:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the scheduled cpu for the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_current.3stap000066400000000000000000000031641356460210500276620ustar00rootroot00000000000000'\" t .\" Title: function::task_current .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CURRE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_current \- The current task_struct of the current task .SH "SYNOPSIS" .sp .nf task_current:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the task_struct representing the current process\&. This address can be passed to the various task_*() functions to extract more task\-specific data\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_cwd_path.3stap000066400000000000000000000027251356460210500277730ustar00rootroot00000000000000'\" t .\" Title: function::task_cwd_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CWD_P" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_cwd_path \- get the path struct pointer for a task\*(Aqs current working directory .SH "SYNOPSIS" .sp .nf task_cwd_path:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_dentry_path.3stap000066400000000000000000000032641356460210500305220ustar00rootroot00000000000000'\" t .\" Title: function::task_dentry_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_DENTR" "3stap" "November 2019" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_dentry_path \- get the full dentry path .SH "SYNOPSIS" .sp .nf task_dentry_path:string(task:long,dentry:long,vfsmnt:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE .PP \fIdentry\fR .RS 4 direntry pointer\&. .RE .PP \fIvfsmnt\fR .RS 4 vfsmnt pointer\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_egid.3stap000066400000000000000000000030521356460210500271040ustar00rootroot00000000000000'\" t .\" Title: function::task_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EGID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_egid \- The effective group identifier of the task .SH "SYNOPSIS" .sp .nf task_egid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective group id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_euid.3stap000066400000000000000000000030501356460210500271200ustar00rootroot00000000000000'\" t .\" Title: function::task_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EUID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_euid \- The effective user identifier of the task .SH "SYNOPSIS" .sp .nf task_euid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_exe_file.3stap000066400000000000000000000027131356460210500277570ustar00rootroot00000000000000'\" t .\" Title: function::task_exe_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EXE_F" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_exe_file \- get the file struct pointer for a task\*(Aqs executable file .SH "SYNOPSIS" .sp .nf task_exe_file:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_execname.3stap000066400000000000000000000030061356460210500277600ustar00rootroot00000000000000'\" t .\" Title: function::task_execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EXECN" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_execname \- The name of the task .SH "SYNOPSIS" .sp .nf task_execname:string(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP Return the name of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_fd_lookup.3stap000066400000000000000000000031141356460210500301550ustar00rootroot00000000000000'\" t .\" Title: function::task_fd_lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_FD_LO" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_fd_lookup \- get the file struct for a task\*(Aqs fd .SH "SYNOPSIS" .sp .nf task_fd_lookup:long(task:long,fd:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE .PP \fIfd\fR .RS 4 file descriptor number\&. .RE .SH "DESCRIPTION" .PP Returns the file struct pointer for a task\*(Aqs file descriptor\&. systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_gid.3stap000066400000000000000000000030221356460210500267340ustar00rootroot00000000000000'\" t .\" Title: function::task_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_GID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_gid \- The group identifier of the task .SH "SYNOPSIS" .sp .nf task_gid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the group id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_max_file_handles.3stap000066400000000000000000000031341356460210500314570ustar00rootroot00000000000000'\" t .\" Title: function::task_max_file_handles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_MAX_F" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_max_file_handles \- The max number of open files for the task .SH "SYNOPSIS" .sp .nf task_max_file_handles:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the maximum number of file handlers for the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_nice.3stap000066400000000000000000000030221356460210500271070ustar00rootroot00000000000000'\" t .\" Title: function::task_nice .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NICE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_nice \- The nice value of the task .SH "SYNOPSIS" .sp .nf task_nice:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the nice value of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_ns_egid.3stap000066400000000000000000000030641356460210500276070ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_EG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_egid \- The effective group identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_egid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective group id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_ns_euid.3stap000066400000000000000000000030621356460210500276230ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_EU" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_euid \- The effective user identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_euid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_ns_gid.3stap000066400000000000000000000031331356460210500274370ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_GI" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_gid \- The group identifier of the task as seen in a namespace .SH "SYNOPSIS" .sp .nf task_ns_gid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the group id of the given task as seen in in the given user namespace\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_ns_pid.3stap000066400000000000000000000031111356460210500274440ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_PI" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_pid \- The process identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_pid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This fucntion returns the process id of the given task based on the specified pid namespace\&.\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_ns_tid.3stap000066400000000000000000000031231356460210500274530ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_TI" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_tid \- The thread identifier of the task as seen in a namespace .SH "SYNOPSIS" .sp .nf task_ns_tid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the thread id of the given task as seen in the pid namespace\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_ns_uid.3stap000066400000000000000000000030331356460210500274540ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_UI" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_uid \- The user identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_uid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_open_file_handles.3stap000066400000000000000000000031271356460210500316350ustar00rootroot00000000000000'\" t .\" Title: function::task_open_file_handles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_OPEN_" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_open_file_handles \- The number of open files of the task .SH "SYNOPSIS" .sp .nf task_open_file_handles:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the number of open file handlers for the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_parent.3stap000066400000000000000000000032151356460210500274660ustar00rootroot00000000000000'\" t .\" Title: function::task_parent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PAREN" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_parent \- The task_struct of the parent task .SH "SYNOPSIS" .sp .nf task_parent:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the parent task_struct of the given task\&. This address can be passed to the various task_*() functions to extract more task\-specific data\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_pid.3stap000066400000000000000000000030261356460210500267510ustar00rootroot00000000000000'\" t .\" Title: function::task_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_pid \- The process identifier of the task .SH "SYNOPSIS" .sp .nf task_pid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This fucntion returns the process id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_prio.3stap000066400000000000000000000030321356460210500271430ustar00rootroot00000000000000'\" t .\" Title: function::task_prio .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PRIO" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_prio \- The priority value of the task .SH "SYNOPSIS" .sp .nf task_prio:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the priority value of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_start_time.3stap000066400000000000000000000031411356460210500303460ustar00rootroot00000000000000'\" t .\" Title: function::task_start_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_START" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_start_time \- Start time of the given task .SH "SYNOPSIS" .sp .nf task_start_time:long(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP Returns the start time of the given task in nanoseconds since boot time or 0 if the task does not exist\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_state.3stap000066400000000000000000000032211356460210500273120ustar00rootroot00000000000000'\" t .\" Title: function::task_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_STATE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_state \- The state of the task .SH "SYNOPSIS" .sp .nf task_state:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP Return the state of the given task, one of: TASK_RUNNING (0), TASK_INTERRUPTIBLE (1), TASK_UNINTERRUPTIBLE (2), TASK_STOPPED (4), TASK_TRACED (8), EXIT_ZOMBIE (16), or EXIT_DEAD (32)\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_stime.3stap000066400000000000000000000036351356460210500273240ustar00rootroot00000000000000'\" t .\" Title: function::task_stime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_STIME" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_stime \- System time of the task .SH "SYNOPSIS" .sp .nf 1) task_stime:long() .fi .sp .nf 2) task_stime:long(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP 1) Returns the system time of the current task in cputime\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .PP 2) Returns the system time of the given task in cputime, or zero if the task doesn\*(Aqt exist\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_tid.3stap000066400000000000000000000030241356460210500267530ustar00rootroot00000000000000'\" t .\" Title: function::task_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_tid \- The thread identifier of the task .SH "SYNOPSIS" .sp .nf task_tid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the thread id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_time_string.3stap000066400000000000000000000031651356460210500305250ustar00rootroot00000000000000'\" t .\" Title: function::task_time_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TIME_" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_time_string \- Human readable string of task time usage .SH "SYNOPSIS" .sp .nf task_time_string:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns a human readable string showing the user and system time the current task has used up to now\&. For example \(lqusr: 0m12\&.908s, sys: 1m6\&.851s\(rq\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_time_string_tid.3stap000066400000000000000000000032621356460210500313630ustar00rootroot00000000000000'\" t .\" Title: function::task_time_string_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TIME_" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_time_string_tid \- Human readable string of task time usage .SH "SYNOPSIS" .sp .nf task_time_string_tid:string(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP Returns a human readable string showing the user and system time the given task has used up to now\&. For example \(lqusr: 0m12\&.908s, sys: 1m6\&.851s\(rq\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_uid.3stap000066400000000000000000000030201356460210500267500ustar00rootroot00000000000000'\" t .\" Title: function::task_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_UID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_uid \- The user identifier of the task .SH "SYNOPSIS" .sp .nf task_uid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::task_utime.3stap000066400000000000000000000036271356460210500273270ustar00rootroot00000000000000'\" t .\" Title: function::task_utime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_UTIME" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_utime \- User time of the task .SH "SYNOPSIS" .sp .nf 1) task_utime:long() .fi .sp .nf 2) task_utime:long(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP 1) Returns the user time of the current task in cputime\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .PP 2) Returns the user time of the given task in cputime, or zero if the task doesn\*(Aqt exist\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_filter_key.3stap000066400000000000000000000036211356460210500306470ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_FIL" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_filter_key \- Default filter function for tcpmib\&.* probes .SH "SYNOPSIS" .sp .nf tcpmib_filter_key:long(sk:long,op:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be counted if \fIsk\fR passes the filter .RE .SH "DESCRIPTION" .PP This function is a default filter function\&. The user can replace this function with their own\&. The user\-supplied filter function returns an index key based on the values in \fIsk\fR\&. A return value of 0 means this particular \fIsk\fR should be not be counted\&. .SH SEE ALSO\n .IR tapset::tcpmib-filter-default (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_get_state.3stap000066400000000000000000000030461356460210500304720ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_get_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_GET" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_get_state \- Get a socket\*(Aqs state .SH "SYNOPSIS" .sp .nf tcpmib_get_state:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct sock .RE .SH "DESCRIPTION" .PP Returns the sk_state from a struct sock\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_local_addr.3stap000066400000000000000000000030741356460210500306000ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_local_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_LOC" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_local_addr \- Get the source address .SH "SYNOPSIS" .sp .nf tcpmib_local_addr:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the saddr from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_local_port.3stap000066400000000000000000000030701356460210500306460ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_LOC" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_local_port \- Get the local port .SH "SYNOPSIS" .sp .nf tcpmib_local_port:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the sport from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_remote_addr.3stap000066400000000000000000000030771356460210500310040ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_remote_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_REM" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_remote_addr \- Get the remote address .SH "SYNOPSIS" .sp .nf tcpmib_remote_addr:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the daddr from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_remote_port.3stap000066400000000000000000000030741356460210500310530ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_remote_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_REM" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_remote_port \- Get the remote port .SH "SYNOPSIS" .sp .nf tcpmib_remote_port:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the dport from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::text_str.3stap000066400000000000000000000032701356460210500270300ustar00rootroot00000000000000'\" t .\" Title: function::text_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TEXT_STR" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::text_str \- Escape any non\-printable chars in a string .SH "SYNOPSIS" .sp .nf text_str:string(input:string) .fi .SH "ARGUMENTS" .PP \fIinput\fR .RS 4 the string to escape .RE .SH "DESCRIPTION" .PP This function accepts a string argument, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::text_strn.3stap000066400000000000000000000037061356460210500272120ustar00rootroot00000000000000'\" t .\" Title: function::text_strn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TEXT_STRN" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::text_strn \- Escape any non\-printable chars in a string .SH "SYNOPSIS" .sp .nf text_strn:string(input:string,len:long,quoted:long) .fi .SH "ARGUMENTS" .PP \fIinput\fR .RS 4 the string to escape .RE .PP \fIlen\fR .RS 4 maximum length of string to return (0 implies MAXSTRINGLEN) .RE .PP \fIquoted\fR .RS 4 put double quotes around the string\&. If input string is truncated it will have \(lq\&.\&.\&.\(rq after the second quote .RE .SH "DESCRIPTION" .PP This function accepts a string of designated length, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::thread_indent.3stap000066400000000000000000000037171356460210500277720ustar00rootroot00000000000000'\" t .\" Title: function::thread_indent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::THREAD_IND" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::thread_indent \- returns an amount of space with the current task information .SH "SYNOPSIS" .sp .nf thread_indent:string(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of space added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns a string with appropriate indentation for a thread\&. Call it with a small positive or matching negative delta\&. If this is the real outermost, initial level of indentation, then the function resets the relative timestamp base to zero\&. The timestamp is as per provided by the __indent_timestamp function, which by default measures microseconds\&. .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::thread_indent_depth.3stap000066400000000000000000000037511356460210500311540ustar00rootroot00000000000000'\" t .\" Title: function::thread_indent_depth .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::THREAD_IND" "3stap" "November 2019" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::thread_indent_depth \- returns the nested\-depth of the current task .SH "SYNOPSIS" .sp .nf thread_indent_depth:long(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of depth added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns an integer equal to the nested function\-call depth starting from the outermost initial level\&. This function is useful for saving space (consumed by whitespace) in traces with long nested function calls\&. Use this function in a similar fashion to \fBthread_indent\fR, i\&.e\&., in call\-probe, use thread_indent_depth(1) and in return\-probe, use thread_indent_depth(\-1) .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tid.3stap000066400000000000000000000027421356460210500257370ustar00rootroot00000000000000'\" t .\" Title: function::tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tid \- Returns the thread ID of a target process .SH "SYNOPSIS" .sp .nf tid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the thread ID of the target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tokenize.3stap000066400000000000000000000046541356460210500270130ustar00rootroot00000000000000'\" t .\" Title: function::tokenize .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TOKENIZE" "3stap" "November 2019" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tokenize \- Return the next non\-empty token in a string .SH "SYNOPSIS" .sp .nf 1) tokenize:string(delim:string) .fi .sp .nf 2) tokenize:string(input:string,delim:string) .fi .SH "ARGUMENTS" .PP \fIdelim\fR .RS 4 set of characters that delimit the tokens .RE .PP \fIinput\fR .RS 4 string to tokenize\&. If empty, returns the next non\-empty token in the string passed in the previous call to \fBtokenize\fR\&. .RE .SH "DESCRIPTION" .PP 1) This function returns the next token in the string passed in the previous call to tokenize\&. If no delimiter is found, the entire remaining input string is * returned\&. It returns empty when no more tokens are available\&. .PP 2) This function returns the next non\-empty token in the given input string, where the tokens are delimited by characters in the delim string\&. If the input string is non\-empty, it returns the first token\&. If the input string is empty, it returns the next token in the string passed in the previous call to tokenize\&. If no delimiter is found, the entire remaining input string is returned\&. It returns empty when no more tokens are available\&. .SH SEE ALSO\n .IR tapset::tokenize (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tz_ctime.3stap000066400000000000000000000036351356460210500267770ustar00rootroot00000000000000'\" t .\" Title: function::tz_ctime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_CTIME" "3stap" "November 2019" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tz_ctime \- Convert seconds since epoch into human readable date/time string, with local time zone .SH "SYNOPSIS" .sp .nf tz_ctime(epochsecs:) .fi .SH "ARGUMENTS" .PP \fIepochsecs\fR .RS 4 number of seconds since epoch (as returned by \fBgettimeofday_s\fR) .RE .SH "DESCRIPTION" .PP Takes an argument of seconds since the epoch as returned by \fBgettimeofday_s\fR\&. Returns a string of the same form as \fBctime\fR, but offsets the epoch time for the local time zone, and appends the name of the local time zone\&. The string length may vary\&. The time zone information is passed by staprun at script startup only\&. .SH SEE ALSO\n .IR tapset::tzinfo (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tz_gmtoff.3stap000066400000000000000000000030361356460210500271530ustar00rootroot00000000000000'\" t .\" Title: function::tz_gmtoff .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_GMTOFF" "3stap" "November 2019" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tz_gmtoff \- Return local time zone offset .SH "SYNOPSIS" .sp .nf tz_gmtoff() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the local time zone offset (seconds west of UTC), as passed by staprun at script startup only\&. .SH SEE ALSO\n .IR tapset::tzinfo (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::tz_name.3stap000066400000000000000000000027741356460210500266210ustar00rootroot00000000000000'\" t .\" Title: function::tz_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_NAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tz_name \- Return local time zone name .SH "SYNOPSIS" .sp .nf tz_name() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the local time zone name, as passed by staprun at script startup only\&. .SH SEE ALSO\n .IR tapset::tzinfo (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::u32_arg.3stap000066400000000000000000000030641356460210500264170ustar00rootroot00000000000000'\" t .\" Title: function::u32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U32_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::u32_arg \- Return function argument as unsigned 32\-bit value .SH "SYNOPSIS" .sp .nf u32_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the unsigned 32\-bit value of argument n, same as uint_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::u64_arg.3stap000066400000000000000000000030711356460210500264220ustar00rootroot00000000000000'\" t .\" Title: function::u64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U64_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::u64_arg \- Return function argument as unsigned 64\-bit value .SH "SYNOPSIS" .sp .nf u64_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the unsigned 64\-bit value of argument n, same as ulonglong_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::u_register.3stap000066400000000000000000000031571356460210500273300ustar00rootroot00000000000000'\" t .\" Title: function::u_register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U_REGISTER" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::u_register \- Return the unsigned value of the named CPU register .SH "SYNOPSIS" .sp .nf u_register:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 Name of the register to return .RE .SH "DESCRIPTION" .PP Same as register(name), except that if the register is 32 bits wide, it is zero\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::uaddr.3stap000066400000000000000000000034311356460210500262520ustar00rootroot00000000000000'\" t .\" Title: function::uaddr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UADDR" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::uaddr \- User space address of current running task .SH "SYNOPSIS" .sp .nf uaddr:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the address in userspace that the current task was at when the probe occurred\&. When the current running task isn\*(Aqt a user space thread, or the address cannot be found, zero is returned\&. Can be used to see where the current task is combined with \fBusymname\fR or \fBusymdata\fR\&. Often the task will be in the VDSO where it entered the kernel\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ubacktrace.3stap000066400000000000000000000037071356460210500272650ustar00rootroot00000000000000'\" t .\" Title: function::ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UBACKTRACE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ubacktrace \- Hex backtrace of current user\-space task stack\&. .SH "SYNOPSIS" .sp .nf ubacktrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Return a string of hex addresses that are a backtrace of the stack of the current task\&. Output may be truncated as per maximum string length\&. Returns empty string when current probe point cannot determine user backtrace\&. See \fBbacktrace\fR for kernel traceback\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ucallers.3stap000066400000000000000000000037201356460210500267660ustar00rootroot00000000000000'\" t .\" Title: function::ucallers .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UCALLERS" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ucallers \- Return first n elements of user stack backtrace .SH "SYNOPSIS" .sp .nf ucallers:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack (not counting the top level)\&. If n is \-1, print the entire stack\&. .RE .SH "DESCRIPTION" .PP This function returns a string of the first n hex addresses from the backtrace of the user stack\&. Output may be truncated as per maximum string length (MAXSTRINGLEN)\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::udelay.3stap000066400000000000000000000030551356460210500264400ustar00rootroot00000000000000'\" t .\" Title: function::udelay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UDELAY" "3stap" "November 2019" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::udelay \- microsecond delay .SH "SYNOPSIS" .sp .nf udelay(us:long) .fi .SH "ARGUMENTS" .PP \fIus\fR .RS 4 Number of microseconds to delay\&. .RE .SH "DESCRIPTION" .PP This function inserts a multi\-microsecond busy\-delay into a probe handler\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::guru-delay (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::uid.3stap000066400000000000000000000027361356460210500257430ustar00rootroot00000000000000'\" t .\" Title: function::uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UID" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::uid \- Returns the user ID of a target process .SH "SYNOPSIS" .sp .nf uid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the user ID of the target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::uint_arg.3stap000066400000000000000000000031261356460210500267640ustar00rootroot00000000000000'\" t .\" Title: function::uint_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UINT_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::uint_arg \- Return function argument as unsigned int .SH "SYNOPSIS" .sp .nf uint_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as an unsigned int (i\&.e\&., a 32\-bit integer zero\-extended to 64 bits)\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ulong_arg.3stap000066400000000000000000000031701356460210500271300ustar00rootroot00000000000000'\" t .\" Title: function::ulong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ULONG_ARG" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ulong_arg \- Return function argument as unsigned long .SH "SYNOPSIS" .sp .nf ulong_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as an unsigned long\&. On architectures where a long is 32 bits, the value is zero\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ulonglong_arg.3stap000066400000000000000000000031121356460210500300040ustar00rootroot00000000000000'\" t .\" Title: function::ulonglong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ULONGLONG_" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ulonglong_arg \- Return function argument as 64\-bit value .SH "SYNOPSIS" .sp .nf ulonglong_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a 64\-bit value\&. (Same as longlong_arg\&.) .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::umodname.3stap000066400000000000000000000033231356460210500267600ustar00rootroot00000000000000'\" t .\" Title: function::umodname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UMODNAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::umodname \- Returns the (short) name of the user module\&. .SH "SYNOPSIS" .sp .nf umodname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 User\-space address .RE .SH "DESCRIPTION" .PP Returns the short name of the user space module for the current task that that the given address is part of\&. Reports an error when the address isn\*(Aqt in a (mapped in) module, or the module cannot be found for some reason\&. .SH SEE ALSO\n .IR tapset::ucontext (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::usecs_to_string.3stap000066400000000000000000000033711356460210500303700ustar00rootroot00000000000000'\" t .\" Title: function::usecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USECS_TO_S" "3stap" "November 2019" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usecs_to_string \- Human readable string for given microseconds .SH "SYNOPSIS" .sp .nf usecs_to_string:string(usecs:long) .fi .SH "ARGUMENTS" .PP \fIusecs\fR .RS 4 Number of microseconds to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of microseconds as a human readable string consisting of \(lqXmY\&.ZZZZZZs\(rq, where X is the number of minutes, Y is the number of seconds and ZZZZZZ is the number of microseconds\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_buffer_quoted.3stap000066400000000000000000000042601356460210500310440ustar00rootroot00000000000000'\" t .\" Title: function::user_buffer_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_BUFFE" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_buffer_quoted \- Retrieves and quotes buffer from user space .SH "SYNOPSIS" .sp .nf user_buffer_quoted:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when user space data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_buffer_quoted_error.3stap000066400000000000000000000042231356460210500322540ustar00rootroot00000000000000'\" t .\" Title: function::user_buffer_quoted_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_BUFFE" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_buffer_quoted_error \- Retrieves and quotes buffer from user space .SH "SYNOPSIS" .sp .nf user_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when user space data is not accessible at the given address, an error is thrown\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_char.3stap000066400000000000000000000032461356460210500271320ustar00rootroot00000000000000'\" t .\" Title: function::user_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_char \- Retrieves a char value stored in user space .SH "SYNOPSIS" .sp .nf user_char:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_char_error.3stap000066400000000000000000000033031356460210500303350ustar00rootroot00000000000000'\" t .\" Title: function::user_char_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR_" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_char_error \- Retrieves a char value stored in user space .SH "SYNOPSIS" .sp .nf user_char_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_char_warn.3stap000066400000000000000000000033471356460210500301630ustar00rootroot00000000000000'\" t .\" Title: function::user_char_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR_" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_char_warn \- Retrieves a char value stored in user space .SH "SYNOPSIS" .sp .nf user_char_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int.3stap000066400000000000000000000032401356460210500270010ustar00rootroot00000000000000'\" t .\" Title: function::user_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int \- Retrieves an int value stored in user space .SH "SYNOPSIS" .sp .nf user_int:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int16.3stap000066400000000000000000000033131356460210500271510ustar00rootroot00000000000000'\" t .\" Title: function::user_int16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT16" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int16 \- Retrieves a 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int16:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 16\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int16_error.3stap000066400000000000000000000033471356460210500303710ustar00rootroot00000000000000'\" t .\" Title: function::user_int16_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT16" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int16_error \- Retrieves a 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int16_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 16\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int32.3stap000066400000000000000000000033131356460210500271470ustar00rootroot00000000000000'\" t .\" Title: function::user_int32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT32" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int32 \- Retrieves a 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int32:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 32\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int32_error.3stap000066400000000000000000000033471356460210500303670ustar00rootroot00000000000000'\" t .\" Title: function::user_int32_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT32" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int32_error \- Retrieves a 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int32_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 32\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int64.3stap000066400000000000000000000033131356460210500271540ustar00rootroot00000000000000'\" t .\" Title: function::user_int64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT64" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int64 \- Retrieves a 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int64:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 64\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int64_error.3stap000066400000000000000000000033471356460210500303740ustar00rootroot00000000000000'\" t .\" Title: function::user_int64_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT64" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int64_error \- Retrieves a 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int64_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 64\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int8.3stap000066400000000000000000000033041356460210500270720ustar00rootroot00000000000000'\" t .\" Title: function::user_int8 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT8" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int8 \- Retrieves a 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int8:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 8\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int8_error.3stap000066400000000000000000000033411356460210500303040ustar00rootroot00000000000000'\" t .\" Title: function::user_int8_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT8_" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int8_error \- Retrieves a 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int8_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 8\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int_error.3stap000066400000000000000000000032761356460210500302230ustar00rootroot00000000000000'\" t .\" Title: function::user_int_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT_E" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int_error \- Retrieves an int value stored in user space .SH "SYNOPSIS" .sp .nf user_int_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_int_warn.3stap000066400000000000000000000033421356460210500300330ustar00rootroot00000000000000'\" t .\" Title: function::user_int_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT_W" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int_warn \- Retrieves an int value stored in user space .SH "SYNOPSIS" .sp .nf user_int_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_long.3stap000066400000000000000000000035061356460210500271530ustar00rootroot00000000000000'\" t .\" Title: function::user_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_long \- Retrieves a long value stored in user space .SH "SYNOPSIS" .sp .nf user_long:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given user space address\&. Returns zero when user space data is not accessible\&. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_long_error.3stap000066400000000000000000000035431356460210500303650ustar00rootroot00000000000000'\" t .\" Title: function::user_long_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG_" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_long_error \- Retrieves a long value stored in user space .SH "SYNOPSIS" .sp .nf user_long_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given user space address\&. If the user space data is not accessible, an error will occur\&. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_long_warn.3stap000066400000000000000000000036071356460210500302040ustar00rootroot00000000000000'\" t .\" Title: function::user_long_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG_" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_long_warn \- Retrieves a long value stored in user space .SH "SYNOPSIS" .sp .nf user_long_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_mode.3stap000066400000000000000000000027741356460210500271460ustar00rootroot00000000000000'\" t .\" Title: function::user_mode .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_MODE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_mode \- Determines if probe point occurs in user\-mode .SH "SYNOPSIS" .sp .nf user_mode:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Return 1 if the probe point occurred in user\-mode\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_short.3stap000066400000000000000000000032551356460210500273540ustar00rootroot00000000000000'\" t .\" Title: function::user_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_short \- Retrieves a short value stored in user space .SH "SYNOPSIS" .sp .nf user_short:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_short_error.3stap000066400000000000000000000033111356460210500305560ustar00rootroot00000000000000'\" t .\" Title: function::user_short_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_short_error \- Retrieves a short value stored in user space .SH "SYNOPSIS" .sp .nf user_short_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_short_warn.3stap000066400000000000000000000033551356460210500304040ustar00rootroot00000000000000'\" t .\" Title: function::user_short_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_short_warn \- Retrieves a short value stored in user space .SH "SYNOPSIS" .sp .nf user_short_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string.3stap000066400000000000000000000040251356460210500275170ustar00rootroot00000000000000'\" t .\" Title: function::user_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string \- Retrieves string from user space .SH "SYNOPSIS" .sp .nf 1) user_string:string(addr:long) .fi .sp .nf 2) user_string:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 the error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns the null terminated C string from a given user space memory address\&. Reports an error on the rare cases when userspace data is not accessible\&. .PP 2) Returns the null terminated C string from a given user space memory address\&. Reports the given error message on the rare cases when userspace data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_n.3stap000066400000000000000000000043021356460210500300320ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_n \- Retrieves string of given length from user space .SH "SYNOPSIS" .sp .nf 1) user_string_n:string(addr:long,n:long) .fi .sp .nf 2) user_string_n:string(addr:long,n:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIn\fR .RS 4 the maximum length of the string (if not null terminated) .RE .PP \fIerr_msg\fR .RS 4 the error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns the C string of a maximum given length from a given user space address\&. Reports an error on the rare cases when userspace data is not accessible at the given address\&. .PP 2) Returns the C string of a maximum given length from a given user space address\&. Returns the given error message string on the rare cases when userspace data is not accessible at the given address\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_quoted.3stap000066400000000000000000000054151356460210500314210ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_n_quoted \- Retrieves and quotes string from user space .SH "SYNOPSIS" .sp .nf 1) user_string_n_quoted:string(addr:long,n:long) .fi .sp .nf 2) user_string_n_quoted:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIn\fR .RS 4 the maximum length of the string (if not null terminated) .RE .PP \fIinlen\fR .RS 4 the maximum length of the string to read (if not null terminated) .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP 1) Returns up to n characters of a C string from the given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .PP 2) Reads up to inlen characters of a C string from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_warn.3stap000066400000000000000000000044071356460210500310670ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_n_warn \- Retrieves string from user space .SH "SYNOPSIS" .sp .nf 1) user_string_n_warn:string(addr:long,n:long) .fi .sp .nf 2) user_string_n_warn:string(addr:long,n:long,warn_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIn\fR .RS 4 the maximum length of the string (if not null terminated) .RE .PP \fIwarn_msg\fR .RS 4 the warning message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns up to n characters of a C string from a given user space memory address\&. Reports\(lq\(rq on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .PP 2) Returns up to n characters of a C string from a given user space memory address\&. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted.3stap000066400000000000000000000037561356460210500311120ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_quoted \- Retrieves and quotes string from user space .SH "SYNOPSIS" .sp .nf user_string_quoted:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .SH "DESCRIPTION" .PP Returns the null terminated C string from a given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted_utf16.3stap000066400000000000000000000033111356460210500321220ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_quoted_utf16 \- Quote given user UTF\-16 string\&. .SH "SYNOPSIS" .sp .nf user_string_quoted_utf16:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-16 decoding as per \fIuser_string_utf16\fR\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted_utf32.3stap000066400000000000000000000033111356460210500321200ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_quoted_utf32 \- Quote given user UTF\-32 string\&. .SH "SYNOPSIS" .sp .nf user_string_quoted_utf32:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-32 decoding as per \fIuser_string_utf32\fR\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_utf16.3stap000066400000000000000000000041501356460210500305430ustar00rootroot00000000000000'\" t .\" Title: function::user_string_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_utf16 \- Retrieves UTF\-16 string from user memory .SH "SYNOPSIS" .sp .nf 1) user_string_utf16:string(addr:long) .fi .sp .nf 2) user_string_utf16:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given user memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given user memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_utf32.3stap000066400000000000000000000041501356460210500305410ustar00rootroot00000000000000'\" t .\" Title: function::user_string_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_utf32 \- Retrieves UTF\-32 string from user memory .SH "SYNOPSIS" .sp .nf 1) user_string_utf32:string(addr:long) .fi .sp .nf 2) user_string_utf32:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given user memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given user memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_string_warn.3stap000066400000000000000000000042131356460210500305450ustar00rootroot00000000000000'\" t .\" Title: function::user_string_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_warn \- Retrieves string from user space .SH "SYNOPSIS" .sp .nf 1) user_string_warn:string(addr:long) .fi .sp .nf 2) user_string_warn:string(addr:long,warn_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIwarn_msg\fR .RS 4 the warning message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns the null terminated C string from a given user space memory address\&. Reports "" on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .PP 2) Returns the null terminated C string from a given user space memory address\&. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint16.3stap000066400000000000000000000033521356460210500273410ustar00rootroot00000000000000'\" t .\" Title: function::user_uint16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT1" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint16 \- Retrieves an unsigned 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint16:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 16\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint16_error.3stap000066400000000000000000000034061356460210500305520ustar00rootroot00000000000000'\" t .\" Title: function::user_uint16_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT1" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint16_error \- Retrieves an unsigned 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint16_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 16\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint32.3stap000066400000000000000000000033521356460210500273370ustar00rootroot00000000000000'\" t .\" Title: function::user_uint32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT3" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint32 \- Retrieves an unsigned 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint32:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 32\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint32_error.3stap000066400000000000000000000034061356460210500305500ustar00rootroot00000000000000'\" t .\" Title: function::user_uint32_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT3" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint32_error \- Retrieves an unsigned 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint32_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 32\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint64.3stap000066400000000000000000000033521356460210500273440ustar00rootroot00000000000000'\" t .\" Title: function::user_uint64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT6" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint64 \- Retrieves an unsigned 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint64:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 64\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint64_error.3stap000066400000000000000000000034061356460210500305550ustar00rootroot00000000000000'\" t .\" Title: function::user_uint64_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT6" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint64_error \- Retrieves an unsigned 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint64_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 64\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint8.3stap000066400000000000000000000033431356460210500272620ustar00rootroot00000000000000'\" t .\" Title: function::user_uint8 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT8" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint8 \- Retrieves a unsigned 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint8:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 8\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_uint8_error.3stap000066400000000000000000000033771356460210500305020ustar00rootroot00000000000000'\" t .\" Title: function::user_uint8_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT8" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint8_error \- Retrieves a unsigned 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint8_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 8\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_ulong.3stap000066400000000000000000000035571356460210500273460ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ulong \- Retrieves an unsigned long value stored in user space .SH "SYNOPSIS" .sp .nf user_ulong:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned long from .RE .SH "DESCRIPTION" .PP Returns the unsigned long value from a given user space address\&. Returns zero when user space data is not accessible\&. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_ulong_error.3stap000066400000000000000000000036121356460210500305470ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ulong_error \- Retrieves a unsigned long value stored in user space .SH "SYNOPSIS" .sp .nf user_ulong_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned long from .RE .SH "DESCRIPTION" .PP Returns the unsigned long value from a given user space address\&. If the user space data is not accessible, an error will occur\&. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_ulong_warn.3stap000066400000000000000000000036571356460210500303760ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ulong_warn \- Retrieves an unsigned long value stored in user space .SH "SYNOPSIS" .sp .nf user_ulong_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned long from .RE .SH "DESCRIPTION" .PP Returns the unsigned long value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_ushort.3stap000066400000000000000000000033141356460210500275350ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ushort \- Retrieves an unsigned short value stored in user space .SH "SYNOPSIS" .sp .nf user_ushort:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned short from .RE .SH "DESCRIPTION" .PP Returns the unsigned short value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_ushort_error.3stap000066400000000000000000000033501356460210500307460ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ushort_error \- Retrieves an unsigned short value stored in user space .SH "SYNOPSIS" .sp .nf user_ushort_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned short from .RE .SH "DESCRIPTION" .PP Returns the unsigned short value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::user_ushort_warn.3stap000066400000000000000000000034141356460210500305650ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "November 2019" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ushort_warn \- Retrieves an unsigned short value stored in user space .SH "SYNOPSIS" .sp .nf user_ushort_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned short from .RE .SH "DESCRIPTION" .PP Returns the unsigned short value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::usrdev2kerndev.3stap000066400000000000000000000030071356460210500301230ustar00rootroot00000000000000'\" t .\" Title: function::usrdev2kerndev .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USRDEV2KER" "3stap" "November 2019" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usrdev2kerndev \- Converts a user\-space device number into the format used in the kernel .SH "SYNOPSIS" .sp .nf usrdev2kerndev:long(dev:long) .fi .SH "ARGUMENTS" .PP \fIdev\fR .RS 4 Device number in user\-space format\&. .RE .SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::ustack.3stap000066400000000000000000000034251356460210500264500ustar00rootroot00000000000000'\" t .\" Title: function::ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USTACK" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ustack \- Return address at given depth of user stack backtrace .SH "SYNOPSIS" .sp .nf ustack:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack\&. .RE .SH "DESCRIPTION" .PP Performs a simple (user space) backtrace, and returns the element at the specified position\&. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times \fBustack\fR is called, or in what order\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::usymdata.3stap000066400000000000000000000037011356460210500270020ustar00rootroot00000000000000'\" t .\" Title: function::usymdata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMDATA" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymdata \- Return the symbol and module offset of an address\&. .SH "SYNOPSIS" .sp .nf usymdata:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address in the current task if known, the offset from the start and the size of the symbol, plus the module name (between brackets)\&. If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added\&. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::usymfile.3stap000066400000000000000000000033111356460210500270050ustar00rootroot00000000000000'\" t .\" Title: function::usymfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMFILE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymfile \- Return the file name of a given address\&. .SH "SYNOPSIS" .sp .nf usymfile:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name of the given address, if known\&. If the file name cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::usymfileline.3stap000066400000000000000000000033431356460210500276620ustar00rootroot00000000000000'\" t .\" Title: function::usymfileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMFILELI" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymfileline \- Return the file name and line number of an address\&. .SH "SYNOPSIS" .sp .nf usymfileline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name and the (approximate) line number of the given address, if known\&. If the file name or the line number cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::usymline.3stap000066400000000000000000000033301356460210500270160ustar00rootroot00000000000000'\" t .\" Title: function::usymline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMLINE" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymline \- Return the line number of an address\&. .SH "SYNOPSIS" .sp .nf usymline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (approximate) line number of the given address, if known\&. If the line number cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::usymname.3stap000066400000000000000000000032341356460210500270120ustar00rootroot00000000000000'\" t .\" Title: function::usymname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMNAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymname \- Return the symbol of an address in the current task\&. .SH "SYNOPSIS" .sp .nf usymname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address if known\&. If not known it will return the hex string representation of addr\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::vm_fault_contains.3stap000066400000000000000000000031371356460210500306710ustar00rootroot00000000000000'\" t .\" Title: function::vm_fault_contains .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::VM_FAULT_C" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::vm_fault_contains \- Test return value for page fault reason .SH "SYNOPSIS" .sp .nf vm_fault_contains:long(value:long,test:long) .fi .SH "ARGUMENTS" .PP \fIvalue\fR .RS 4 the fault_type returned by vm\&.page_fault\&.return .RE .PP \fItest\fR .RS 4 the type of fault to test for (VM_FAULT_OOM or similar) .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/function::warn.3stap000066400000000000000000000032221356460210500261200ustar00rootroot00000000000000'\" t .\" Title: function::warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::WARN" "3stap" "November 2019" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::warn \- Send a line to the warning stream .SH "SYNOPSIS" .sp .nf warn(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP This function sends a warning message immediately to staprun\&. It is also sent over the bulk transport (relayfs) if it is being used\&. If the last characater is not a newline, the one is added\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/macro::json_output_array_numeric_value.3stap000066400000000000000000000040711356460210500331350ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_array_numeric_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_A" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_array_numeric_value \- Output a numeric value for metric in an array\&. .SH "SYNOPSIS" .sp .nf @json_output_array_numeric_value(array_name,array_index,metric_name,value) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array\&. .RE .PP \fIarray_index\fR .RS 4 The array index (as a string) indicating where to store the numeric value\&. .RE .PP \fImetric_name\fR .RS 4 The name of the numeric metric\&. .RE .PP \fIvalue\fR .RS 4 The numeric value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_array_numeric_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs numeric value that is in an array\&. This metric should have been added with \fBjson_add_array_numeric_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/macro::json_output_array_string_value.3stap000066400000000000000000000040571356460210500330050ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_array_string_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_A" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_array_string_value \- Output a string value for metric in an array\&. .SH "SYNOPSIS" .sp .nf @json_output_array_string_value(array_name,array_index,metric_name,value) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array\&. .RE .PP \fIarray_index\fR .RS 4 The array index (as a string) indicating where to store the string value\&. .RE .PP \fImetric_name\fR .RS 4 The name of the string metric\&. .RE .PP \fIvalue\fR .RS 4 The string value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_array_string_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs string value that is in an array\&. This metric should have been added with \fBjson_add_array_string_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/macro::json_output_data_end.3stap000066400000000000000000000031231356460210500306350ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_data_end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_D" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_data_end \- End the json output\&. .SH "SYNOPSIS" .sp .nf @json_output_data_end() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The json_output_data_end macro is designed to be called from the \*(Aqjson_data\*(Aq probe from the user\*(Aqs script\&. It marks the end of the JSON output\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/macro::json_output_data_start.3stap000066400000000000000000000031371356460210500312310ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_data_start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_D" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_data_start \- Start the json output\&. .SH "SYNOPSIS" .sp .nf @json_output_data_start() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The json_output_data_start macro is designed to be called from the \*(Aqjson_data\*(Aq probe from the user\*(Aqs script\&. It marks the start of the JSON output\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/macro::json_output_numeric_value.3stap000066400000000000000000000034461356460210500317440ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_numeric_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_N" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_numeric_value \- Output a numeric value\&. .SH "SYNOPSIS" .sp .nf @json_output_numeric_value(name,value) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the numeric metric\&. .RE .PP \fIvalue\fR .RS 4 The numeric value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_numeric_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs numeric value\&. This metric should have been added with \fBjson_add_numeric_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/macro::json_output_string_value.3stap000066400000000000000000000034351356460210500316060ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_string_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_S" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_string_value \- Output a string value\&. .SH "SYNOPSIS" .sp .nf @json_output_string_value(name,value) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the string metric\&. .RE .PP \fIvalue\fR .RS 4 The string value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_string_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs string value\&. This metric should have been added with \fBjson_add_string_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioblock.end.3stap000066400000000000000000000052761356460210500266350ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK\&.END" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock.end \- Fires whenever a block I/O transfer is complete\&. .SH "SYNOPSIS" .sp .nf ioblock\&.end .fi .SH "VALUES" .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIerror\fR .RS 4 0 on success .RE .PP \fIphys_segments\fR .RS 4 number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIhw_segments\fR .RS 4 number of segments after physical and DMA remapping hardware coalescing is performed .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which makes up this I/O request .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIidx\fR .RS 4 offset into the bio vector array .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .SH "CONTEXT" .PP The process signals the transfer is done\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioblock.request.3stap000066400000000000000000000055671356460210500275620ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock.request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK\&.REQ" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock.request \- Fires whenever making a generic block I/O request\&. .SH "SYNOPSIS" .sp .nf ioblock\&.request .fi .SH "VALUES" .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIbdev\fR .RS 4 target block device .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which make up this I/O request .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIidx\fR .RS 4 offset into the bio vector array .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIhw_segments\fR .RS 4 number of segments after physical and DMA remapping hardware coalescing is performed .RE .PP \fIphys_segments\fR .RS 4 number of segments in this bio after physical address coalescing is performed .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIopf\fR .RS 4 operations and flags .RE .SH "CONTEXT" .PP The process makes block I/O request .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.bounce.3stap000066400000000000000000000057201356460210500305120ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.bounce .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock_trace.bounce \- Fires whenever a buffer bounce is needed for at least one page of a block IO request\&. .SH "SYNOPSIS" .sp .nf ioblock_trace\&.bounce .fi .SH "VALUES" .PP \fIq\fR .RS 4 request queue on which this bio was queued\&. .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIdevname\fR .RS 4 device for which a buffer bounce was needed\&. .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIidx\fR .RS 4 offset into the bio vector array \fIphys_segments\fR \- number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which makes up this I/O request .RE .PP \fIbdev\fR .RS 4 target block device .RE .SH "CONTEXT" .PP The process creating a block IO request\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.end.3stap000066400000000000000000000056061356460210500300100ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock_trace.end \- Fires whenever a block I/O transfer is complete\&. .SH "SYNOPSIS" .sp .nf ioblock_trace\&.end .fi .SH "VALUES" .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIbdev\fR .RS 4 target block device .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which makes up this I/O request .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIidx\fR .RS 4 offset into the bio vector array \fIphys_segments\fR \- number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIq\fR .RS 4 request queue on which this bio was queued\&. .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .SH "CONTEXT" .PP The process signals the transfer is done\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.request.3stap000066400000000000000000000056301356460210500307270ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock_trace.request \- Fires just as a generic block I/O request is created for a bio\&. .SH "SYNOPSIS" .sp .nf ioblock_trace\&.request .fi .SH "VALUES" .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIidx\fR .RS 4 offset into the bio vector array \fIphys_segments\fR \- number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIbdev\fR .RS 4 target block device .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which make up this I/O request .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIq\fR .RS 4 request queue on which this bio was queued\&. .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIopf\fR .RS 4 operations and flags .RE .SH "CONTEXT" .PP The process makes block I/O request .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.3stap000066400000000000000000000035141356460210500321120ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_add_request \- probe to indicate request is added to the request queue\&. .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_add_request .fi .SH "VALUES" .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIq\fR .RS 4 Pointer to request queue\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.kp.3stap000066400000000000000000000036301356460210500325220ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request.kp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_add_request.kp \- kprobe based probe to indicate that a request was added to the request queue .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_add_request\&.kp .fi .SH "VALUES" .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled .RE .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIq\fR .RS 4 pointer to request queue .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq\fR .RS 4 Address of the request .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.tp.3stap000066400000000000000000000036331356460210500325360ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request.tp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_add_request.tp \- tracepoint based probe to indicate a request is added to the request queue\&. .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_add_request\&.tp .fi .SH "VALUES" .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIq\fR .RS 4 Pointer to request queue\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_completed_request.3stap000066400000000000000000000035051356460210500333360ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_completed_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_completed_request \- Fires when a request is completed .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_completed_request .fi .SH "VALUES" .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq\fR .RS 4 Address of the request .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_next_request.3stap000066400000000000000000000031641356460210500323410ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_next_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_next_request \- Fires when a request is retrieved from the request queue .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_next_request .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_next_request.return.3stap000066400000000000000000000034241356460210500336560ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_next_request.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_next_request.return \- Fires when a request retrieval issues a return signal .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_next_request\&.return .fi .SH "VALUES" .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIrq\fR .RS 4 Address of the request .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_abort_request.3stap000066400000000000000000000035131356460210500336460ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_abort_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_abort_request \- Fires when a request is aborted\&. .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_abort_request .fi .SH "VALUES" .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) probe::ioscheduler_trace.elv_completed_request.3stap000066400000000000000000000035571356460210500344440ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Tapset_Reference/man3'\" t .\" Title: probe::ioscheduler_trace.elv_completed_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_completed_request \- Fires when a request is .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_completed_request .fi .SH "VALUES" .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .SH "DESCRIPTION" .PP completed\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_issue_request.3stap000066400000000000000000000035431356460210500336720ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_issue_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_issue_request \- Fires when a request is .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_issue_request .fi .SH "VALUES" .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .SH "DESCRIPTION" .PP scheduled\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_requeue_request.3stap000066400000000000000000000036431356460210500342160ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_requeue_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_requeue_request \- Fires when a request is .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_requeue_request .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .SH "DESCRIPTION" .PP put back on the queue, when the hadware cannot accept more requests\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.plug.3stap000066400000000000000000000032041356460210500310650ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.plug .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.plug \- Fires when a request queue is plugged; .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.plug .fi .SH "VALUES" .PP \fIrq_queue\fR .RS 4 request queue .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP ie, requests in the queue cannot be serviced by block driver\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.unplug_io.3stap000066400000000000000000000033461356460210500321260ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.unplug_io .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.unplug_io \- Fires when a request queue is unplugged; .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.unplug_io .fi .SH "VALUES" .PP \fIrq_queue\fR .RS 4 request queue .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP Either, when number of pending requests in the queue exceeds threshold or, upon expiration of timer that was activated when queue was plugged\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.unplug_timer.3stap000066400000000000000000000031701356460210500326320ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.unplug_timer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2019" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.unplug_timer \- Fires when unplug timer associated .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.unplug_timer .fi .SH "VALUES" .PP \fIrq_queue\fR .RS 4 request queue .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP with a request queue expires\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ForwDatagrams.3stap000066400000000000000000000034601356460210500302770ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ForwDatagrams .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FORWD" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.ForwDatagrams \- Count forwarded packet .SH "SYNOPSIS" .sp .nf ipmib\&.ForwDatagrams .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIForwDatagrams\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_OUTFORWDATAGRAMS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.FragFails.3stap000066400000000000000000000034531356460210500273760ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.FragFails .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FRAGF" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.FragFails \- Count datagram fragmented unsuccessfully .SH "SYNOPSIS" .sp .nf ipmib\&.FragFails .fi .SH "VALUES" .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIFragFails\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_FRAGFAILS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.FragOKs.3stap000066400000000000000000000034371356460210500270360ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.FragOKs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FRAGO" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.FragOKs \- Count datagram fragmented successfully .SH "SYNOPSIS" .sp .nf ipmib\&.FragOKs .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIFragOKs\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_FRAGOKS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InAddrErrors.3stap000066400000000000000000000035021356460210500300710ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InAddrErrors .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INADD" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InAddrErrors \- Count arriving packets with an incorrect address .SH "SYNOPSIS" .sp .nf ipmib\&.InAddrErrors .fi .SH "VALUES" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInAddrErrors\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INADDRERRORS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InDiscards.3stap000066400000000000000000000034451356460210500275640ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InDiscards .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INDIS" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InDiscards \- Count discarded inbound packets .SH "SYNOPSIS" .sp .nf ipmib\&.InDiscards .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInDiscards\fR (equivalent to SNMP\*(Aqs MIB STATS_MIB_INDISCARDS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InNoRoutes.3stap000066400000000000000000000034701356460210500276040ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InNoRoutes .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INNOR" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InNoRoutes \- Count an arriving packet with no matching socket .SH "SYNOPSIS" .sp .nf ipmib\&.InNoRoutes .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInNoRoutes\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INNOROUTES) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InReceives.3stap000066400000000000000000000034401356460210500275700ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InReceives .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INREC" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InReceives \- Count an arriving packet .SH "SYNOPSIS" .sp .nf ipmib\&.InReceives .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInReceives\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INRECEIVES) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InUnknownProtos.3stap000066400000000000000000000035151356460210500306740ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InUnknownProtos .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INUNK" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InUnknownProtos \- Count arriving packets with an unbound proto .SH "SYNOPSIS" .sp .nf ipmib\&.InUnknownProtos .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInUnknownProtos\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INUNKNOWNPROTOS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.OutRequests.3stap000066400000000000000000000034551356460210500300450ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.OutRequests .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.OUTRE" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.OutRequests \- Count a request to send a packet .SH "SYNOPSIS" .sp .nf ipmib\&.OutRequests .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIOutRequests\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_OUTREQUESTS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ReasmReqds.3stap000066400000000000000000000034741356460210500276110ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ReasmReqds .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.REASM" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.ReasmReqds \- Count number of packet fragments reassembly requests .SH "SYNOPSIS" .sp .nf ipmib\&.ReasmReqds .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIReasmReqds\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_REASMREQDS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ReasmTimeout.3stap000066400000000000000000000034531356460210500301560ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ReasmTimeout .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.REASM" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.ReasmTimeout \- Count Reassembly Timeouts .SH "SYNOPSIS" .sp .nf ipmib\&.ReasmTimeout .fi .SH "VALUES" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIReasmTimeout\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_REASMTIMEOUT) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::irq_handler.entry.3stap000066400000000000000000000042201356460210500300620ustar00rootroot00000000000000'\" t .\" Title: probe::irq_handler.entry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IRQ_HANDLER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::irq_handler.entry \- Execution of interrupt handler starting .SH "SYNOPSIS" .sp .nf irq_handler\&.entry .fi .SH "VALUES" .PP \fIthread\fR .RS 4 thread pointer for threaded interrupts .RE .PP \fIthread_fn\fR .RS 4 interrupt handler function for threaded interrupts .RE .PP \fIthread_flags\fR .RS 4 Flags related to thread .RE .PP \fIhandler\fR .RS 4 interrupt handler function .RE .PP \fIflags\fR .RS 4 Flags for IRQ handler .RE .PP \fIdev_id\fR .RS 4 Cookie to identify device .RE .PP \fInext_irqaction\fR .RS 4 pointer to next irqaction for shared interrupts .RE .PP \fIflags_str\fR .RS 4 symbolic string representation of IRQ flags .RE .PP \fIdev_name\fR .RS 4 name of device .RE .PP \fIirq\fR .RS 4 irq number .RE .PP \fIaction\fR .RS 4 struct irqaction* for this interrupt num .RE .PP \fIdir\fR .RS 4 pointer to the proc/irq/NN/name entry .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::irq_handler.exit.3stap000066400000000000000000000043031356460210500276740ustar00rootroot00000000000000'\" t .\" Title: probe::irq_handler.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IRQ_HANDLER\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::irq_handler.exit \- Execution of interrupt handler completed .SH "SYNOPSIS" .sp .nf irq_handler\&.exit .fi .SH "VALUES" .PP \fIret\fR .RS 4 return value of the handler .RE .PP \fIaction\fR .RS 4 struct irqaction* .RE .PP \fIdir\fR .RS 4 pointer to the proc/irq/NN/name entry .RE .PP \fIdev_name\fR .RS 4 name of device .RE .PP \fIirq\fR .RS 4 interrupt number .RE .PP \fIflags_str\fR .RS 4 symbolic string representation of IRQ flags .RE .PP \fInext_irqaction\fR .RS 4 pointer to next irqaction for shared interrupts .RE .PP \fIdev_id\fR .RS 4 Cookie to identify device .RE .PP \fIflags\fR .RS 4 flags for IRQ handler .RE .PP \fIhandler\fR .RS 4 interrupt handler function that was executed .RE .PP \fIthread_flags\fR .RS 4 Flags related to thread .RE .PP \fIthread\fR .RS 4 thread pointer for threaded interrupts .RE .PP \fIthread_fn\fR .RS 4 interrupt handler function for threaded interrupts .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::json_data.3stap000066400000000000000000000036301356460210500264000ustar00rootroot00000000000000'\" t .\" Title: probe::json_data .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::JSON_DATA" "3stap" "November 2019" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::json_data \- Fires whenever JSON data is wanted by a reader\&. .SH "SYNOPSIS" .sp .nf json_data .fi .SH "VALUES" .PP None .SH "CONTEXT" .PP This probe fires when the JSON data is about to be read\&. This probe must gather up data and then call the following macros to output the data in JSON format\&. First, @\fBjson_output_data_start\fR must be called\&. That call is followed by one or more of the following (one call for each data item): @\fBjson_output_string_value\fR, @\fBjson_output_numeric_value\fR, @\fBjson_output_array_string_value\fR, and @\fBjson_output_array_numeric_value\fR\&. Finally @\fBjson_output_data_end\fR must be called\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.create.3stap000066400000000000000000000034231356460210500275310ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.CR" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.create \- Fires whenever a new process or thread is successfully created .SH "SYNOPSIS" .sp .nf kprocess\&.create .fi .SH "VALUES" .PP \fInew_pid\fR .RS 4 The PID of the newly created process .RE .PP \fInew_tid\fR .RS 4 The TID of the newly created task .RE .SH "CONTEXT" .PP Parent of the created process\&. .SH "DESCRIPTION" .PP Fires whenever a new process is successfully created, either as a result of fork (or one of its syscall variants), or a new kernel thread\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exec.3stap000066400000000000000000000037331356460210500272160ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exec .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.exec \- Attempt to exec to a new program .SH "SYNOPSIS" .sp .nf kprocess\&.exec .fi .SH "VALUES" .PP \fIargs\fR .RS 4 The arguments to pass to the new executable, including the 0th arg (SystemTap v2\&.5+) .RE .PP \fIname\fR .RS 4 Name of the system call (\(lqexecve\(rq) (SystemTap v2\&.5+) .RE .PP \fIfilename\fR .RS 4 The path to the new executable .RE .PP \fIargstr\fR .RS 4 A string containing the filename followed by the arguments to pass, excluding 0th arg (SystemTap v2\&.5+) .RE .SH "CONTEXT" .PP The caller of exec\&. .SH "DESCRIPTION" .PP Fires whenever a process attempts to exec to a new program\&. Aliased to the syscall\&.execve probe in SystemTap v2\&.5+\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exec_complete.3stap000066400000000000000000000037571356460210500311140ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exec_complete .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.exec_complete \- Return from exec to a new program .SH "SYNOPSIS" .sp .nf kprocess\&.exec_complete .fi .SH "VALUES" .PP \fIsuccess\fR .RS 4 A boolean indicating whether the exec was successful .RE .PP \fIerrno\fR .RS 4 The error number resulting from the exec .RE .PP \fIretstr\fR .RS 4 A string representation of errno (SystemTap v2\&.5+) .RE .PP \fIname\fR .RS 4 Name of the system call (\(lqexecve\(rq) (SystemTap v2\&.5+) .RE .SH "CONTEXT" .PP On success, the context of the new executable\&. On failure, remains in the context of the caller\&. .SH "DESCRIPTION" .PP Fires at the completion of an exec call\&. Aliased to the syscall\&.execve\&.return probe in SystemTap v2\&.5+\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exit.3stap000066400000000000000000000032611356460210500272370ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.exit \- Exit from process .SH "SYNOPSIS" .sp .nf kprocess\&.exit .fi .SH "VALUES" .PP \fIcode\fR .RS 4 The exit code of the process .RE .SH "CONTEXT" .PP The process which is terminating\&. .SH "DESCRIPTION" .PP Fires when a process terminates\&. This will always be followed by a kprocess\&.release, though the latter may be delayed if the process waits in a zombie state\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.release.3stap000066400000000000000000000037751356460210500277200ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.RE" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.release \- Process released .SH "SYNOPSIS" .sp .nf kprocess\&.release .fi .SH "VALUES" .PP \fIreleased_tid\fR .RS 4 TID of the task being released .RE .PP \fIreleased_pid\fR .RS 4 PID of the process being released .RE .PP \fIpid\fR .RS 4 Same as \fIreleased_pid\fR for compatibility (deprecated) .RE .PP \fItask\fR .RS 4 A task handle to the process being released .RE .SH "CONTEXT" .PP The context of the parent, if it wanted notification of this process\*(Aq termination, else the context of the process itself\&. .SH "DESCRIPTION" .PP Fires when a process is released from the kernel\&. This always follows a kprocess\&.exit, though it may be delayed somewhat if the process waits in a zombie state\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.start.3stap000066400000000000000000000030261356460210500274220ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.ST" "3stap" "November 2019" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.start \- Starting new process .SH "SYNOPSIS" .sp .nf kprocess\&.start .fi .SH "VALUES" .PP None .SH "CONTEXT" .PP Newly created process\&. .SH "DESCRIPTION" .PP Fires immediately before a new process begins execution\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.DelayedACKs.3stap000066400000000000000000000034531356460210500303400ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.DelayedACKs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.DE" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.DelayedACKs \- Count of delayed acks .SH "SYNOPSIS" .sp .nf linuxmib\&.DelayedACKs .fi .SH "VALUES" .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIDelayedACKs\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_DELAYEDACKS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.ListenDrops.3stap000066400000000000000000000035031356460210500305310ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.ListenDrops .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.LI" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.ListenDrops \- Count of times conn request that were dropped .SH "SYNOPSIS" .sp .nf linuxmib\&.ListenDrops .fi .SH "VALUES" .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIListenDrops\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_LISTENDROPS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.ListenOverflows.3stap000066400000000000000000000035221356460210500314310ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.ListenOverflows .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.LI" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.ListenOverflows \- Count of times a listen queue overflowed .SH "SYNOPSIS" .sp .nf linuxmib\&.ListenOverflows .fi .SH "VALUES" .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIListenOverflows\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_LISTENOVERFLOWS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.TCPMemoryPressures.3stap000066400000000000000000000035401356460210500320170ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.TCPMemoryPressures .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.TC" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.TCPMemoryPressures \- Count of times memory pressure was used .SH "SYNOPSIS" .sp .nf linuxmib\&.TCPMemoryPressures .fi .SH "VALUES" .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fITCPMemoryPressures\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_TCPMEMORYPRESSURES) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_mac.3stap000066400000000000000000000032051356460210500277650ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_mac .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.change_mac \- Called when the netdev_name has the MAC changed .SH "SYNOPSIS" .sp .nf netdev\&.change_mac .fi .SH "VALUES" .PP \fInew_mac\fR .RS 4 The new MAC address .RE .PP \fIold_mac\fR .RS 4 The current MAC address .RE .PP \fIdev_name\fR .RS 4 The device that will have the MAC changed .RE .PP \fImac_len\fR .RS 4 The MAC length .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_mtu.3stap000066400000000000000000000031001356460210500300240ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_mtu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.change_mtu \- Called when the netdev MTU is changed .SH "SYNOPSIS" .sp .nf netdev\&.change_mtu .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that will have the MTU changed .RE .PP \fInew_mtu\fR .RS 4 The new MTU .RE .PP \fIold_mtu\fR .RS 4 The current MTU .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_rx_flag.3stap000066400000000000000000000030371356460210500306520ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_rx_flag .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.change_rx_flag \- Called when the device RX flag will be changed .SH "SYNOPSIS" .sp .nf netdev\&.change_rx_flag .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that will be changed .RE .PP \fIflags\fR .RS 4 The new flags .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.close.3stap000066400000000000000000000027241356460210500270320ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CLOS" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.close \- Called when the device is closed .SH "SYNOPSIS" .sp .nf netdev\&.close .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be closed .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.get_stats.3stap000066400000000000000000000027731356460210500277260ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.get_stats .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.GET_" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.get_stats \- Called when someone asks the device statistics .SH "SYNOPSIS" .sp .nf netdev\&.get_stats .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to provide the statistics .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.hard_transmit.3stap000066400000000000000000000032761356460210500305670ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.hard_transmit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.HARD" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.hard_transmit \- Called when the devices is going to TX (hard) .SH "SYNOPSIS" .sp .nf netdev\&.hard_transmit .fi .SH "VALUES" .PP \fIlength\fR .RS 4 The length of the transmit buffer\&. .RE .PP \fIprotocol\fR .RS 4 The protocol used in the transmission .RE .PP \fIdev_name\fR .RS 4 The device scheduled to transmit .RE .PP \fItruesize\fR .RS 4 The size of the data to be transmitted\&. .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.ioctl.3stap000066400000000000000000000030141356460210500270300ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.ioctl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.IOCT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.ioctl \- Called when the device suffers an IOCTL .SH "SYNOPSIS" .sp .nf netdev\&.ioctl .fi .SH "VALUES" .PP \fIarg\fR .RS 4 The IOCTL argument (usually the netdev interface) .RE .PP \fIcmd\fR .RS 4 The IOCTL request .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.open.3stap000066400000000000000000000027211356460210500266630ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.OPEN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.open \- Called when the device is opened .SH "SYNOPSIS" .sp .nf netdev\&.open .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be opened .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.receive.3stap000066400000000000000000000031441356460210500273440ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.RECE" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.receive \- Data received from network device\&. .SH "SYNOPSIS" .sp .nf netdev\&.receive .fi .SH "VALUES" .PP \fIlength\fR .RS 4 The length of the receiving buffer\&. .RE .PP \fIdev_name\fR .RS 4 The name of the device\&. e\&.g: eth0, ath1\&. .RE .PP \fIprotocol\fR .RS 4 Protocol of received packet\&. .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.register.3stap000066400000000000000000000027451356460210500275540ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.REGI" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.register \- Called when the device is registered .SH "SYNOPSIS" .sp .nf netdev\&.register .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be registered .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.rx.3stap000066400000000000000000000030061356460210500263500ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.rx .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.RX" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.rx \- Called when the device is going to receive a packet .SH "SYNOPSIS" .sp .nf netdev\&.rx .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device received the packet .RE .PP \fIprotocol\fR .RS 4 The packet protocol .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.set_promiscuity.3stap000066400000000000000000000033351356460210500311660ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.set_promiscuity .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.SET_" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.set_promiscuity \- Called when the device enters/leaves promiscuity .SH "SYNOPSIS" .sp .nf netdev\&.set_promiscuity .fi .SH "VALUES" .PP \fIdisable\fR .RS 4 If the device is leaving promiscuity mode .RE .PP \fIdev_name\fR .RS 4 The device that is entering/leaving promiscuity mode .RE .PP \fIinc\fR .RS 4 Count the number of promiscuity openers .RE .PP \fIenable\fR .RS 4 If the device is entering promiscuity mode .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.transmit.3stap000066400000000000000000000033221356460210500275610ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.transmit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.TRAN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.transmit \- Network device transmitting buffer .SH "SYNOPSIS" .sp .nf netdev\&.transmit .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 The protocol of this packet(defined in include/linux/if_ether\&.h)\&. .RE .PP \fIdev_name\fR .RS 4 The name of the device\&. e\&.g: eth0, ath1\&. .RE .PP \fItruesize\fR .RS 4 The size of the data to be transmitted\&. .RE .PP \fIlength\fR .RS 4 The length of the transmit buffer\&. .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netdev.unregister.3stap000066400000000000000000000027651356460210500301210ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.unregister .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.UNRE" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.unregister \- Called when the device is being unregistered .SH "SYNOPSIS" .sp .nf netdev\&.unregister .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be unregistered .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.forward.3stap000066400000000000000000000064241356460210500306620ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.arp.forward \- \- Called for each ARP packet to be forwarded .SH "SYNOPSIS" .sp .nf netfilter\&.arp\&.forward .fi .SH "VALUES" .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqarp\(rq .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fIar_op\fR .RS 4 ARP opcode (command) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIar_sha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.in.3stap000066400000000000000000000063761356460210500276320ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.arp.in \- \- Called for each incoming ARP packet .SH "SYNOPSIS" .sp .nf netfilter\&.arp\&.in .fi .SH "VALUES" .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqarp\(rq .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIar_sha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fIar_op\fR .RS 4 ARP opcode (command) .RE .PP \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.out.3stap000066400000000000000000000064011356460210500300200ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.arp.out \- \- Called for each outgoing ARP packet .SH "SYNOPSIS" .sp .nf netfilter\&.arp\&.out .fi .SH "VALUES" .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIar_sha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIar_op\fR .RS 4 ARP opcode (command) .RE .PP \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqarp\(rq .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.forward.3stap000066400000000000000000000070261356460210500313330ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.forward \- Called on an incoming bridging packet destined for some other computer .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.forward .fi .SH "VALUES" .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.local_in.3stap000066400000000000000000000070161356460210500314460ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.local_in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.local_in \- Called on a bridging packet destined for the local computer .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.local_in .fi .SH "VALUES" .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.local_out.3stap000066400000000000000000000070151356460210500316460ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.local_out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.local_out \- Called on a bridging packet coming from a local process .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.local_out .fi .SH "VALUES" .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.post_routing.3stap000066400000000000000000000070171356460210500324230ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.post_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.post_routing \- \- Called before a bridging packet hits the wire .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.post_routing .fi .SH "VALUES" .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.pre_routing.3stap000066400000000000000000000070101356460210500322150ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.pre_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.pre_routing \- \- Called before a bridging packet is routed .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.pre_routing .fi .SH "VALUES" .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.forward.3stap000066400000000000000000000071311356460210500305040ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.forward \- Called on an incoming IP packet addressed to some other computer .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.forward .fi .SH "VALUES" .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.local_in.3stap000066400000000000000000000071331356460210500306220ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.local_in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.local_in \- Called on an incoming IP packet addressed to the local computer .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.local_in .fi .SH "VALUES" .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.local_out.3stap000066400000000000000000000070761356460210500310310ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.local_out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.local_out \- Called on an outgoing IP packet .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.local_out .fi .SH "VALUES" .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.post_routing.3stap000066400000000000000000000071531356460210500316000ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.post_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.post_routing \- Called immediately before an outgoing IP packet leaves the computer .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.post_routing .fi .SH "VALUES" .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.pre_routing.3stap000066400000000000000000000071131356460210500313750ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.pre_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.pre_routing \- Called before an IP packet is routed .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.pre_routing .fi .SH "VALUES" .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIpf\fR .RS 4 Protocol family \- either \*(Aqipv4\*(Aq or \*(Aqipv6\*(Aq .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.readpage.3stap000066400000000000000000000040571356460210500275550ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.readpage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.readpage \- NFS client synchronously reading a page .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.readpage .fi .SH "VALUES" .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIi_flag\fR .RS 4 file flags .RE .PP \fIsize\fR .RS 4 number of pages to be read in this execution .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfile\fR .RS 4 file argument .RE .PP \fIrsize\fR .RS 4 read size (in bytes) .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIsb_flag\fR .RS 4 super block flags .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .SH "DESCRIPTION" .PP Read the page over, only fires when a previous async read operation failed .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.readpages.3stap000066400000000000000000000035601356460210500277360ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.readpages .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.readpages \- NFS client reading multiple pages .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.readpages .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fInr_pages\fR .RS 4 number of pages attempted to read in this execution .RE .PP \fIsize\fR .RS 4 number of pages attempted to read in this execution .RE .PP \fIrpages\fR .RS 4 read size (in pages) .RE .PP \fIrsize\fR .RS 4 read size (in bytes) .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIfile\fR .RS 4 filp argument .RE .SH "DESCRIPTION" .PP Fires when in readahead way, read several pages once .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.release_page.3stap000066400000000000000000000034251356460210500304170ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.release_page .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.release_page \- NFS client releasing page .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.release_page .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIsize\fR .RS 4 release pages .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH "DESCRIPTION" .PP Fires when do a release operation on NFS\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.set_page_dirty.3stap000066400000000000000000000033261356460210500310050ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.set_page_dirty .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.S" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.set_page_dirty \- NFS client marking page as dirty .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.set_page_dirty .fi .SH "VALUES" .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIpage_flag\fR .RS 4 page flags .RE .SH "DESCRIPTION" .PP This probe attaches to the generic __set_page_dirty_nobuffers function\&. Thus, this probe is going to fire on many other file systems in addition to the NFS client\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.write_begin.3stap000066400000000000000000000042311356460210500302750ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.write_begin .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.write_begin \- NFS client begin to write data .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.write_begin .fi .SH "VALUES" .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIoffset\fR .RS 4 start address of this write operation .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIsize\fR .RS 4 write bytes .RE .PP \fIto\fR .RS 4 end address of this write operation .RE .SH "DESCRIPTION" .PP Occurs when write operation occurs on nfs\&. It prepare a page for writing, look for a request corresponding to the page\&. If there is one, and it belongs to another file, it flush it out before it tries to copy anything into the page\&. Also do the same if it finds a request from an existing dropped page .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.write_end.3stap000066400000000000000000000041451356460210500277630ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.write_end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.write_end \- NFS client complete writing data .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.write_end .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIoffset\fR .RS 4 start address of this write operation .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIsize\fR .RS 4 write bytes .RE .PP \fIto\fR .RS 4 end address of this write operation .RE .PP \fIi_flag\fR .RS 4 file flags .RE .PP \fIsb_flag\fR .RS 4 super block flags .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIino\fR .RS 4 inode number .RE .SH "DESCRIPTION" .PP Fires when do a write operation on nfs, often after prepare_write .PP Update and possibly write a cached page of an NFS file\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.writepage.3stap000066400000000000000000000044421356460210500277720ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.writepage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.writepage \- NFS client writing a mapped page to the NFS server .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.writepage .fi .SH "VALUES" .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIi_flag\fR .RS 4 file flags .RE .PP \fIsize\fR .RS 4 number of pages to be written in this execution .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIsb_flag\fR .RS 4 super block flags .RE .PP \fIi_state\fR .RS 4 inode state flags .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIwsize\fR .RS 4 write size .RE .PP \fIfor_reclaim\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs invoked from the page allocator .RE .PP \fIfor_kupdate\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs a kupdate writeback .RE .SH "DESCRIPTION" .PP The priority of wb is decided by the flags \fIfor_reclaim\fR and \fIfor_kupdate\fR\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.writepages.3stap000066400000000000000000000041441356460210500301540ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.writepages .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.writepages \- NFS client writing several dirty pages to the NFS server .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.writepages .fi .SH "VALUES" .PP \fIfor_kupdate\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs a kupdate writeback .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIfor_reclaim\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs invoked from the page allocator .RE .PP \fIwsize\fR .RS 4 write size .RE .PP \fIwpages\fR .RS 4 write size (in pages) .RE .PP \fIsize\fR .RS 4 number of pages attempted to be written in this execution .RE .PP \fInr_to_write\fR .RS 4 number of pages attempted to be written in this execution .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH "DESCRIPTION" .PP The priority of wb is decided by the flags \fIfor_reclaim\fR and \fIfor_kupdate\fR\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.aio_read.3stap000066400000000000000000000040501356460210500275460ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.aio_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.A" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.aio_read \- NFS client aio_read file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.aio_read .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIpos\fR .RS 4 current position of file .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIbuf\fR .RS 4 the address of buf in user space .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.aio_write.3stap000066400000000000000000000033441356460210500277720ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.aio_write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.A" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.aio_write \- NFS client aio_write file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.aio_write .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIpos\fR .RS 4 offset of the file .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIbuf\fR .RS 4 the address of buf in user space .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.check_flags.3stap000066400000000000000000000027341356460210500302430ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.check_flags .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.C" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.check_flags \- NFS client checking flag operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.check_flags .fi .SH "VALUES" .PP \fIflag\fR .RS 4 file flag .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.flush.3stap000066400000000000000000000031061356460210500271250ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.flush .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.F" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.flush \- NFS client flush file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.flush .fi .SH "VALUES" .PP \fImode\fR .RS 4 file mode .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIndirty\fR .RS 4 number of dirty page .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.fsync.3stap000066400000000000000000000030371356460210500271310ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.fsync .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.F" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.fsync \- NFS client fsync operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.fsync .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIndirty\fR .RS 4 number of dirty pages .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.llseek.3stap000066400000000000000000000033111356460210500272610ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.llseek .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.L" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.llseek \- NFS client llseek operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.llseek .fi .SH "VALUES" .PP \fIwhence\fR .RS 4 the position to seek from .RE .PP \fIwhence_str\fR .RS 4 symbolic string representation of the position to seek from .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIoffset\fR .RS 4 the offset of the file will be repositioned .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.lock.3stap000066400000000000000000000034211356460210500267340ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.lock .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.L" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.lock \- NFS client file lock operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.lock .fi .SH "VALUES" .PP \fIfl_type\fR .RS 4 lock type .RE .PP \fIcmd\fR .RS 4 cmd arguments .RE .PP \fIfl_end\fR .RS 4 ending offset of locked region .RE .PP \fIfl_start\fR .RS 4 starting offset of locked region .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIfl_flag\fR .RS 4 lock flags .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIi_mode\fR .RS 4 file type and access rights .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.mmap.3stap000066400000000000000000000041431356460210500267400ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.mmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.M" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.mmap \- NFS client mmap operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.mmap .fi .SH "VALUES" .PP \fIvm_start\fR .RS 4 start address within vm_mm .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIvm_end\fR .RS 4 the first byte after end address within vm_mm .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIbuf\fR .RS 4 the address of buf in user space .RE .PP \fIvm_flag\fR .RS 4 vm flags .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.open.3stap000066400000000000000000000031521356460210500267460ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.O" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.open \- NFS client file open operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.open .fi .SH "VALUES" .PP \fIflag\fR .RS 4 file flag .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.read.3stap000066400000000000000000000031641356460210500267230ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.read \- NFS client read operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.read .fi .SH "VALUES" .PP \fIdevname\fR .RS 4 block device name .RE .SH "DESCRIPTION" .PP SystemTap uses the vfs\&.do_sync_read probe to implement this probe and as a result will get operations other than the NFS client read operations\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.read_iter.3stap000066400000000000000000000037631356460210500277530ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.read_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.read_iter \- NFS client read_iter file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.read_iter .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIpos\fR .RS 4 current position of file .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.release.3stap000066400000000000000000000030361356460210500274260ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.release \- NFS client release page operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.release .fi .SH "VALUES" .PP \fImode\fR .RS 4 file mode .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.sendfile.3stap000066400000000000000000000036241356460210500276020ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.sendfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.S" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.sendfile \- NFS client send file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.sendfile .fi .SH "VALUES" .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIppos\fR .RS 4 current position of file .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.write.3stap000066400000000000000000000031721356460210500271410ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.write \- NFS client write operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.write .fi .SH "VALUES" .PP \fIdevname\fR .RS 4 block device name .RE .SH "DESCRIPTION" .PP SystemTap uses the vfs\&.do_sync_write probe to implement this probe and as a result will get operations other than the NFS client write operations\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.write_iter.3stap000066400000000000000000000032571356460210500301700ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.write_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.write_iter \- NFS client write_iter file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.write_iter .fi .SH "VALUES" .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIpos\fR .RS 4 offset of the file .RE .PP \fIino\fR .RS 4 inode number .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit.3stap000066400000000000000000000043731356460210500274620ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.commit \- NFS client committing data on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.commit .fi .SH "VALUES" .PP \fIsize\fR .RS 4 read bytes in this execution .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .SH "DESCRIPTION" .PP All the nfs\&.proc\&.commit kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2\&.6\&.21 and newer kernels\&. .PP Fires when client writes the buffered data to disk\&. The buffered data is asynchronously written by client earlier\&. The commit function works in sync way\&. This probe point does not exist in NFSv2\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit_done.3stap000066400000000000000000000037321356460210500304650ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.commit_done \- NFS client response to a commit RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.commit_done .fi .SH "VALUES" .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIvalid\fR .RS 4 fattr\->valid, indicates which fields are valid .RE .PP \fIstatus\fR .RS 4 result of last operation .RE .PP \fIcount\fR .RS 4 number of bytes committed .RE .SH "DESCRIPTION" .PP Fires when a reply to a commit RPC task is received or some commit operation error occur (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit_setup.3stap000066400000000000000000000041121356460210500306710ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.commit_setup \- NFS client setting up a commit RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.commit_setup .fi .SH "VALUES" .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIsize\fR .RS 4 bytes in this commit .RE .PP \fIcount\fR .RS 4 bytes in this commit .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .SH "DESCRIPTION" .PP The commit_setup function is used to setup a commit RPC task\&. Is is not doing the actual commit operation\&. It does not exist in NFSv2\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.create.3stap000066400000000000000000000034651356460210500274360ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.create \- NFS client creating file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.create .fi .SH "VALUES" .PP \fIflag\fR .RS 4 indicates create mode (only for NFSv3 and NFSv4) .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .PP \fIfh\fR .RS 4 file handle of parent dir .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.handle_exception.3stap000066400000000000000000000031421356460210500314740ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.handle_exception .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.handle_exception \- NFS client handling an NFSv4 exception .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.handle_exception .fi .SH "VALUES" .PP \fIerrorcode\fR .RS 4 indicates the type of error .RE .SH "DESCRIPTION" .PP This is the error handling routine for processes for NFSv4\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.lookup.3stap000066400000000000000000000036311356460210500274770ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.lookup \- NFS client opens/searches a file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.lookup .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 the name of file which client opens/searches on server .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIname_len\fR .RS 4 the length of file name .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.open.3stap000066400000000000000000000034431356460210500271300ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.open \- NFS client allocates file read/write context information .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.open .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIflag\fR .RS 4 file flag .RE .PP \fImode\fR .RS 4 file mode .RE .SH "DESCRIPTION" .PP Allocate file read/write context information .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read.3stap000066400000000000000000000036571356460210500271110ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.read \- NFS client synchronously reads file from server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.read .fi .SH "VALUES" .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIflags\fR .RS 4 used to set task\->tk_flags in rpc_init_task function .RE .PP \fIcount\fR .RS 4 read bytes in this execution .RE .SH "DESCRIPTION" .PP All the nfs\&.proc\&.read kernel functions were removed in kernel commit 8e0969 in December 2006, so these probes do not exist on Linux 2\&.6\&.21 and newer kernels\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read_done.3stap000066400000000000000000000035661356460210500301150ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.read_done \- NFS client response to a read RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.read_done .fi .SH "VALUES" .PP \fIstatus\fR .RS 4 result of last operation .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIcount\fR .RS 4 number of bytes read .RE .SH "DESCRIPTION" .PP Fires when a reply to a read RPC task is received or some read error occurs (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read_setup.3stap000066400000000000000000000035361356460210500303250ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.read_setup \- NFS client setting up a read RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.read_setup .fi .SH "VALUES" .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIcount\fR .RS 4 read bytes in this execution .RE .PP \fIsize\fR .RS 4 read bytes in this execution .RE .SH "DESCRIPTION" .PP The read_setup function is used to setup a read RPC task\&. It is not doing the actual read operation\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.release.3stap000066400000000000000000000034521356460210500276070ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.release \- NFS client releases file read/write context information .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.release .fi .SH "VALUES" .PP \fImode\fR .RS 4 file mode .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIflag\fR .RS 4 file flag .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIfilename\fR .RS 4 file name .RE .SH "DESCRIPTION" .PP Release file read/write context information .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.remove.3stap000066400000000000000000000033541356460210500274650ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.remove .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.remove \- NFS client removes a file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.remove .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIfh\fR .RS 4 file handle of parent dir .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename.3stap000066400000000000000000000036341356460210500274400ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.rename \- NFS client renames a file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.rename .fi .SH "VALUES" .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIold_filelen\fR .RS 4 length of old file name .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fInew_filelen\fR .RS 4 length of new file name .RE .PP \fInew_name\fR .RS 4 new file name .RE .PP \fInew_fh\fR .RS 4 file handle of new parent dir .RE .PP \fIold_name\fR .RS 4 old file name .RE .PP \fIold_fh\fR .RS 4 file handle of old parent dir .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename_done.3stap000066400000000000000000000037051356460210500304440ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.rename_done \- NFS client response to a rename RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.rename_done .fi .SH "VALUES" .PP \fIstatus\fR .RS 4 result of last operation .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIold_fh\fR .RS 4 file handle of old parent dir .RE .PP \fInew_fh\fR .RS 4 file handle of new parent dir .RE .SH "DESCRIPTION" .PP Fires when a reply to a rename RPC task is received or some rename error occurs (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename_setup.3stap000066400000000000000000000034051356460210500306540ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.rename_setup \- NFS client setting up a rename RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.rename_setup .fi .SH "VALUES" .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIfh\fR .RS 4 file handle of parent dir .RE .SH "DESCRIPTION" .PP The rename_setup function is used to setup a rename RPC task\&. Is is not doing the actual rename operation\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write.3stap000066400000000000000000000042011356460210500273120ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.write \- NFS client synchronously writes file to server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.write .fi .SH "VALUES" .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIsize\fR .RS 4 read bytes in this execution .RE .PP \fIflags\fR .RS 4 used to set task\->tk_flags in rpc_init_task function .RE .SH "DESCRIPTION" .PP All the nfs\&.proc\&.write kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2\&.6\&.21 and newer kernels\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write_done.3stap000066400000000000000000000037111356460210500303240ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.write_done \- NFS client response to a write RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.write_done .fi .SH "VALUES" .PP \fIcount\fR .RS 4 number of bytes written .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIstatus\fR .RS 4 result of last operation .RE .PP \fIvalid\fR .RS 4 fattr\->valid, indicates which fields are valid .RE .SH "DESCRIPTION" .PP Fires when a reply to a write RPC task is received or some write error occurs (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write_setup.3stap000066400000000000000000000043611356460210500305410ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.write_setup \- NFS client setting up a write RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.write_setup .fi .SH "VALUES" .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIhow\fR .RS 4 used to set args\&.stable\&. The stable value could be: NFS_UNSTABLE,NFS_DATA_SYNC,NFS_FILE_SYNC (in nfs\&.proc3\&.write_setup and nfs\&.proc4\&.write_setup) .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIsize\fR .RS 4 bytes written in this execution .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIcount\fR .RS 4 bytes written in this execution .RE .SH "DESCRIPTION" .PP The write_setup function is used to setup a write RPC task\&. It is not doing the actual write operation\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.close.3stap000066400000000000000000000030351356460210500264730ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CLOSE" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.close \- NFS server closing a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.close .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .SH "DESCRIPTION" .PP This probe point does not exist in kernels starting with 4\&.2\&. .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.commit.3stap000066400000000000000000000034111356460210500266540ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.COMMIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.commit \- NFS server committing all pending writes to stable storage .SH "SYNOPSIS" .sp .nf nfsd\&.commit .fi .SH "VALUES" .PP \fIflag\fR .RS 4 indicates whether this execution is a sync operation .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.create.3stap000066400000000000000000000036471356460210500266420ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CREATE" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.create \- NFS server creating a file(regular,dir,device,fifo) for client .SH "SYNOPSIS" .sp .nf nfsd\&.create .fi .SH "VALUES" .PP \fIiap_valid\fR .RS 4 Attribute flags .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIiap_mode\fR .RS 4 file access mode .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fItype\fR .RS 4 file type(regular,dir,device,fifo \&.\&.\&.) .RE .SH "DESCRIPTION" .PP Sometimes nfsd will call nfsd_create_v3 instead of this this probe point\&. .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.createv3.3stap000066400000000000000000000043671356460210500271130ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.createv3 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CREATE" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.createv3 \- NFS server creating a regular file or set file attributes for client .SH "SYNOPSIS" .sp .nf nfsd\&.createv3 .fi .SH "VALUES" .PP \fIcreatemode\fR .RS 4 create mode \&.The possible values could be: NFS3_CREATE_EXCLUSIVE, NFS3_CREATE_UNCHECKED, or NFS3_CREATE_GUARDED .RE .PP \fIverifier\fR .RS 4 file attributes (atime,mtime,mode)\&. It\*(Aqs used to reset file attributes for CREATE_EXCLUSIVE .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fItruncp\fR .RS 4 trunp arguments, indicates if the file shouldbe truncate .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIiap_valid\fR .RS 4 Attribute flags .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIiap_mode\fR .RS 4 file access mode .RE .SH "DESCRIPTION" .PP This probepoints is only called by nfsd3_proc_create and nfsd4_open when op_claim_type is NFS4_OPEN_CLAIM_NULL\&. .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.dispatch.3stap000066400000000000000000000032651356460210500271720ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.dispatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.DISPAT" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.dispatch \- NFS server receives an operation from client .SH "SYNOPSIS" .sp .nf nfsd\&.dispatch .fi .SH "VALUES" .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIxid\fR .RS 4 transmission id .RE .PP \fIproc\fR .RS 4 procedure number .RE .PP \fIprog\fR .RS 4 program number .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIversion\fR .RS 4 nfs version .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.lookup.3stap000066400000000000000000000032541356460210500267020ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.LOOKUP" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.lookup \- NFS server opening or searching file for a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.lookup .fi .SH "VALUES" .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIfh\fR .RS 4 file handle of parent dir(the first part is the length of the file handle) .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.open.3stap000066400000000000000000000032751356460210500263350ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.OPEN" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.open \- NFS server opening a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.open .fi .SH "VALUES" .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fItype\fR .RS 4 type of file (regular file or dir) .RE .PP \fIaccess\fR .RS 4 indicates the type of open (read/write/commit/readdir\&.\&.\&.) .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.commit.3stap000066400000000000000000000035721356460210500276260ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.commit \- NFS server performing a commit operation for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.commit .fi .SH "VALUES" .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.create.3stap000066400000000000000000000035141356460210500275750ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.create \- NFS server creating a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.create .fi .SH "VALUES" .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.lookup.3stap000066400000000000000000000035561356460210500276510ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.lookup \- NFS server opening or searching for a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.lookup .fi .SH "VALUES" .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle of parent dir (the first part is the length of the file handle) .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.read.3stap000066400000000000000000000037561356460210500272550ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.read \- NFS server reading file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.read .fi .SH "VALUES" .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.remove.3stap000066400000000000000000000035141356460210500276270ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.remove .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.remove \- NFS server removing a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.remove .fi .SH "VALUES" .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.rename.3stap000066400000000000000000000035421356460210500276020ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.rename \- NFS Server renaming a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.rename .fi .SH "VALUES" .PP \fItfh\fR .RS 4 file handler of new path .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fItname\fR .RS 4 new file name .RE .PP \fItlen\fR .RS 4 length of new file name .RE .PP \fIflen\fR .RS 4 length of old file name .RE .PP \fIfh\fR .RS 4 file handler of old path .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIfilename\fR .RS 4 old file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.write.3stap000066400000000000000000000040421356460210500274610ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.write \- NFS server writing data to file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.write .fi .SH "VALUES" .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIstable\fR .RS 4 argp\->stable .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.read.3stap000066400000000000000000000036031356460210500263020ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.READ" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.read \- NFS server reading data from a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.read .fi .SH "VALUES" .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIfile\fR .RS 4 argument file, indicates if the file has been opened\&. .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.rename.3stap000066400000000000000000000033601356460210500266360ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.RENAME" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.rename \- NFS server renaming a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.rename .fi .SH "VALUES" .PP \fIfh\fR .RS 4 file handler of old path .RE .PP \fIflen\fR .RS 4 length of old file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilename\fR .RS 4 old file name .RE .PP \fItfh\fR .RS 4 file handler of new path .RE .PP \fItlen\fR .RS 4 length of new file name .RE .PP \fItname\fR .RS 4 new file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.unlink.3stap000066400000000000000000000033121356460210500266640ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.unlink .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.UNLINK" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.unlink \- NFS server removing a file or a directory for client .SH "SYNOPSIS" .sp .nf nfsd\&.unlink .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fItype\fR .RS 4 file type (file or dir) .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.write.3stap000066400000000000000000000036051356460210500265230ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.WRITE" "3stap" "November 2019" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.write \- NFS server writing data to a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.write .fi .SH "VALUES" .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfile\fR .RS 4 argument file, indicates if the file has been opened\&. .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.balance.3stap000066400000000000000000000030061356460210500277750ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.balance .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.B" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.balance \- A cpu attempting to find more work\&. .SH "SYNOPSIS" .sp .nf scheduler\&.balance .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The cpu looking for more work\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.cpu_off.3stap000066400000000000000000000033401356460210500300320ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.cpu_off .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.cpu_off \- Process is about to stop running on a cpu .SH "SYNOPSIS" .sp .nf scheduler\&.cpu_off .fi .SH "VALUES" .PP \fIidle\fR .RS 4 boolean indicating whether current is the idle process .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_prev\fR .RS 4 the process leaving the cpu (same as current) .RE .PP \fItask_next\fR .RS 4 the process replacing current .RE .SH "CONTEXT" .PP The process leaving the cpu\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.cpu_on.3stap000066400000000000000000000032411356460210500276740ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.cpu_on .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.cpu_on \- Process is beginning execution on a cpu .SH "SYNOPSIS" .sp .nf scheduler\&.cpu_on .fi .SH "VALUES" .PP \fItask_prev\fR .RS 4 the process that was previously running on this cpu .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIidle\fR .RS 4 \- boolean indicating whether current is the idle process .RE .SH "CONTEXT" .PP The resuming process\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.ctxswitch.3stap000066400000000000000000000043041356460210500304320ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.ctxswitch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.ctxswitch \- A context switch is occuring\&. .SH "SYNOPSIS" .sp .nf scheduler\&.ctxswitch .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIprev_tid\fR .RS 4 The TID of the process to be switched out .RE .PP \fIprev_priority\fR .RS 4 The priority of the process to be switched out .RE .PP \fInexttsk_state\fR .RS 4 the state of the process to be switched in .RE .PP \fIprev_task_name\fR .RS 4 The name of the process to be switched out .RE .PP \fIprev_pid\fR .RS 4 The PID of the process to be switched out .RE .PP \fInext_pid\fR .RS 4 The PID of the process to be switched in .RE .PP \fInext_task_name\fR .RS 4 The name of the process to be switched in .RE .PP \fInext_tid\fR .RS 4 The TID of the process to be switched in .RE .PP \fInext_priority\fR .RS 4 The priority of the process to be switched in .RE .PP \fIprevtsk_state\fR .RS 4 the state of the process to be switched out .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.kthread_stop.3stap000066400000000000000000000030711356460210500311010ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.kthread_stop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.K" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.kthread_stop \- A thread created by kthread_create is being stopped .SH "SYNOPSIS" .sp .nf scheduler\&.kthread_stop .fi .SH "VALUES" .PP \fIthread_priority\fR .RS 4 priority of the thread .RE .PP \fIthread_pid\fR .RS 4 PID of the thread being stopped .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.kthread_stop.return.3stap000066400000000000000000000031121356460210500324130ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.kthread_stop.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.K" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.kthread_stop.return \- A kthread is stopped and gets the return value .SH "SYNOPSIS" .sp .nf scheduler\&.kthread_stop\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIreturn_value\fR .RS 4 return value after stopping the thread .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.migrate.3stap000066400000000000000000000033311356460210500300410ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.migrate .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.M" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.migrate \- Task migrating across cpus .SH "SYNOPSIS" .sp .nf scheduler\&.migrate .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIpid\fR .RS 4 PID of the task being migrated .RE .PP \fIcpu_from\fR .RS 4 the original cpu .RE .PP \fIpriority\fR .RS 4 priority of the task being migrated .RE .PP \fItask\fR .RS 4 the process that is being migrated .RE .PP \fIcpu_to\fR .RS 4 the destination cpu .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_exit.3stap000066400000000000000000000030741356460210500311240ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_exit \- Process exiting .SH "SYNOPSIS" .sp .nf scheduler\&.process_exit .fi .SH "VALUES" .PP \fIpriority\fR .RS 4 priority of the process exiting .RE .PP \fIpid\fR .RS 4 PID of the process exiting .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_fork.3stap000066400000000000000000000030731356460210500311130ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_fork .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_fork \- Process forked .SH "SYNOPSIS" .sp .nf scheduler\&.process_fork .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIchild_pid\fR .RS 4 PID of the child process .RE .PP \fIparent_pid\fR .RS 4 PID of the parent process .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_free.3stap000066400000000000000000000031511356460210500310700ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_free .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_free \- Scheduler freeing a data structure for a process .SH "SYNOPSIS" .sp .nf scheduler\&.process_free .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIpid\fR .RS 4 PID of the process getting freed .RE .PP \fIpriority\fR .RS 4 priority of the process getting freed .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_wait.3stap000066400000000000000000000030471356460210500311170ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_wait .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_wait \- Scheduler starting to wait on a process .SH "SYNOPSIS" .sp .nf scheduler\&.process_wait .fi .SH "VALUES" .PP \fIpid\fR .RS 4 PID of the process scheduler is waiting on .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.signal_send.3stap000066400000000000000000000030641356460210500307020ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.signal_send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.S" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.signal_send \- Sending a signal .SH "SYNOPSIS" .sp .nf scheduler\&.signal_send .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIsignal_number\fR .RS 4 signal number .RE .PP \fIpid\fR .RS 4 pid of the process sending signal .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.tick.3stap000066400000000000000000000031741356460210500273500ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.tick .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.T" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.tick \- Schedulers internal tick, a processes timeslice accounting is updated .SH "SYNOPSIS" .sp .nf scheduler\&.tick .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIidle\fR .RS 4 boolean indicating whether current is the idle process .RE .SH "CONTEXT" .PP The process whose accounting will be updated\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wait_task.3stap000066400000000000000000000031451356460210500304020ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wait_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.wait_task \- Waiting on a task to unschedule (become inactive) .SH "SYNOPSIS" .sp .nf scheduler\&.wait_task .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_pid\fR .RS 4 PID of the task the scheduler is waiting on .RE .PP \fItask_priority\fR .RS 4 priority of the task .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wakeup.3stap000066400000000000000000000033651356460210500277140ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wakeup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.wakeup \- Task is woken up .SH "SYNOPSIS" .sp .nf scheduler\&.wakeup .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_cpu\fR .RS 4 cpu of the task being woken up .RE .PP \fItask_tid\fR .RS 4 tid of the task being woken up .RE .PP \fItask_priority\fR .RS 4 priority of the task being woken up .RE .PP \fItask_state\fR .RS 4 state of the task being woken up .RE .PP \fItask_pid\fR .RS 4 PID of the task being woken up .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wakeup_new.3stap000066400000000000000000000034071356460210500305620ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wakeup_new .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "November 2019" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.wakeup_new \- Newly created task is woken up for the first time .SH "SYNOPSIS" .sp .nf scheduler\&.wakeup_new .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_cpu\fR .RS 4 cpu of the task woken up .RE .PP \fItask_state\fR .RS 4 state of the task woken up .RE .PP \fItask_pid\fR .RS 4 PID of the new task woken up .RE .PP \fItask_priority\fR .RS 4 priority of the new task .RE .PP \fItask_tid\fR .RS 4 TID of the new task woken up .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iocompleted.3stap000066400000000000000000000040521356460210500277010ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iocompleted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOCOMP" "3stap" "November 2019" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.iocompleted \- SCSI mid\-layer running the completion processing for block device I/O requests .SH "SYNOPSIS" .sp .nf scsi\&.iocompleted .fi .SH "VALUES" .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIgoodbytes\fR .RS 4 The bytes completed .RE .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iodispatching.3stap000066400000000000000000000042511356460210500302230ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iodispatching .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IODISP" "3stap" "November 2019" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.iodispatching \- SCSI mid\-layer dispatched low\-level SCSI command .SH "SYNOPSIS" .sp .nf scsi\&.iodispatching .fi .SH "VALUES" .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIrequest_buffer\fR .RS 4 The request buffer address .RE .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device 0 (DMA_BIDIRECTIONAL), 1 (DMA_TO_DEVICE), 2 (DMA_FROM_DEVICE), 3 (DMA_NONE) .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIrequest_bufflen\fR .RS 4 The request buffer length .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iodone.3stap000066400000000000000000000040721356460210500266540ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iodone .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IODONE" "3stap" "November 2019" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.iodone \- SCSI command completed by low level driver and enqueued into the done queue\&. .SH "SYNOPSIS" .sp .nf scsi\&.iodone .fi .SH "VALUES" .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIscsi_timer_pending\fR .RS 4 1 if a timer is pending on this request .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device\&. .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIlun\fR .RS 4 The lun number .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scsi.ioentry.3stap000066400000000000000000000034111356460210500270640ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.ioentry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOENTR" "3stap" "November 2019" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.ioentry \- Prepares a SCSI mid\-layer request .SH "SYNOPSIS" .sp .nf scsi\&.ioentry .fi .SH "VALUES" .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .PP \fIdisk_major\fR .RS 4 The major number of the disk (\-1 if no information) .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIdisk_minor\fR .RS 4 The minor number of the disk (\-1 if no information) .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scsi.ioexecute.3stap000066400000000000000000000042001356460210500273620ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.ioexecute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOEXEC" "3stap" "November 2019" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.ioexecute \- Create mid\-layer SCSI request and wait for the result .SH "SYNOPSIS" .sp .nf scsi\&.ioexecute .fi .SH "VALUES" .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device\&. .RE .PP \fIretries\fR .RS 4 Number of times to retry request .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIrequest_bufflen\fR .RS 4 The data buffer buffer length .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIrequest_buffer\fR .RS 4 The data buffer address .RE .PP \fItimeout\fR .RS 4 Request timeout in seconds .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::scsi.set_state.3stap000066400000000000000000000034751356460210500274000ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.set_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.SET_ST" "3stap" "November 2019" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.set_state \- Order SCSI device state change .SH "SYNOPSIS" .sp .nf scsi\&.set_state .fi .SH "VALUES" .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIold_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIstate_str\fR .RS 4 The new state of the device, as a string .RE .PP \fIstate\fR .RS 4 The new state of the device .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIold_state\fR .RS 4 The current state of the device .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.check_ignored.3stap000066400000000000000000000032401356460210500304730ustar00rootroot00000000000000'\" t .\" Title: probe::signal.check_ignored .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.check_ignored \- Checking to see signal is ignored .SH "SYNOPSIS" .sp .nf signal\&.check_ignored .fi .SH "VALUES" .PP \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The number of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.check_ignored.return.3stap000066400000000000000000000030411356460210500320100ustar00rootroot00000000000000'\" t .\" Title: probe::signal.check_ignored.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.check_ignored.return \- Check to see signal is ignored completed .SH "SYNOPSIS" .sp .nf signal\&.check_ignored\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.checkperm.3stap000066400000000000000000000035761356460210500276640ustar00rootroot00000000000000'\" t .\" Title: probe::signal.checkperm .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.checkperm \- Check being performed on a sent signal .SH "SYNOPSIS" .sp .nf signal\&.checkperm .fi .SH "VALUES" .PP \fIsi_code\fR .RS 4 Indicates the signal type .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The number of the signal .RE .PP \fIsinfo\fR .RS 4 The address of the siginfo structure .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.checkperm.return.3stap000066400000000000000000000030271356460210500311710ustar00rootroot00000000000000'\" t .\" Title: probe::signal.checkperm.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.checkperm.return \- Check performed on a sent signal completed .SH "SYNOPSIS" .sp .nf signal\&.checkperm\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.do_action.3stap000066400000000000000000000036011356460210500276470ustar00rootroot00000000000000'\" t .\" Title: probe::signal.do_action .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.DO_A" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.do_action \- Examining or changing a signal action .SH "SYNOPSIS" .sp .nf signal\&.do_action .fi .SH "VALUES" .PP \fIoldsigact_addr\fR .RS 4 The address of the old sigaction struct associated with the signal .RE .PP \fIsig\fR .RS 4 The signal to be examined/changed .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsa_handler\fR .RS 4 The new handler of the signal .RE .PP \fIsa_mask\fR .RS 4 The new mask of the signal .RE .PP \fIsigact_addr\fR .RS 4 The address of the new sigaction struct associated with the signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.do_action.return.3stap000066400000000000000000000030341356460210500311650ustar00rootroot00000000000000'\" t .\" Title: probe::signal.do_action.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.DO_A" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.do_action.return \- Examining or changing a signal action completed .SH "SYNOPSIS" .sp .nf signal\&.do_action\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 Return value as a string .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.flush.3stap000066400000000000000000000033171356460210500270350ustar00rootroot00000000000000'\" t .\" Title: probe::signal.flush .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FLUS" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.flush \- Flushing all pending signals for a task .SH "SYNOPSIS" .sp .nf signal\&.flush .fi .SH "VALUES" .PP \fItask\fR .RS 4 The task handler of the process performing the flush .RE .PP \fIsig_pid\fR .RS 4 The PID of the process associated with the task performing the flush .RE .PP \fIpid_name\fR .RS 4 The name of the process associated with the task performing the flush .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.force_segv.3stap000066400000000000000000000032761356460210500300420ustar00rootroot00000000000000'\" t .\" Title: probe::signal.force_segv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FORC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.force_segv \- Forcing send of SIGSEGV .SH "SYNOPSIS" .sp .nf signal\&.force_segv .fi .SH "VALUES" .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The number of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.force_segv.return.3stap000066400000000000000000000030201356460210500313430ustar00rootroot00000000000000'\" t .\" Title: probe::signal.force_segv.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FORC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.force_segv.return \- Forcing send of SIGSEGV complete .SH "SYNOPSIS" .sp .nf signal\&.force_segv\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.handle.3stap000066400000000000000000000041301356460210500271410ustar00rootroot00000000000000'\" t .\" Title: probe::signal.handle .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.HAND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.handle \- Signal handler being invoked .SH "SYNOPSIS" .sp .nf signal\&.handle .fi .SH "VALUES" .PP \fIregs\fR .RS 4 The address of the kernel\-mode stack area (deprecated in SystemTap 2\&.1) .RE .PP \fIka_addr\fR .RS 4 The address of the k_sigaction table associated with the signal .RE .PP \fIsig_mode\fR .RS 4 Indicates whether the signal was a user\-mode or kernel\-mode signal .RE .PP \fIoldset_addr\fR .RS 4 The address of the bitmask array of blocked signals (deprecated in SystemTap 2\&.1) .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The signal number that invoked the signal handler .RE .PP \fIsinfo\fR .RS 4 The address of the siginfo table .RE .PP \fIsig_code\fR .RS 4 The si_code value of the siginfo signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.handle.return.3stap000066400000000000000000000030751356460210500304660ustar00rootroot00000000000000'\" t .\" Title: probe::signal.handle.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.HAND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.handle.return \- Signal handler invocation completed .SH "SYNOPSIS" .sp .nf signal\&.handle\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 Return value as a string .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP (deprecated in SystemTap 2\&.1) .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.pending.3stap000066400000000000000000000034141356460210500273360ustar00rootroot00000000000000'\" t .\" Title: probe::signal.pending .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.pending \- Examining pending signal .SH "SYNOPSIS" .sp .nf signal\&.pending .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsigset_add\fR .RS 4 The address of the user\-space signal set (sigset_t) .RE .PP \fIsigset_size\fR .RS 4 The size of the user\-space signal set .RE .SH "DESCRIPTION" .PP This probe is used to examine a set of signals pending for delivery to a specific thread\&. This normally occurs when the do_sigpending kernel function is executed\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.pending.return.3stap000066400000000000000000000030161356460210500306520ustar00rootroot00000000000000'\" t .\" Title: probe::signal.pending.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.pending.return \- Examination of pending signal completed .SH "SYNOPSIS" .sp .nf signal\&.pending\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.procmask.3stap000066400000000000000000000036231356460210500275330ustar00rootroot00000000000000'\" t .\" Title: probe::signal.procmask .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PROC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.procmask \- Examining or changing blocked signals .SH "SYNOPSIS" .sp .nf signal\&.procmask .fi .SH "VALUES" .PP \fIoldsigset_addr\fR .RS 4 The old address of the signal set (sigset_t) .RE .PP \fIhow\fR .RS 4 Indicates how to change the blocked signals; possible values are SIG_BLOCK=0 (for blocking signals), SIG_UNBLOCK=1 (for unblocking signals), and SIG_SETMASK=2 for setting the signal mask\&. .RE .PP \fIsigset\fR .RS 4 The actual value to be set for sigset_t (correct?) .RE .PP \fIsigset_addr\fR .RS 4 The address of the signal set (sigset_t) to be implemented .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.procmask.return.3stap000066400000000000000000000030311356460210500310420ustar00rootroot00000000000000'\" t .\" Title: probe::signal.procmask.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PROC" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.procmask.return \- Examining or changing blocked signals completed .SH "SYNOPSIS" .sp .nf signal\&.procmask\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 Return value as a string .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.send.3stap000066400000000000000000000041641356460210500266460ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send \- Signal being sent to a process .SH "SYNOPSIS" .sp .nf signal\&.send .fi .SH "VALUES" .PP \fIsig\fR .RS 4 The number of the signal .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsi_code\fR .RS 4 Indicates the signal type .RE .PP \fIsend2queue\fR .RS 4 Indicates whether the signal is sent to an existing sigqueue (deprecated in SystemTap 2\&.1) .RE .PP \fIname\fR .RS 4 The name of the function used to send out the signal .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .PP \fIshared\fR .RS 4 Indicates whether the signal is shared by the thread group .RE .PP \fIsinfo\fR .RS 4 The address of siginfo struct .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .SH "CONTEXT" .PP The signal\*(Aqs sender\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.send.return.3stap000066400000000000000000000056031356460210500301630ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send.return \- Signal being sent to a process completed (deprecated in SystemTap 2\&.1) .SH "SYNOPSIS" .sp .nf signal\&.send\&.return .fi .SH "VALUES" .PP \fIshared\fR .RS 4 Indicates whether the sent signal is shared by the thread group\&. .RE .PP \fIname\fR .RS 4 The name of the function used to send out the signal .RE .PP \fIretstr\fR .RS 4 The return value to either __group_send_sig_info, specific_send_sig_info, or send_sigqueue .RE .PP \fIsend2queue\fR .RS 4 Indicates whether the sent signal was sent to an existing sigqueue .RE .SH "CONTEXT" .PP The signal\*(Aqs sender\&. (correct?) .SH "DESCRIPTION" .PP Possible __group_send_sig_info and specific_send_sig_info return values are as follows; .PP 0 \-\- The signal is successfully sent to a process, which means that, (1) the signal was ignored by the receiving process, (2) this is a non\-RT signal and the system already has one queued, and (3) the signal was successfully added to the sigqueue of the receiving process\&. .PP \-EAGAIN \-\- The sigqueue of the receiving process is overflowing, the signal was RT, and the signal was sent by a user using something other than \fBkill\fR\&. .PP Possible send_group_sigqueue and send_sigqueue return values are as follows; .PP 0 \-\- The signal was either successfully added into the sigqueue of the receiving process, or a SI_TIMER entry is already queued (in which case, the overrun count will be simply incremented)\&. .PP 1 \-\- The signal was ignored by the receiving process\&. .PP \-1 \-\- (send_sigqueue only) The task was marked exiting, allowing * posix_timer_event to redirect it to the group leader\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.send_sig_queue.3stap000066400000000000000000000034351356460210500307140ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send_sig_queue .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send_sig_queue \- Queuing a signal to a process .SH "SYNOPSIS" .sp .nf signal\&.send_sig_queue .fi .SH "VALUES" .PP \fIsigqueue_addr\fR .RS 4 The address of the signal queue .RE .PP \fIsig_pid\fR .RS 4 The PID of the process to which the signal is queued .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIpid_name\fR .RS 4 Name of the process to which the signal is queued .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The queued signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.send_sig_queue.return.3stap000066400000000000000000000030431356460210500322250ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send_sig_queue.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send_sig_queue.return \- Queuing a signal to a process completed .SH "SYNOPSIS" .sp .nf signal\&.send_sig_queue\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tgkill.3stap000066400000000000000000000040641356460210500301000ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tgkill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.sys_tgkill \- Sending kill signal to a thread group .SH "SYNOPSIS" .sp .nf signal\&.sys_tgkill .fi .SH "VALUES" .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The specific kill signal sent to the process .RE .PP \fItgid\fR .RS 4 The thread group ID of the thread receiving the kill signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIsig_pid\fR .RS 4 The PID of the thread receiving the kill signal .RE .SH "DESCRIPTION" .PP The tgkill call is similar to tkill, except that it also allows the caller to specify the thread group ID of the thread to be signalled\&. This protects against TID reuse\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tgkill.return.3stap000066400000000000000000000030701356460210500314120ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tgkill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.sys_tgkill.return \- Sending kill signal to a thread group completed .SH "SYNOPSIS" .sp .nf signal\&.sys_tgkill\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 The return value to either __group_send_sig_info, .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tkill.3stap000066400000000000000000000037511356460210500277330ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tkill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.sys_tkill \- Sending a kill signal to a thread .SH "SYNOPSIS" .sp .nf signal\&.sys_tkill .fi .SH "VALUES" .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The specific signal sent to the process .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the kill signal .RE .SH "DESCRIPTION" .PP The tkill call is analogous to kill(2), except that it also allows a process within a specific thread group to be targeted\&. Such processes are targeted through their unique thread IDs (TID)\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.syskill.3stap000066400000000000000000000034041356460210500274030ustar00rootroot00000000000000'\" t .\" Title: probe::signal.syskill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYSK" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.syskill \- Sending kill signal to a process .SH "SYNOPSIS" .sp .nf signal\&.syskill .fi .SH "VALUES" .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .PP \fIsig\fR .RS 4 The specific signal sent to the process .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.syskill.return.3stap000066400000000000000000000026501356460210500307230ustar00rootroot00000000000000'\" t .\" Title: probe::signal.syskill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYSK" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.syskill.return \- Sending kill signal completed .SH "SYNOPSIS" .sp .nf signal\&.syskill\&.return .fi .SH "VALUES" .PP None .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.systkill.return.3stap000066400000000000000000000030541356460210500311060ustar00rootroot00000000000000'\" t .\" Title: probe::signal.systkill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYST" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.systkill.return \- Sending kill signal to a thread completed .SH "SYNOPSIS" .sp .nf signal\&.systkill\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 The return value to either __group_send_sig_info, .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::signal.wakeup.3stap000066400000000000000000000034621356460210500272110ustar00rootroot00000000000000'\" t .\" Title: probe::signal.wakeup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.WAKE" "3stap" "November 2019" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.wakeup \- Sleeping process being wakened for signal .SH "SYNOPSIS" .sp .nf signal\&.wakeup .fi .SH "VALUES" .PP \fIpid_name\fR .RS 4 Name of the process to wake .RE .PP \fIsig_pid\fR .RS 4 The PID of the process to wake .RE .PP \fIstate_mask\fR .RS 4 A string representation indicating the mask of task states to wake\&. Possible values are TASK_INTERRUPTIBLE, TASK_STOPPED, TASK_TRACED, TASK_WAKEKILL, and TASK_INTERRUPTIBLE\&. .RE .PP \fIresume\fR .RS 4 Indicates whether to wake up a task in a STOPPED or TRACED state .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_read.3stap000066400000000000000000000035561356460210500274770ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_read \- Receiving message via \fBsock_aio_read\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_read .fi .SH "VALUES" .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_aio_read\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_read.return.3stap000066400000000000000000000040111356460210500310000ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_read.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_read.return \- Conclusion of message received via \fBsock_aio_read\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_read\&.return .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_aio_read\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_write.3stap000066400000000000000000000035541356460210500277140ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_write \- Message send via \fBsock_aio_write\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_write .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_aio_write\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_write.return.3stap000066400000000000000000000040101356460210500312160ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_write.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_write.return \- Conclusion of message send via \fBsock_aio_write\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_write\&.return .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_aio_write\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.close.3stap000066400000000000000000000033761356460210500270410ustar00rootroot00000000000000'\" t .\" Title: probe::socket.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CLOS" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.close \- Close a socket .SH "SYNOPSIS" .sp .nf socket\&.close .fi .SH "VALUES" .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The requester (user process or kernel) .SH "DESCRIPTION" .PP Fires at the beginning of closing a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.close.return.3stap000066400000000000000000000031021356460210500303420ustar00rootroot00000000000000'\" t .\" Title: probe::socket.close.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CLOS" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.close.return \- Return from closing a socket .SH "SYNOPSIS" .sp .nf socket\&.close\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The requester (user process or kernel) .SH "DESCRIPTION" .PP Fires at the conclusion of closing a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.create.3stap000066400000000000000000000034131356460210500271670ustar00rootroot00000000000000'\" t .\" Title: probe::socket.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CREA" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.create \- Creation of a socket .SH "SYNOPSIS" .sp .nf socket\&.create .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIrequester\fR .RS 4 Requested by user process or the kernel (1 = kernel, 0 = user) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .SH "CONTEXT" .PP The requester (see requester variable) .SH "DESCRIPTION" .PP Fires at the beginning of creating a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.create.return.3stap000066400000000000000000000036601356460210500305110ustar00rootroot00000000000000'\" t .\" Title: probe::socket.create.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CREA" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.create.return \- Return from Creation of a socket .SH "SYNOPSIS" .sp .nf socket\&.create\&.return .fi .SH "VALUES" .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIerr\fR .RS 4 Error code if success == 0 .RE .PP \fIrequester\fR .RS 4 Requested by user process or the kernel (1 = kernel, 0 = user) .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsuccess\fR .RS 4 Was socket creation successful? (1 = yes, 0 = no) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The requester (user process or kernel) .SH "DESCRIPTION" .PP Fires at the conclusion of creating a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.read_iter.3stap000066400000000000000000000035631356460210500276700ustar00rootroot00000000000000'\" t .\" Title: probe::socket.read_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.read_iter \- Receiving message via \fBsock_read_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.read_iter .fi .SH "VALUES" .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fItype\fR .RS 4 Socket type value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_read_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.read_iter.return.3stap000066400000000000000000000040161356460210500312000ustar00rootroot00000000000000'\" t .\" Title: probe::socket.read_iter.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.read_iter.return \- Conclusion of message received via \fBsock_read_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.read_iter\&.return .fi .SH "VALUES" .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_read_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.readv.3stap000066400000000000000000000035411356460210500270270ustar00rootroot00000000000000'\" t .\" Title: probe::socket.readv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.readv \- Receiving a message via \fBsock_readv\fR .SH "SYNOPSIS" .sp .nf socket\&.readv .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_readv\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.readv.return.3stap000066400000000000000000000037751356460210500303560ustar00rootroot00000000000000'\" t .\" Title: probe::socket.readv.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.readv.return \- Conclusion of receiving a message via \fBsock_readv\fR .SH "SYNOPSIS" .sp .nf socket\&.readv\&.return .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_readv\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.receive.3stap000066400000000000000000000035341356460210500273520ustar00rootroot00000000000000'\" t .\" Title: probe::socket.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECE" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.receive \- Message received on a socket\&. .SH "SYNOPSIS" .sp .nf socket\&.receive .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The message receiver .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.recvmsg.3stap000066400000000000000000000035461356460210500274010ustar00rootroot00000000000000'\" t .\" Title: probe::socket.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECV" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.recvmsg \- Message being received on socket .SH "SYNOPSIS" .sp .nf socket\&.recvmsg .fi .SH "VALUES" .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_recvmsg\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.recvmsg.return.3stap000066400000000000000000000037761356460210500307240ustar00rootroot00000000000000'\" t .\" Title: probe::socket.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECV" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.recvmsg.return \- Return from Message being received on socket .SH "SYNOPSIS" .sp .nf socket\&.recvmsg\&.return .fi .SH "VALUES" .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_recvmsg\fR function\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.send.3stap000066400000000000000000000035111356460210500266540ustar00rootroot00000000000000'\" t .\" Title: probe::socket.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.send \- Message sent on a socket\&. .SH "SYNOPSIS" .sp .nf socket\&.send .fi .SH "VALUES" .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The message sender .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.sendmsg.3stap000066400000000000000000000035551356460210500273730ustar00rootroot00000000000000'\" t .\" Title: probe::socket.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.sendmsg \- Message is currently being sent on a socket\&. .SH "SYNOPSIS" .sp .nf socket\&.sendmsg .fi .SH "VALUES" .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_sendmsg\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.sendmsg.return.3stap000066400000000000000000000037431356460210500307100ustar00rootroot00000000000000'\" t .\" Title: probe::socket.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.sendmsg.return \- Return from socket\&.sendmsg\&. .SH "SYNOPSIS" .sp .nf socket\&.sendmsg\&.return .fi .SH "VALUES" .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .SH "CONTEXT" .PP The message sender\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_sendmsg\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.write_iter.3stap000066400000000000000000000035611356460210500301050ustar00rootroot00000000000000'\" t .\" Title: probe::socket.write_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.write_iter \- Message send via \fBsock_write_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.write_iter .fi .SH "VALUES" .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fItype\fR .RS 4 Socket type value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_write_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.write_iter.return.3stap000066400000000000000000000040151356460210500314160ustar00rootroot00000000000000'\" t .\" Title: probe::socket.write_iter.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.write_iter.return \- Conclusion of message send via \fBsock_write_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.write_iter\&.return .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_write_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.writev.3stap000066400000000000000000000035371356460210500272530ustar00rootroot00000000000000'\" t .\" Title: probe::socket.writev .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.writev \- Message sent via \fBsocket_writev\fR .SH "SYNOPSIS" .sp .nf socket\&.writev .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_writev\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::socket.writev.return.3stap000066400000000000000000000037641356460210500305730ustar00rootroot00000000000000'\" t .\" Title: probe::socket.writev.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2019" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.writev.return \- Conclusion of message sent via \fBsocket_writev\fR .SH "SYNOPSIS" .sp .nf socket\&.writev\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_writev\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::softirq.entry.3stap000066400000000000000000000032561356460210500272710ustar00rootroot00000000000000'\" t .\" Title: probe::softirq.entry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOFTIRQ\&.ENT" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::softirq.entry \- Execution of handler for a pending softirq starting .SH "SYNOPSIS" .sp .nf softirq\&.entry .fi .SH "VALUES" .PP \fIvec_nr\fR .RS 4 softirq vector number .RE .PP \fIvec\fR .RS 4 softirq_action vector .RE .PP \fIaction\fR .RS 4 pointer to softirq handler just about to execute .RE .PP \fIh\fR .RS 4 struct softirq_action* for current pending softirq .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::softirq.exit.3stap000066400000000000000000000032611356460210500270750ustar00rootroot00000000000000'\" t .\" Title: probe::softirq.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOFTIRQ\&.EXI" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::softirq.exit \- Execution of handler for a pending softirq completed .SH "SYNOPSIS" .sp .nf softirq\&.exit .fi .SH "VALUES" .PP \fIvec_nr\fR .RS 4 softirq vector number .RE .PP \fIvec\fR .RS 4 softirq_action vector .RE .PP \fIaction\fR .RS 4 pointer to softirq handler that just finished execution .RE .PP \fIh\fR .RS 4 struct softirq_action* for just executed softirq .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_mod.3stap000066400000000000000000000034031356460210500301140ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_mod .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_add_mod \- Adding kernel instrumentation module to cache .SH "SYNOPSIS" .sp .nf stap\&.cache_add_mod .fi .SH "VALUES" .PP \fIsource_path\fR .RS 4 the path the \&.ko file is coming from (incl filename) .RE .PP \fIdest_path\fR .RS 4 the path the \&.ko file is going to (incl filename) .RE .SH "DESCRIPTION" .PP Fires just before the file is actually moved\&. Note: if moving fails, cache_add_src and cache_add_nss will not fire\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_nss.3stap000066400000000000000000000034651356460210500301500ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_nss .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_add_nss \- Add NSS (Network Security Services) information to cache .SH "SYNOPSIS" .sp .nf stap\&.cache_add_nss .fi .SH "VALUES" .PP \fIdest_path\fR .RS 4 the path the \&.sgn file is coming from (incl filename) .RE .PP \fIsource_path\fR .RS 4 the path the \&.sgn file is coming from (incl filename) .RE .SH "DESCRIPTION" .PP Fires just before the file is actually moved\&. Note: stap must compiled with NSS support; if moving the kernel module fails, this probe will not fire\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_src.3stap000066400000000000000000000033631356460210500301310ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_src .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_add_src \- Adding C code translation to cache .SH "SYNOPSIS" .sp .nf stap\&.cache_add_src .fi .SH "VALUES" .PP \fIdest_path\fR .RS 4 the path the \&.c file is going to (incl filename) .RE .PP \fIsource_path\fR .RS 4 the path the \&.c file is coming from (incl filename) .RE .SH "DESCRIPTION" .PP Fires just before the file is actually moved\&. Note: if moving the kernel module fails, this probe will not fire\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_clean.3stap000066400000000000000000000031221356460210500276050ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_clean .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_clean \- Removing file from stap cache .SH "SYNOPSIS" .sp .nf stap\&.cache_clean .fi .SH "VALUES" .PP \fIpath\fR .RS 4 the path to the \&.ko/\&.c file being removed .RE .SH "DESCRIPTION" .PP Fires just before the call to unlink the module/source file\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_get.3stap000066400000000000000000000032401356460210500273030ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_get .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_get \- Found item in stap cache .SH "SYNOPSIS" .sp .nf stap\&.cache_get .fi .SH "VALUES" .PP \fImodule_path\fR .RS 4 the path of the \&.ko kernel module file .RE .PP \fIsource_path\fR .RS 4 the path of the \&.c source file .RE .SH "DESCRIPTION" .PP Fires just before the return of get_from_cache, when the cache grab is successful\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass0.3stap000066400000000000000000000031121356460210500264250ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass0 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS0" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass0 \- Starting stap pass0 (parsing command line arguments) .SH "SYNOPSIS" .sp .nf stap\&.pass0 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass0 fires after command line arguments have been parsed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass0.end.3stap000066400000000000000000000031431356460210500271760ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass0.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS0\" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass0.end \- Finished stap pass0 (parsing command line arguments) .SH "SYNOPSIS" .sp .nf stap\&.pass0\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass0\&.end fires just before the \fBgettimeofday\fR call for pass1\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1.end.3stap000066400000000000000000000031271356460210500272010ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1\" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass1.end \- Finished stap pass1 (parsing scripts) .SH "SYNOPSIS" .sp .nf stap\&.pass1\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass1\&.end fires just before the jump to cleanup if s\&.last_pass = 1\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1a.3stap000066400000000000000000000031421356460210500265720ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1a .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1A" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass1a \- Starting stap pass1 (parsing user script) .SH "SYNOPSIS" .sp .nf stap\&.pass1a .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass1a fires just after the call to \fBgettimeofday\fR, before the user script is parsed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1b.3stap000066400000000000000000000031051356460210500265720ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1b .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1B" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass1b \- Starting stap pass1 (parsing library scripts) .SH "SYNOPSIS" .sp .nf stap\&.pass1b .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass1b fires just before the library scripts are parsed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass2.3stap000066400000000000000000000031321356460210500264310ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass2 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS2" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass2 \- Starting stap pass2 (elaboration) .SH "SYNOPSIS" .sp .nf stap\&.pass2 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass2 fires just after the call to \fBgettimeofday\fR, just before the call to semantic_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass2.end.3stap000066400000000000000000000031201356460210500271730ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass2.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS2\" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass2.end \- Finished stap pass2 (elaboration) .SH "SYNOPSIS" .sp .nf stap\&.pass2\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass2\&.end fires just before the jump to cleanup if s\&.last_pass = 2 .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass3.3stap000066400000000000000000000031401356460210500264310ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass3 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS3" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass3 \- Starting stap pass3 (translation to C) .SH "SYNOPSIS" .sp .nf stap\&.pass3 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass3 fires just after the call to \fBgettimeofday\fR, just before the call to translate_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass3.end.3stap000066400000000000000000000031251356460210500272010ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass3.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS3\" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass3.end \- Finished stap pass3 (translation to C) .SH "SYNOPSIS" .sp .nf stap\&.pass3\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass3\&.end fires just before the jump to cleanup if s\&.last_pass = 3 .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass4.3stap000066400000000000000000000031571356460210500264420ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass4 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS4" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass4 \- Starting stap pass4 (compile C code into kernel module) .SH "SYNOPSIS" .sp .nf stap\&.pass4 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass4 fires just after the call to \fBgettimeofday\fR, just before the call to compile_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass4.end.3stap000066400000000000000000000031461356460210500272050ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass4.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS4\" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass4.end \- Finished stap pass4 (compile C code into kernel module) .SH "SYNOPSIS" .sp .nf stap\&.pass4\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass4\&.end fires just before the jump to cleanup if s\&.last_pass = 4 .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass5.3stap000066400000000000000000000031451356460210500264400ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass5 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS5" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass5 \- Starting stap pass5 (running the instrumentation) .SH "SYNOPSIS" .sp .nf stap\&.pass5 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass5 fires just after the call to \fBgettimeofday\fR, just before the call to run_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass5.end.3stap000066400000000000000000000031111356460210500271760ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass5.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS5\" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass5.end \- Finished stap pass5 (running the instrumentation) .SH "SYNOPSIS" .sp .nf stap\&.pass5\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass5\&.end fires just before the cleanup label .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass6.3stap000066400000000000000000000031111356460210500264320ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass6 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS6" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass6 \- Starting stap pass6 (cleanup) .SH "SYNOPSIS" .sp .nf stap\&.pass6 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass6 fires just after the cleanup label, essentially the same spot as pass5\&.end .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass6.end.3stap000066400000000000000000000030701356460210500272030ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass6.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS6\" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass6.end \- Finished stap pass6 (cleanup) .SH "SYNOPSIS" .sp .nf stap\&.pass6\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass6\&.end fires just before main\*(Aqs return\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.3stap000066400000000000000000000031071356460210500267270ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.system \- Starting a command from stap .SH "SYNOPSIS" .sp .nf stap\&.system .fi .SH "VALUES" .PP \fIcommand\fR .RS 4 the command string to be run by posix_spawn (as sh \-c ) .RE .SH "DESCRIPTION" .PP Fires at the entry of the stap_system command\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.return.3stap000066400000000000000000000032361356460210500302500ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.system.return \- Finished a command from stap .SH "SYNOPSIS" .sp .nf stap\&.system\&.return .fi .SH "VALUES" .PP \fIret\fR .RS 4 a return code associated with running waitpid on the spawned process; a non\-zero value indicates error .RE .SH "DESCRIPTION" .PP Fires just before the return of the stap_system function, after waitpid\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.spawn.3stap000066400000000000000000000031511356460210500300550ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system.spawn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.system.spawn \- stap spawned new process .SH "SYNOPSIS" .sp .nf stap\&.system\&.spawn .fi .SH "VALUES" .PP \fIret\fR .RS 4 the return value from posix_spawn .RE .PP \fIpid\fR .RS 4 the pid of the spawned process .RE .SH "DESCRIPTION" .PP Fires just after the call to posix_spawn\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::stapio.receive_control_message.3stap000066400000000000000000000034651356460210500326300ustar00rootroot00000000000000'\" t .\" Title: probe::stapio.receive_control_message .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPIO\&.RECE" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stapio.receive_control_message \- Received a control message .SH "SYNOPSIS" .sp .nf stapio\&.receive_control_message .fi .SH "VALUES" .PP \fIdata\fR .RS 4 a ptr to a binary blob of data sent as the control message .RE .PP \fIlen\fR .RS 4 the length (in bytes) of the data blob .RE .PP \fItype\fR .RS 4 type of message being send; defined in runtime/transport/transport_msgs\&.h .RE .SH "DESCRIPTION" .PP Fires just after a message was receieved and before it\*(Aqs processed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::staprun.insert_module.3stap000066400000000000000000000031621356460210500310020ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.insert_module .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.INS" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::staprun.insert_module \- Inserting SystemTap instrumentation module .SH "SYNOPSIS" .sp .nf staprun\&.insert_module .fi .SH "VALUES" .PP \fIpath\fR .RS 4 the full path to the \&.ko kernel module about to be inserted .RE .SH "DESCRIPTION" .PP Fires just before the call to insert the module\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::staprun.remove_module.3stap000066400000000000000000000031641356460210500307750ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.remove_module .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.REM" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::staprun.remove_module \- Removing SystemTap instrumentation module .SH "SYNOPSIS" .sp .nf staprun\&.remove_module .fi .SH "VALUES" .PP \fIname\fR .RS 4 the stap module name to be removed (without the \&.ko extension) .RE .SH "DESCRIPTION" .PP Fires just before the call to remove the module\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::staprun.send_control_message.3stap000066400000000000000000000034331356460210500323270ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.send_control_message .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.SEN" "3stap" "November 2019" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::staprun.send_control_message \- Sending a control message .SH "SYNOPSIS" .sp .nf staprun\&.send_control_message .fi .SH "VALUES" .PP \fItype\fR .RS 4 type of message being send; defined in runtime/transport/transport_msgs\&.h .RE .PP \fIlen\fR .RS 4 the length (in bytes) of the data blob .RE .PP \fIdata\fR .RS 4 a ptr to a binary blob of data sent as the control message .RE .SH "DESCRIPTION" .PP Fires at the beginning of the send_request function\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.bind_new_program.3stap000066400000000000000000000035331356460210500322240ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.bind_new_program .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.bind_new_program \- Bind a new RPC program to an existing client .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.bind_new_program .fi .SH "VALUES" .PP \fIold_vers\fR .RS 4 the version of old RPC program .RE .PP \fIold_prog\fR .RS 4 the number of old RPC program .RE .PP \fIvers\fR .RS 4 the version of new RPC program .RE .PP \fIold_progname\fR .RS 4 the name of old RPC program .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprogname\fR .RS 4 the name of new RPC program .RE .PP \fIprog\fR .RS 4 the number of new RPC program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.call_async.3stap000066400000000000000000000037331356460210500310220ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.call_async .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.call_async \- Make an asynchronous RPC call .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.call_async .fi .SH "VALUES" .PP \fIport\fR .RS 4 the port number .RE .PP \fIxid\fR .RS 4 current transmission id .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIflags\fR .RS 4 flags .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIdead\fR .RS 4 whether this client is abandoned .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIproc\fR .RS 4 the procedure number in this RPC call .RE .PP \fIprocname\fR .RS 4 the procedure name in this RPC call .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.call_sync.3stap000066400000000000000000000037261356460210500306630ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.call_sync .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.call_sync \- Make a synchronous RPC call .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.call_sync .fi .SH "VALUES" .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIflags\fR .RS 4 flags .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIdead\fR .RS 4 whether this client is abandoned .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIproc\fR .RS 4 the procedure number in this RPC call .RE .PP \fIprocname\fR .RS 4 the procedure name in this RPC call .RE .PP \fIxid\fR .RS 4 current transmission id .RE .PP \fIport\fR .RS 4 the port number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.clone_client.3stap000066400000000000000000000034201356460210500313410ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.clone_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.clone_client \- Clone an RPC client structure .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.clone_client .fi .SH "VALUES" .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.create_client.3stap000066400000000000000000000034121356460210500315050ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.create_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.create_client \- Create an RPC client .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.create_client .fi .SH "VALUES" .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.restart_call.3stap000066400000000000000000000034121356460210500313630ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.restart_call .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.restart_call \- Restart an asynchronous RPC call .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.restart_call .fi .SH "VALUES" .PP \fItk_runstate\fR .RS 4 the task run status .RE .PP \fItk_flags\fR .RS 4 the task flags .RE .PP \fIxid\fR .RS 4 the transmission id .RE .PP \fItk_priority\fR .RS 4 the task priority .RE .PP \fItk_pid\fR .RS 4 the debugging aid of task .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIservername\fR .RS 4 the server machine name .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.shutdown_client.3stap000066400000000000000000000045421356460210500321220ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.shutdown_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.shutdown_client \- Shutdown an RPC client .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.shutdown_client .fi .SH "VALUES" .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIom_execute\fR .RS 4 the RPC execution jiffies .RE .PP \fIom_ops\fR .RS 4 the count of operations .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIom_queue\fR .RS 4 the jiffies queued for xmit .RE .PP \fIom_bytes_sent\fR .RS 4 the count of bytes out .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fItasks\fR .RS 4 the number of references .RE .PP \fIom_bytes_recv\fR .RS 4 the count of bytes in .RE .PP \fInetreconn\fR .RS 4 the count of reconnections .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIrpccnt\fR .RS 4 the count of RPC calls .RE .PP \fIom_rtt\fR .RS 4 the RPC RTT jiffies .RE .PP \fIom_ntrans\fR .RS 4 the count of RPC transmissions .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIclones\fR .RS 4 the number of clones .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.delay.3stap000066400000000000000000000034231356460210500301320ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.delay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.delay \- Delay an RPC task .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.delay .fi .SH "VALUES" .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fItk_pid\fR .RS 4 the debugging id of the task .RE .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fItk_flags\fR .RS 4 the flags of the task .RE .PP \fIdelay\fR .RS 4 the time delayed .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.execute.3stap000066400000000000000000000033741356460210500305030ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.execute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.execute \- Execute the RPC `scheduler\*(Aq .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.execute .fi .SH "VALUES" .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fItk_pid\fR .RS 4 the debugging id of the task .RE .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fItk_flags\fR .RS 4 the flags of the task .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.new_task.3stap000066400000000000000000000033201356460210500306430ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.new_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.new_task \- Create new task for the specified client .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.new_task .fi .SH "VALUES" .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fItk_flags\fR .RS 4 the flags of the task .RE .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.release_task.3stap000066400000000000000000000036151356460210500315010ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.release_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.release_task \- Release all resources associated with a task .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.release_task .fi .SH "VALUES" .PP \fItk_flags\fR .RS 4 the flags of the task .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .SH "DESCRIPTION" .PP \fBrpc_release_task\fR function might not be found for a particular kernel\&. So, if we can\*(Aqt find it, just return \*(Aq\-1\*(Aq for everything\&. .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.authorise.3stap000066400000000000000000000000501356460210500305350ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.create.3stap000066400000000000000000000031421356460210500300020ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.create \- Create an RPC service .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.create .fi .SH "VALUES" .PP \fIpg_nvers\fR .RS 4 the number of supported versions .RE .PP \fIbufsize\fR .RS 4 the buffer size .RE .PP \fIprog\fR .RS 4 the number of the program .RE .PP \fIprogname\fR .RS 4 the name of the program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.destroy.3stap000066400000000000000000000037231356460210500302350ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.destroy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.destroy \- Destroy an RPC service .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.destroy .fi .SH "VALUES" .PP \fIrpcbadfmt\fR .RS 4 the count of requests dropped for bad formats .RE .PP \fInettcpconn\fR .RS 4 the count of accepted TCP connections .RE .PP \fIrpccnt\fR .RS 4 the count of valid RPC requests .RE .PP \fIsv_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIsv_prog\fR .RS 4 the number of the program .RE .PP \fIrpcbadauth\fR .RS 4 the count of requests drooped for authentication failure .RE .PP \fIsv_progname\fR .RS 4 the name of the program .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fInetcnt\fR .RS 4 the count of received RPC requests .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.drop.3stap000066400000000000000000000034571356460210500275140ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.drop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.drop \- Drop RPC request .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.drop .fi .SH "VALUES" .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIrq_proc\fR .RS 4 the procedure number in the request .RE .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .RE .PP \fIrq_vers\fR .RS 4 the program version in the request .RE .PP \fIrq_prog\fR .RS 4 the program number in the request .RE .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIrq_xid\fR .RS 4 the transmission id in the request .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.process.3stap000066400000000000000000000036661356460210500302300ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.process .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.process \- Process an RPC request .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.process .fi .SH "VALUES" .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIrq_proc\fR .RS 4 the procedure number in the request .RE .PP \fIsv_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIsv_prog\fR .RS 4 the number of the program .RE .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .RE .PP \fIrq_prog\fR .RS 4 the program number in the request .RE .PP \fIrq_vers\fR .RS 4 the program version in the request .RE .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIrq_xid\fR .RS 4 the transmission id in the request .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.recv.3stap000066400000000000000000000032031356460210500274740ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.recv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.recv \- Listen for the next RPC request on any socket .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.recv .fi .SH "VALUES" .PP \fItimeout\fR .RS 4 the timeout of waiting for data .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIsv_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIsv_prog\fR .RS 4 the number of the program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.register.3stap000066400000000000000000000033751356460210500303730ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.register \- Register an RPC service with the local portmapper .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.register .fi .SH "VALUES" .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIprogname\fR .RS 4 the name of the program .RE .PP \fIprog\fR .RS 4 the number of the program .RE .SH "DESCRIPTION" .PP If \fIproto\fR and \fIport\fR are both 0, then unregister a service\&. .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.send.3stap000066400000000000000000000034711356460210500274750ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.send \- Return reply to RPC client .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.send .fi .SH "VALUES" .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .RE .PP \fIrq_proc\fR .RS 4 the procedure number in the request .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIrq_xid\fR .RS 4 the transmission id in the request .RE .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIrq_vers\fR .RS 4 the program version in the request .RE .PP \fIrq_prog\fR .RS 4 the program number in the request .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::syscall_any.3stap000066400000000000000000000036721356460210500267650ustar00rootroot00000000000000'\" t .\" Title: probe::syscall_any .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Syscall Any Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SYSCALL_ANY" "3stap" "November 2019" "SystemTap Tapset Reference" "Syscall Any Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::syscall_any \- Record entry into a syscall .SH "SYNOPSIS" .sp .nf syscall_any .fi .SH "VALUES" .PP \fIsyscall_nr\fR .RS 4 number of the syscall .RE .PP \fIname\fR .RS 4 name of the syscall .RE .SH "CONTEXT" .PP The process performing the syscall .SH "DESCRIPTION" .PP The syscall_any probe point is designed to be a low overhead that monitors all the syscalls entered via a kernel tracepoint\&. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments or argstr string representation of those arguments\&. .PP This requires kernel 3\&.5+ and newer which have the kernel\&.trace(\(lqsys_enter\(rq) probe point\&. .SH SEE ALSO\n .IR tapset::syscall_any (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::syscall_any.return.3stap000066400000000000000000000041101356460210500302670ustar00rootroot00000000000000'\" t .\" Title: probe::syscall_any.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Syscall Any Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SYSCALL_ANY\&" "3stap" "November 2019" "SystemTap Tapset Reference" "Syscall Any Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::syscall_any.return \- Record exit from a syscall .SH "SYNOPSIS" .sp .nf syscall_any\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the syscall .RE .PP \fIsyscall_nr\fR .RS 4 number of the syscall .RE .PP \fIretval\fR .RS 4 return value of the syscall .RE .SH "CONTEXT" .PP The process performing the syscall .SH "DESCRIPTION" .PP The syscall_any\&.return probe point is designed to be a low overhead that monitors all the syscalls returns via a kernel tracepoint\&. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments, argstr string representation of those arguments, or a string interpretation of the return value (retval)\&. .PP This requires kernel 3\&.5+ and newer which have the kernel\&.trace(\(lqsys_exit\(rq) probe point\&. .SH SEE ALSO\n .IR tapset::syscall_any (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.disconnect.3stap000066400000000000000000000035371356460210500273620ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.disconnect .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.DISCONN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.disconnect \- TCP socket disconnection .SH "SYNOPSIS" .sp .nf tcp\&.disconnect .fi .SH "VALUES" .PP \fIflags\fR .RS 4 TCP flags (e\&.g\&. FIN, etc) .RE .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .SH "CONTEXT" .PP The process which disconnects tcp .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.disconnect.return.3stap000066400000000000000000000030711356460210500306710ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.disconnect.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.DISCONN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.disconnect.return \- TCP socket disconnection complete .SH "SYNOPSIS" .sp .nf tcp\&.disconnect\&.return .fi .SH "VALUES" .PP \fIret\fR .RS 4 Error code (0: no error) .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The process which disconnects tcp .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.receive.3stap000066400000000000000000000040261356460210500266450ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECEIVE" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.receive \- Called when a TCP packet is received .SH "SYNOPSIS" .sp .nf tcp\&.receive .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Packet protocol from driver .RE .PP \fIpsh\fR .RS 4 TCP PSH flag .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIsyn\fR .RS 4 TCP SYN flag .RE .PP \fIiphdr\fR .RS 4 IP header address .RE .PP \fIfin\fR .RS 4 TCP FIN flag .RE .PP \fIack\fR .RS 4 TCP ACK flag .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIurg\fR .RS 4 TCP URG flag .RE .PP \fIrst\fR .RS 4 TCP RST flag .RE .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.recvmsg.3stap000066400000000000000000000035321356460210500266720ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECVMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.recvmsg \- Receiving TCP message .SH "SYNOPSIS" .sp .nf tcp\&.recvmsg .fi .SH "VALUES" .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsize\fR .RS 4 Number of bytes to be received .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsock\fR .RS 4 Network socket .RE .SH "CONTEXT" .PP The process which receives a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.recvmsg.return.3stap000066400000000000000000000035621356460210500302130ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECVMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.recvmsg.return \- Receiving TCP message complete .SH "SYNOPSIS" .sp .nf tcp\&.recvmsg\&.return .fi .SH "VALUES" .PP \fIdport\fR .RS 4 TCP destination port .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsize\fR .RS 4 Number of bytes received or error code if an error occurred\&. .RE .SH "CONTEXT" .PP The process which receives a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.sendmsg.3stap000066400000000000000000000031461356460210500266650ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SENDMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.sendmsg \- Sending a tcp message .SH "SYNOPSIS" .sp .nf tcp\&.sendmsg .fi .SH "VALUES" .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsize\fR .RS 4 Number of bytes to send .RE .PP \fIsock\fR .RS 4 Network socket .RE .SH "CONTEXT" .PP The process which sends a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.sendmsg.return.3stap000066400000000000000000000031211356460210500301740ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SENDMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.sendmsg.return \- Sending TCP message is done .SH "SYNOPSIS" .sp .nf tcp\&.sendmsg\&.return .fi .SH "VALUES" .PP \fIsize\fR .RS 4 Number of bytes sent or error code if an error occurred\&. .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The process which sends a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.setsockopt.3stap000066400000000000000000000035671356460210500274320ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.setsockopt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SETSOCK" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.setsockopt \- Call to \fBsetsockopt\fR .SH "SYNOPSIS" .sp .nf tcp\&.setsockopt .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIoptstr\fR .RS 4 Resolves optname to a human\-readable format .RE .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIoptlen\fR .RS 4 Used to access values for \fBsetsockopt\fR .RE .PP \fIoptname\fR .RS 4 TCP socket options (e\&.g\&. TCP_NODELAY, TCP_MAXSEG, etc) .RE .PP \fIlevel\fR .RS 4 The level at which the socket options will be manipulated .RE .SH "CONTEXT" .PP The process which calls setsockopt .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcp.setsockopt.return.3stap000066400000000000000000000030651356460210500307410ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.setsockopt.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SETSOCK" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.setsockopt.return \- Return from \fBsetsockopt\fR .SH "SYNOPSIS" .sp .nf tcp\&.setsockopt\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIret\fR .RS 4 Error code (0: no error) .RE .SH "CONTEXT" .PP The process which calls setsockopt .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.ActiveOpens.3stap000066400000000000000000000034551356460210500301400ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.ActiveOpens .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ACTI" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.ActiveOpens \- Count an active opening of a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.ActiveOpens .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIActiveOpens\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ACTIVEOPENS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.AttemptFails.3stap000066400000000000000000000034661356460210500303170ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.AttemptFails .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ATTE" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.AttemptFails \- Count a failed attempt to open a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.AttemptFails .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIAttemptFails\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ATTEMPTFAILS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.CurrEstab.3stap000066400000000000000000000034401356460210500276040ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.CurrEstab .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.CURR" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.CurrEstab \- Update the count of open sockets .SH "SYNOPSIS" .sp .nf tcpmib\&.CurrEstab .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fICurrEstab\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_CURRESTAB) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.EstabResets.3stap000066400000000000000000000034451356460210500301430ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.EstabResets .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ESTA" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.EstabResets \- Count the reset of a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.EstabResets .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIEstabResets\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ESTABRESETS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.InSegs.3stap000066400000000000000000000034651356460210500271110ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.InSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.INSE" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.InSegs \- Count an incoming tcp segment .SH "SYNOPSIS" .sp .nf tcpmib\&.InSegs .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR (or \fBipmib_filter_key\fR for tcp v4)\&. If the packet passes the filter is is counted in the global \fIInSegs\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_INSEGS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.OutRsts.3stap000066400000000000000000000034311356460210500273350ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.OutRsts .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.OUTR" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.OutRsts \- Count the sending of a reset packet .SH "SYNOPSIS" .sp .nf tcpmib\&.OutRsts .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIOutRsts\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_OUTRSTS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.OutSegs.3stap000066400000000000000000000034301356460210500273020ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.OutSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.OUTS" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.OutSegs \- Count the sending of a TCP segment .SH "SYNOPSIS" .sp .nf tcpmib\&.OutSegs .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIOutSegs\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_OUTSEGS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.PassiveOpens.3stap000066400000000000000000000034651356460210500303400ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.PassiveOpens .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.PASS" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.PassiveOpens \- Count the passive creation of a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.PassiveOpens .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIPassiveOpens\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_PASSIVEOPENS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.RetransSegs.3stap000066400000000000000000000034631356460210500301570ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.RetransSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.RETR" "3stap" "November 2019" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.RetransSegs \- Count the retransmission of a TCP segment .SH "SYNOPSIS" .sp .nf tcpmib\&.RetransSegs .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIRetransSegs\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_RETRANSSEGS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.init.3stap000066400000000000000000000030021356460210500262110ustar00rootroot00000000000000'\" t .\" Title: probe::tty.init .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.INIT" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.init \- Called when a tty is being initalized .SH "SYNOPSIS" .sp .nf tty\&.init .fi .SH "VALUES" .PP \fImodule\fR .RS 4 the module name .RE .PP \fIname\fR .RS 4 the driver \&.dev_name name .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.ioctl.3stap000066400000000000000000000027661356460210500264000ustar00rootroot00000000000000'\" t .\" Title: probe::tty.ioctl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.IOCTL" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.ioctl \- called when a ioctl is request to the tty .SH "SYNOPSIS" .sp .nf tty\&.ioctl .fi .SH "VALUES" .PP \fIcmd\fR .RS 4 the ioctl command .RE .PP \fIarg\fR .RS 4 the ioctl argument .RE .PP \fIname\fR .RS 4 the file name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.open.3stap000066400000000000000000000032001356460210500262070ustar00rootroot00000000000000'\" t .\" Title: probe::tty.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.OPEN" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.open \- Called when a tty is opened .SH "SYNOPSIS" .sp .nf tty\&.open .fi .SH "VALUES" .PP \fIinode_number\fR .RS 4 the inode number .RE .PP \fIfile_mode\fR .RS 4 the file mode .RE .PP \fIinode_flags\fR .RS 4 the inode flags .RE .PP \fIfile_flags\fR .RS 4 the file flags .RE .PP \fIfile_name\fR .RS 4 the file name .RE .PP \fIinode_state\fR .RS 4 the inode state .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.poll.3stap000066400000000000000000000027251356460210500262270ustar00rootroot00000000000000'\" t .\" Title: probe::tty.poll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.POLL" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.poll \- Called when a tty device is being polled .SH "SYNOPSIS" .sp .nf tty\&.poll .fi .SH "VALUES" .PP \fIwait_key\fR .RS 4 the wait queue key .RE .PP \fIfile_name\fR .RS 4 the tty file name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.read.3stap000066400000000000000000000031411356460210500261650ustar00rootroot00000000000000'\" t .\" Title: probe::tty.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.READ" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.read \- called when a tty line will be read .SH "SYNOPSIS" .sp .nf tty\&.read .fi .SH "VALUES" .PP \fInr\fR .RS 4 The amount of characters to be read .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .PP \fIfile_name\fR .RS 4 the file name lreated to the tty .RE .PP \fIbuffer\fR .RS 4 the buffer that will receive the characters .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.receive.3stap000066400000000000000000000033031356460210500266740ustar00rootroot00000000000000'\" t .\" Title: probe::tty.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RECEIVE" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.receive \- called when a tty receives a message .SH "SYNOPSIS" .sp .nf tty\&.receive .fi .SH "VALUES" .PP \fIcp\fR .RS 4 the buffer that was received .RE .PP \fIcount\fR .RS 4 The amount of characters received .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .PP \fIfp\fR .RS 4 The flag buffer .RE .PP \fIname\fR .RS 4 the name of the module file .RE .PP \fIid\fR .RS 4 the tty id .RE .PP \fIindex\fR .RS 4 The tty Index .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.register.3stap000066400000000000000000000031031356460210500270740ustar00rootroot00000000000000'\" t .\" Title: probe::tty.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.REGISTE" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.register \- Called when a tty device is registred .SH "SYNOPSIS" .sp .nf tty\&.register .fi .SH "VALUES" .PP \fImodule\fR .RS 4 the module name .RE .PP \fIindex\fR .RS 4 the tty index requested .RE .PP \fIname\fR .RS 4 the driver \&.dev_name name .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.release.3stap000066400000000000000000000032161356460210500266750ustar00rootroot00000000000000'\" t .\" Title: probe::tty.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RELEASE" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.release \- Called when the tty is closed .SH "SYNOPSIS" .sp .nf tty\&.release .fi .SH "VALUES" .PP \fIinode_flags\fR .RS 4 the inode flags .RE .PP \fIfile_mode\fR .RS 4 the file mode .RE .PP \fIinode_number\fR .RS 4 the inode number .RE .PP \fIfile_flags\fR .RS 4 the file flags .RE .PP \fIinode_state\fR .RS 4 the inode state .RE .PP \fIfile_name\fR .RS 4 the file name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.resize.3stap000066400000000000000000000034341356460210500265600ustar00rootroot00000000000000'\" t .\" Title: probe::tty.resize .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RESIZE" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.resize \- Called when a terminal resize happens .SH "SYNOPSIS" .sp .nf tty\&.resize .fi .SH "VALUES" .PP \fIold_row\fR .RS 4 the old row value .RE .PP \fIold_ypixel\fR .RS 4 the old ypixel .RE .PP \fIname\fR .RS 4 the tty name .RE .PP \fInew_xpixel\fR .RS 4 the new xpixel value .RE .PP \fIold_xpixel\fR .RS 4 the old xpixel .RE .PP \fInew_row\fR .RS 4 the new row value .RE .PP \fInew_ypixel\fR .RS 4 the new ypixel value .RE .PP \fIold_col\fR .RS 4 the old col value .RE .PP \fInew_col\fR .RS 4 the new col value .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.unregister.3stap000066400000000000000000000031221356460210500274400ustar00rootroot00000000000000'\" t .\" Title: probe::tty.unregister .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.UNREGIS" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.unregister \- Called when a tty device is being unregistered .SH "SYNOPSIS" .sp .nf tty\&.unregister .fi .SH "VALUES" .PP \fIname\fR .RS 4 the driver \&.dev_name name .RE .PP \fIindex\fR .RS 4 the tty index requested .RE .PP \fImodule\fR .RS 4 the module name .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::tty.write.3stap000066400000000000000000000031001356460210500263770ustar00rootroot00000000000000'\" t .\" Title: probe::tty.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.WRITE" "3stap" "November 2019" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.write \- write to the tty line .SH "SYNOPSIS" .sp .nf tty\&.write .fi .SH "VALUES" .PP \fIbuffer\fR .RS 4 the buffer that will be written .RE .PP \fIfile_name\fR .RS 4 the file name lreated to the tty .RE .PP \fInr\fR .RS 4 The amount of characters .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::udp.disconnect.3stap000066400000000000000000000036351356460210500273630ustar00rootroot00000000000000'\" t .\" Title: probe::udp.disconnect .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.DISCONN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.disconnect \- Fires when a process requests for a UDP disconnection .SH "SYNOPSIS" .sp .nf udp\&.disconnect .fi .SH "VALUES" .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIflags\fR .RS 4 Flags (e\&.g\&. FIN, etc) .RE .SH "CONTEXT" .PP The process which requests a UDP disconnection .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::udp.disconnect.return.3stap000066400000000000000000000035471356460210500307030ustar00rootroot00000000000000'\" t .\" Title: probe::udp.disconnect.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.DISCONN" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.disconnect.return \- UDP has been disconnected successfully .SH "SYNOPSIS" .sp .nf udp\&.disconnect\&.return .fi .SH "VALUES" .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIret\fR .RS 4 Error code (0: no error) .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIfamily\fR .RS 4 IP address family .RE .SH "CONTEXT" .PP The process which requested a UDP disconnection .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::udp.recvmsg.3stap000066400000000000000000000036161356460210500266770ustar00rootroot00000000000000'\" t .\" Title: probe::udp.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.RECVMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.recvmsg \- Fires whenever a UDP message is received .SH "SYNOPSIS" .sp .nf udp\&.recvmsg .fi .SH "VALUES" .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsize\fR .RS 4 Number of bytes received by the process .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .SH "CONTEXT" .PP The process which received a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::udp.recvmsg.return.3stap000066400000000000000000000036111356460210500302100ustar00rootroot00000000000000'\" t .\" Title: probe::udp.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.RECVMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.recvmsg.return \- Fires whenever an attempt to receive a UDP message received is completed .SH "SYNOPSIS" .sp .nf udp\&.recvmsg\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsize\fR .RS 4 Number of bytes received by the process .RE .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .SH "CONTEXT" .PP The process which received a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::udp.sendmsg.3stap000066400000000000000000000036121356460210500266650ustar00rootroot00000000000000'\" t .\" Title: probe::udp.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.SENDMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.sendmsg \- Fires whenever a process sends a UDP message .SH "SYNOPSIS" .sp .nf udp\&.sendmsg .fi .SH "VALUES" .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsize\fR .RS 4 Number of bytes sent by the process .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .SH "CONTEXT" .PP The process which sent a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::udp.sendmsg.return.3stap000066400000000000000000000031361356460210500302040ustar00rootroot00000000000000'\" t .\" Title: probe::udp.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.SENDMSG" "3stap" "November 2019" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.sendmsg.return \- Fires whenever an attempt to send a UDP message is completed .SH "SYNOPSIS" .sp .nf udp\&.sendmsg\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIsize\fR .RS 4 Number of bytes sent by the process .RE .SH "CONTEXT" .PP The process which sent a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.brk.3stap000066400000000000000000000031331356460210500256330ustar00rootroot00000000000000'\" t .\" Title: probe::vm.brk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.BRK" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.brk \- Fires when a brk is requested (i\&.e\&. the heap will be resized) .SH "SYNOPSIS" .sp .nf vm\&.brk .fi .SH "VALUES" .PP \fIlength\fR .RS 4 the length of the memory segment .RE .PP \fIaddress\fR .RS 4 the requested address .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process calling brk\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.kfree.3stap000066400000000000000000000032211356460210500261470ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kfree .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KFREE" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kfree \- Fires when kfree is requested .SH "SYNOPSIS" .sp .nf vm\&.kfree .fi .SH "VALUES" .PP \fIptr\fR .RS 4 pointer to the kmemory allocated which is returned by kmalloc .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIcaller_function\fR .RS 4 name of the caller function\&. .RE .PP \fIcall_site\fR .RS 4 address of the function calling this kmemory function .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmalloc.3stap000066400000000000000000000035161356460210500265040ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmalloc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMALLOC" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmalloc \- Fires when kmalloc is requested .SH "SYNOPSIS" .sp .nf vm\&.kmalloc .fi .SH "VALUES" .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIcall_site\fR .RS 4 address of the kmemory function .RE .PP \fIcaller_function\fR .RS 4 name of the caller function .RE .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate (in String format) .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmalloc_node.3stap000066400000000000000000000035671356460210500275170ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmalloc_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMALLOC_" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmalloc_node \- Fires when kmalloc_node is requested .SH "SYNOPSIS" .sp .nf vm\&.kmalloc_node .fi .SH "VALUES" .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIcall_site\fR .RS 4 address of the function caling this kmemory function .RE .PP \fIcaller_function\fR .RS 4 name of the caller function .RE .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_alloc.3stap000066400000000000000000000036161356460210500303110ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_alloc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmem_cache_alloc \- Fires when kmem_cache_alloc is requested .SH "SYNOPSIS" .sp .nf vm\&.kmem_cache_alloc .fi .SH "VALUES" .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIcall_site\fR .RS 4 address of the function calling this kmemory function\&. .RE .PP \fIcaller_function\fR .RS 4 name of the caller function\&. .RE .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_alloc_node.3stap000066400000000000000000000036341356460210500313160ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_alloc_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmem_cache_alloc_node \- Fires when kmem_cache_alloc_node is requested .SH "SYNOPSIS" .sp .nf vm\&.kmem_cache_alloc_node .fi .SH "VALUES" .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIcall_site\fR .RS 4 address of the function calling this kmemory function .RE .PP \fIcaller_function\fR .RS 4 name of the caller function .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_free.3stap000066400000000000000000000032771356460210500301430ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_free .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmem_cache_free \- Fires when kmem_cache_free is requested .SH "SYNOPSIS" .sp .nf vm\&.kmem_cache_free .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIptr\fR .RS 4 Pointer to the kmemory allocated which is returned by kmem_cache .RE .PP \fIcall_site\fR .RS 4 Address of the function calling this kmemory function .RE .PP \fIcaller_function\fR .RS 4 Name of the caller function\&. .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.mmap.3stap000066400000000000000000000030761356460210500260150ustar00rootroot00000000000000'\" t .\" Title: probe::vm.mmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.MMAP" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.mmap \- Fires when an mmap is requested .SH "SYNOPSIS" .sp .nf vm\&.mmap .fi .SH "VALUES" .PP \fIlength\fR .RS 4 the length of the memory segment .RE .PP \fIaddress\fR .RS 4 the requested address .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process calling mmap\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.munmap.3stap000066400000000000000000000031121356460210500263470ustar00rootroot00000000000000'\" t .\" Title: probe::vm.munmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.MUNMAP" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.munmap \- Fires when an munmap is requested .SH "SYNOPSIS" .sp .nf vm\&.munmap .fi .SH "VALUES" .PP \fIaddress\fR .RS 4 the requested address .RE .PP \fIlength\fR .RS 4 the length of the memory segment .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process calling munmap\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.oom_kill.3stap000066400000000000000000000031471356460210500266670ustar00rootroot00000000000000'\" t .\" Title: probe::vm.oom_kill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.OOM_KILL" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.oom_kill \- Fires when a thread is selected for termination by the OOM killer .SH "SYNOPSIS" .sp .nf vm\&.oom_kill .fi .SH "VALUES" .PP \fItask\fR .RS 4 the task being killed .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process that tried to consume excessive memory, and thus triggered the OOM\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.pagefault.3stap000066400000000000000000000033511356460210500270270ustar00rootroot00000000000000'\" t .\" Title: probe::vm.pagefault .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.PAGEFAUL" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.pagefault \- Records that a page fault occurred .SH "SYNOPSIS" .sp .nf vm\&.pagefault .fi .SH "VALUES" .PP \fIwrite_access\fR .RS 4 indicates whether this was a write or read access; 1 indicates a write, while 0 indicates a read .RE .PP \fIaddress\fR .RS 4 the address of the faulting memory access; i\&.e\&. the address that caused the page fault .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process which triggered the fault .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.pagefault.return.3stap000066400000000000000000000033121356460210500303420ustar00rootroot00000000000000'\" t .\" Title: probe::vm.pagefault.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.PAGEFAUL" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.pagefault.return \- Indicates what type of fault occurred .SH "SYNOPSIS" .sp .nf vm\&.pagefault\&.return .fi .SH "VALUES" .PP \fIfault_type\fR .RS 4 returns either 0 (VM_FAULT_OOM) for out of memory faults, 2 (VM_FAULT_MINOR) for minor faults, 3 (VM_FAULT_MAJOR) for major faults, or 1 (VM_FAULT_SIGBUS) if the fault was neither OOM, minor fault, nor major fault\&. .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.write_shared.3stap000066400000000000000000000033421356460210500275370ustar00rootroot00000000000000'\" t .\" Title: probe::vm.write_shared .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.WRITE_SH" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.write_shared \- Attempts at writing to a shared page .SH "SYNOPSIS" .sp .nf vm\&.write_shared .fi .SH "VALUES" .PP \fIaddress\fR .RS 4 the address of the shared write .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The context is the process attempting the write\&. .SH "DESCRIPTION" .PP Fires when a process attempts to write to a shared page\&. If a copy is necessary, this will be followed by a vm\&.write_shared_copy\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::vm.write_shared_copy.3stap000066400000000000000000000034541356460210500305750ustar00rootroot00000000000000'\" t .\" Title: probe::vm.write_shared_copy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.WRITE_SH" "3stap" "November 2019" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.write_shared_copy \- Page copy for shared page write .SH "SYNOPSIS" .sp .nf vm\&.write_shared_copy .fi .SH "VALUES" .PP \fIaddress\fR .RS 4 The address of the shared write .RE .PP \fIzero\fR .RS 4 boolean indicating whether it is a zero page (can do a clear instead of a copy) .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "CONTEXT" .PP The process attempting the write\&. .SH "DESCRIPTION" .PP Fires when a write to a shared page requires a page copy\&. This is always preceded by a vm\&.write_shared\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.create.3stap000066400000000000000000000030551356460210500277300ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.C" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.create \- Creating a new workqueue .SH "SYNOPSIS" .sp .nf workqueue\&.create .fi .SH "VALUES" .PP \fIcpu\fR .RS 4 cpu for which the worker thread is created .RE .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.destroy.3stap000066400000000000000000000027511356460210500301600ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.destroy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.D" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.destroy \- Destroying workqueue .SH "SYNOPSIS" .sp .nf workqueue\&.destroy .fi .SH "VALUES" .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.execute.3stap000066400000000000000000000031331356460210500301240ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.execute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.E" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.execute \- Executing deferred work .SH "SYNOPSIS" .sp .nf workqueue\&.execute .fi .SH "VALUES" .PP \fIwork_func\fR .RS 4 pointer to handler function .RE .PP \fIwork\fR .RS 4 work_struct* being executed .RE .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.insert.3stap000066400000000000000000000031321356460210500277650ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.insert .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2019 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.I" "3stap" "November 2019" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.insert \- Queuing work on a workqueue .SH "SYNOPSIS" .sp .nf workqueue\&.insert .fi .SH "VALUES" .PP \fIwork\fR .RS 4 work_struct* being queued .RE .PP \fIwork_func\fR .RS 4 pointer to handler function .RE .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/000077500000000000000000000000001356460210500233405ustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ansi.3stap000066400000000000000000000037001356460210500266530ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ANSI 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ansi \- systemtap ansi tapset .SH DESCRIPTION .TP .P .TP .B ansi_clear_screen Move cursor to top left and clear screen. .IP See .IR function::ansi_clear_screen (3stap) for details. .P .TP .B ansi_set_color Set the ansi Select Graphic Rendition mode. .IP See .IR function::ansi_set_color (3stap) for details. .P .TP .B ansi_set_color Set the ansi Select Graphic Rendition mode. .IP See .IR function::ansi_set_color (3stap) for details. .P .TP .B ansi_set_color Set the ansi Select Graphic Rendition mode. .IP See .IR function::ansi_set_color (3stap) for details. .P .TP .B ansi_reset_color Resets Select Graphic Rendition mode. .IP See .IR function::ansi_reset_color (3stap) for details. .P .TP .B ansi_new_line Move cursor to new line. .IP See .IR function::ansi_new_line (3stap) for details. .P .TP .B ansi_cursor_move Move cursor to new coordinates. .IP See .IR function::ansi_cursor_move (3stap) for details. .P .TP .B ansi_cursor_hide Hides the cursor. .IP See .IR function::ansi_cursor_hide (3stap) for details. .P .TP .B ansi_cursor_save Saves the cursor position. .IP See .IR function::ansi_cursor_save (3stap) for details. .P .TP .B ansi_cursor_restore Restores a previously saved cursor position. .IP See .IR function::ansi_cursor_restore (3stap) for details. .P .TP .B ansi_cursor_show Shows the cursor. .IP See .IR function::ansi_cursor_show (3stap) for details. .SH SEE ALSO .BR .IR \%function::ansi_clear_screen (3stap), .BR .IR \%function::ansi_set_color (3stap), .BR .IR \%function::ansi_reset_color (3stap), .BR .IR \%function::ansi_new_line (3stap), .BR .IR \%function::ansi_cursor_move (3stap), .BR .IR \%function::ansi_cursor_hide (3stap), .BR .IR \%function::ansi_cursor_save (3stap), .BR .IR \%function::ansi_cursor_restore (3stap), .BR .IR \%function::ansi_cursor_show (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::atomic.3stap000066400000000000000000000011021356460210500271670ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ATOMIC 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::atomic \- systemtap atomic tapset .SH DESCRIPTION .TP .P .TP .B atomic_read Retrieves an atomic variable from kernel memory .IP See .IR function::atomic_read (3stap) for details. .P .TP .B atomic_long_read Retrieves an atomic long variable from kernel memory .IP See .IR function::atomic_long_read (3stap) for details. .SH SEE ALSO .BR .IR \%function::atomic_read (3stap), .BR .IR \%function::atomic_long_read (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-caller.3stap000066400000000000000000000014141356460210500306450ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-CALLER 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::context-caller \- systemtap context-caller tapset .SH DESCRIPTION Provides caller and caller_addr function for context for kernel and user space. .TP .P .TP .B callers Return first n elements of kernel stack backtrace .IP See .IR function::callers (3stap) for details. .P .TP .B caller Return name and address of calling function .IP See .IR function::caller (3stap) for details. .P .TP .B caller_addr Return caller address .IP See .IR function::caller_addr (3stap) for details. .SH SEE ALSO .BR .IR \%function::callers (3stap), .BR .IR \%function::caller (3stap), .BR .IR \%function::caller_addr (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-envvar.3stap000066400000000000000000000011571356460210500307100ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-ENVVAR 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::context-envvar \- systemtap context-envvar tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B env_var Fetch environment variable from current process .IP See .IR function::env_var (3stap) for details. .SH SEE ALSO .BR .IR \%function::env_var (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-symbols.3stap000066400000000000000000000050111356460210500310700ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-SYMBOLS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::context-symbols \- systemtap context-symbols tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B stack Return address at given depth of kernel stack backtrace .IP See .IR function::stack (3stap) for details. .P .TP .B print_stack Print out kernel stack from string .IP See .IR function::print_stack (3stap) for details. .P .TP .B sprint_stack Return stack for kernel addresses from string .IP See .IR function::sprint_stack (3stap) for details. .P .TP .B probefunc Return the probe point's function name, if known .IP See .IR function::probefunc (3stap) for details. .P .TP .B probemod Return the probe point's kernel module name .IP See .IR function::probemod (3stap) for details. .P .TP .B modname Return the kernel module name loaded at the address .IP See .IR function::modname (3stap) for details. .P .TP .B symname Return the kernel symbol associated with the given address .IP See .IR function::symname (3stap) for details. .P .TP .B symdata Return the kernel symbol and module offset for the address .IP See .IR function::symdata (3stap) for details. .P .TP .B print_syms Print out kernel stack from string .IP See .IR function::print_syms (3stap) for details. .P .TP .B sprint_syms Return stack for kernel addresses from string .IP See .IR function::sprint_syms (3stap) for details. .P .TP .B symfileline Return the file name and line number of an address. .IP See .IR function::symfileline (3stap) for details. .P .TP .B usymfile Return the file name of a given address. .IP See .IR function::usymfile (3stap) for details. .P .TP .B usymline Return the line number of an address. .IP See .IR function::usymline (3stap) for details. .SH SEE ALSO .BR .IR \%function::stack (3stap), .BR .IR \%function::print_stack (3stap), .BR .IR \%function::sprint_stack (3stap), .BR .IR \%function::probefunc (3stap), .BR .IR \%function::probemod (3stap), .BR .IR \%function::modname (3stap), .BR .IR \%function::symname (3stap), .BR .IR \%function::symdata (3stap), .BR .IR \%function::print_syms (3stap), .BR .IR \%function::sprint_syms (3stap), .BR .IR \%function::symfileline (3stap), .BR .IR \%function::usymfile (3stap), .BR .IR \%function::usymline (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-unwind.3stap000066400000000000000000000024351356460210500307130ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-UNWIND 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::context-unwind \- systemtap context-unwind tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B print_backtrace Print kernel stack back trace .IP See .IR function::print_backtrace (3stap) for details. .P .TP .B print_backtrace_fileline Print kernel stack back trace .IP See .IR function::print_backtrace_fileline (3stap) for details. .P .TP .B sprint_backtrace Return stack back trace as string .IP See .IR function::sprint_backtrace (3stap) for details. .P .TP .B backtrace Hex backtrace of current kernel stack .IP See .IR function::backtrace (3stap) for details. .P .TP .B task_backtrace Hex backtrace of an arbitrary task .IP See .IR function::task_backtrace (3stap) for details. .SH SEE ALSO .BR .IR \%function::print_backtrace (3stap), .BR .IR \%function::print_backtrace_fileline (3stap), .BR .IR \%function::sprint_backtrace (3stap), .BR .IR \%function::backtrace (3stap), .BR .IR \%function::task_backtrace (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::context.3stap000066400000000000000000000165171356460210500274170ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::context \- systemtap context tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B print_regs Print a register dump .IP See .IR function::print_regs (3stap) for details. .P .TP .B pp Returns the active probe point .IP See .IR function::pp (3stap) for details. .P .TP .B ppfunc Returns the function name parsed from pp() .IP See .IR function::ppfunc (3stap) for details. .P .TP .B probe_type The low level probe handler type of the current probe. .IP See .IR function::probe_type (3stap) for details. .P .TP .B execname Returns the execname of a target process (or group of processes) .IP See .IR function::execname (3stap) for details. .P .TP .B pexecname Returns the execname of a target process's parent process .IP See .IR function::pexecname (3stap) for details. .P .TP .B pid Returns the ID of a target process .IP See .IR function::pid (3stap) for details. .P .TP .B ns_pid Returns the ID of a target process as seen in a pid namespace .IP See .IR function::ns_pid (3stap) for details. .P .TP .B tid Returns the thread ID of a target process .IP See .IR function::tid (3stap) for details. .P .TP .B ns_tid Returns the thread ID of a target process as seen in a pid namespace .IP See .IR function::ns_tid (3stap) for details. .P .TP .B ppid Returns the process ID of a target process's parent process .IP See .IR function::ppid (3stap) for details. .P .TP .B ns_ppid Returns the process ID of a target process's parent process as seen in a pid namespace .IP See .IR function::ns_ppid (3stap) for details. .P .TP .B pgrp Returns the process group ID of the current process .IP See .IR function::pgrp (3stap) for details. .P .TP .B ns_pgrp Returns the process group ID of the current process as seen in a pid namespace .IP See .IR function::ns_pgrp (3stap) for details. .P .TP .B sid Returns the session ID of the current process .IP See .IR function::sid (3stap) for details. .P .TP .B ns_sid Returns the session ID of the current process as seen in a pid namespace .IP See .IR function::ns_sid (3stap) for details. .P .TP .B gid Returns the group ID of a target process .IP See .IR function::gid (3stap) for details. .P .TP .B ns_gid Returns the group ID of a target process as seen in a user namespace .IP See .IR function::ns_gid (3stap) for details. .P .TP .B egid Returns the effective gid of a target process .IP See .IR function::egid (3stap) for details. .P .TP .B ns_egid Returns the effective gid of a target process as seen in a user namespace .IP See .IR function::ns_egid (3stap) for details. .P .TP .B uid Returns the user ID of a target process .IP See .IR function::uid (3stap) for details. .P .TP .B ns_uid Returns the user ID of a target process as seen in a user namespace .IP See .IR function::ns_uid (3stap) for details. .P .TP .B euid Return the effective uid of a target process .IP See .IR function::euid (3stap) for details. .P .TP .B ns_euid Returns the effective user ID of a target process as seen in a user namespace .IP See .IR function::ns_euid (3stap) for details. .P .TP .B is_myproc Determines if the current probe point has occurred in the user's own process .IP See .IR function::is_myproc (3stap) for details. .P .TP .B cpuid Returns the current cpu number .IP See .IR function::cpuid (3stap) for details. .P .TP .B cpu Returns the current cpu number .IP See .IR function::cpu (3stap) for details. .P .TP .B registers_valid Determines validity of register() and u_register() in current context .IP See .IR function::registers_valid (3stap) for details. .P .TP .B user_mode Determines if probe point occurs in user-mode .IP See .IR function::user_mode (3stap) for details. .P .TP .B is_return Whether the current probe context is a return probe .IP See .IR function::is_return (3stap) for details. .P .TP .B target Return the process ID of the target process .IP See .IR function::target (3stap) for details. .P .TP .B module_name The module name of the current script .IP See .IR function::module_name (3stap) for details. .P .TP .B module_size The module size of the current script .IP See .IR function::module_size (3stap) for details. .P .TP .B stp_pid The process id of the stapio process .IP See .IR function::stp_pid (3stap) for details. .P .TP .B remote_id The index of this instance in a remote execution. .IP See .IR function::remote_id (3stap) for details. .P .TP .B remote_uri The name of this instance in a remote execution. .IP See .IR function::remote_uri (3stap) for details. .P .TP .B stack_size Return the size of the kernel stack .IP See .IR function::stack_size (3stap) for details. .P .TP .B stack_used Returns the amount of kernel stack used .IP See .IR function::stack_used (3stap) for details. .P .TP .B stack_unused Returns the amount of kernel stack currently available .IP See .IR function::stack_unused (3stap) for details. .P .TP .B addr Address of the current probe point. .IP See .IR function::addr (3stap) for details. .P .TP .B uaddr User space address of current running task .IP See .IR function::uaddr (3stap) for details. .P .TP .B cmdline_args Fetch command line arguments from current process .IP See .IR function::cmdline_args (3stap) for details. .P .TP .B cmdline_arg Fetch a command line argument .IP See .IR function::cmdline_arg (3stap) for details. .P .TP .B cmdline_str Fetch all command line arguments from current process .IP See .IR function::cmdline_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::print_regs (3stap), .BR .IR \%function::pp (3stap), .BR .IR \%function::ppfunc (3stap), .BR .IR \%function::probe_type (3stap), .BR .IR \%function::execname (3stap), .BR .IR \%function::pexecname (3stap), .BR .IR \%function::pid (3stap), .BR .IR \%function::ns_pid (3stap), .BR .IR \%function::tid (3stap), .BR .IR \%function::ns_tid (3stap), .BR .IR \%function::ppid (3stap), .BR .IR \%function::ns_ppid (3stap), .BR .IR \%function::pgrp (3stap), .BR .IR \%function::ns_pgrp (3stap), .BR .IR \%function::sid (3stap), .BR .IR \%function::ns_sid (3stap), .BR .IR \%function::gid (3stap), .BR .IR \%function::ns_gid (3stap), .BR .IR \%function::egid (3stap), .BR .IR \%function::ns_egid (3stap), .BR .IR \%function::uid (3stap), .BR .IR \%function::ns_uid (3stap), .BR .IR \%function::euid (3stap), .BR .IR \%function::ns_euid (3stap), .BR .IR \%function::is_myproc (3stap), .BR .IR \%function::cpuid (3stap), .BR .IR \%function::cpu (3stap), .BR .IR \%function::registers_valid (3stap), .BR .IR \%function::user_mode (3stap), .BR .IR \%function::is_return (3stap), .BR .IR \%function::target (3stap), .BR .IR \%function::module_name (3stap), .BR .IR \%function::module_size (3stap), .BR .IR \%function::stp_pid (3stap), .BR .IR \%function::remote_id (3stap), .BR .IR \%function::remote_uri (3stap), .BR .IR \%function::stack_size (3stap), .BR .IR \%function::stack_used (3stap), .BR .IR \%function::stack_unused (3stap), .BR .IR \%function::addr (3stap), .BR .IR \%function::uaddr (3stap), .BR .IR \%function::cmdline_args (3stap), .BR .IR \%function::cmdline_arg (3stap), .BR .IR \%function::cmdline_str (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::conversions-guru.3stap000066400000000000000000000027101356460210500312510ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONVERSIONS-GURU 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::conversions-guru \- systemtap conversions-guru tapset .SH DESCRIPTION .TP .P .TP .B set_kernel_string Writes a string to kernel memory .IP See .IR function::set_kernel_string (3stap) for details. .P .TP .B set_kernel_string_n Writes a string of given length to kernel memory .IP See .IR function::set_kernel_string_n (3stap) for details. .P .TP .B set_kernel_long Writes a long value to kernel memory .IP See .IR function::set_kernel_long (3stap) for details. .P .TP .B set_kernel_int Writes an int value to kernel memory .IP See .IR function::set_kernel_int (3stap) for details. .P .TP .B set_kernel_short Writes a short value to kernel memory .IP See .IR function::set_kernel_short (3stap) for details. .P .TP .B set_kernel_char Writes a char value to kernel memory .IP See .IR function::set_kernel_char (3stap) for details. .P .TP .B set_kernel_pointer Writes a pointer value to kernel memory. .IP See .IR function::set_kernel_pointer (3stap) for details. .SH SEE ALSO .BR .IR \%function::set_kernel_string (3stap), .BR .IR \%function::set_kernel_string_n (3stap), .BR .IR \%function::set_kernel_long (3stap), .BR .IR \%function::set_kernel_int (3stap), .BR .IR \%function::set_kernel_short (3stap), .BR .IR \%function::set_kernel_char (3stap), .BR .IR \%function::set_kernel_pointer (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::conversions.3stap000066400000000000000000000065651356460210500303050ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONVERSIONS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::conversions \- systemtap conversions tapset .SH DESCRIPTION .TP .P .TP .B kernel_string Retrieves string from kernel memory .IP See .IR function::kernel_string (3stap) for details. .P .TP .B kernel_string Retrieves string from kernel memory with alternative error string .IP See .IR function::kernel_string (3stap) for details. .P .TP .B kernel_string_quoted Retrieves and quotes string from kernel memory .IP See .IR function::kernel_string_quoted (3stap) for details. .P .TP .B kernel_string_n Retrieves string of given length from kernel memory .IP See .IR function::kernel_string_n (3stap) for details. .P .TP .B kernel_string_utf32 Retrieves UTF-32 string from kernel memory .IP See .IR function::kernel_string_utf32 (3stap) for details. .P .TP .B kernel_string_utf32 Retrieves UTF-32 string from kernel memory with alternative error string .IP See .IR function::kernel_string_utf32 (3stap) for details. .P .TP .B kernel_string_quoted_utf32 Quote given UTF-32 kernel string. .IP See .IR function::kernel_string_quoted_utf32 (3stap) for details. .P .TP .B kernel_string_utf16 Retrieves UTF-16 string from kernel memory .IP See .IR function::kernel_string_utf16 (3stap) for details. .P .TP .B kernel_string_utf16 Retrieves UTF-16 string from kernel memory with alternative error string .IP See .IR function::kernel_string_utf16 (3stap) for details. .P .TP .B kernel_string_quoted_utf16 Quote given kernel UTF-16 string. .IP See .IR function::kernel_string_quoted_utf16 (3stap) for details. .P .TP .B kernel_long Retrieves a long value stored in kernel memory .IP See .IR function::kernel_long (3stap) for details. .P .TP .B kernel_int Retrieves an int value stored in kernel memory .IP See .IR function::kernel_int (3stap) for details. .P .TP .B kernel_short Retrieves a short value stored in kernel memory .IP See .IR function::kernel_short (3stap) for details. .P .TP .B kernel_char Retrieves a char value stored in kernel memory .IP See .IR function::kernel_char (3stap) for details. .P .TP .B kernel_pointer Retrieves a pointer value stored in kernel memory .IP See .IR function::kernel_pointer (3stap) for details. .P .TP .B kernel_buffer_quoted Retrieves and quotes buffer from kernel space .IP See .IR function::kernel_buffer_quoted (3stap) for details. .P .TP .B kernel_buffer_quoted Retrieves and quotes buffer from kernel space .IP See .IR function::kernel_buffer_quoted (3stap) for details. .P .TP .B kernel_buffer_quoted_error Retrieves and quotes buffer from kernel space .IP See .IR function::kernel_buffer_quoted_error (3stap) for details. .SH SEE ALSO .BR .IR \%function::kernel_string (3stap), .BR .IR \%function::kernel_string_quoted (3stap), .BR .IR \%function::kernel_string_n (3stap), .BR .IR \%function::kernel_string_utf32 (3stap), .BR .IR \%function::kernel_string_quoted_utf32 (3stap), .BR .IR \%function::kernel_string_utf16 (3stap), .BR .IR \%function::kernel_string_quoted_utf16 (3stap), .BR .IR \%function::kernel_long (3stap), .BR .IR \%function::kernel_int (3stap), .BR .IR \%function::kernel_short (3stap), .BR .IR \%function::kernel_char (3stap), .BR .IR \%function::kernel_pointer (3stap), .BR .IR \%function::kernel_buffer_quoted (3stap), .BR .IR \%function::kernel_buffer_quoted_error (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ctime.3stap000066400000000000000000000010061356460210500270170ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CTIME 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ctime \- systemtap ctime tapset .SH DESCRIPTION .TP .P .TP .B ctime Convert seconds since epoch into human readable date/time string .IP See .IR function::ctime (3stap) for details. .P .TP .B ctime Convert seconds since epoch into human readable date/time string .IP See .IR function::ctime (3stap) for details. .SH SEE ALSO .BR .IR \%function::ctime (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::dentry.3stap000066400000000000000000000003341356460210500272260ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::DENTRY 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::dentry \- systemtap dentry tapset .SH DESCRIPTION .TP .SH SEE ALSO .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::dev.3stap000066400000000000000000000016331356460210500265020ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::DEV 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::dev \- systemtap dev tapset .SH DESCRIPTION .TP .P .TP .B MAJOR Extract major device number from a kernel device number (kdev_t) .IP See .IR function::MAJOR (3stap) for details. .P .TP .B MINOR Extract minor device number from a kernel device number (kdev_t) .IP See .IR function::MINOR (3stap) for details. .P .TP .B MKDEF Creates a value that can be compared to a kernel device number (kdev_t) .IP See .IR function::MKDEF (3stap) for details. .P .TP .B usrdev2kerndev Converts a user-space device number into the format used in the kernel .IP See .IR function::usrdev2kerndev (3stap) for details. .SH SEE ALSO .BR .IR \%function::MAJOR (3stap), .BR .IR \%function::MINOR (3stap), .BR .IR \%function::MKDEF (3stap), .BR .IR \%function::usrdev2kerndev (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::errno.3stap000066400000000000000000000015061356460210500270500ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ERRNO 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::errno \- systemtap errno tapset .SH DESCRIPTION .TP .P .TP .B errno_str Symbolic string associated with error code .IP See .IR function::errno_str (3stap) for details. .P .TP .B returnval Possible return value of probed function .IP See .IR function::returnval (3stap) for details. .P .TP .B returnstr Formats the return value as a string .IP See .IR function::returnstr (3stap) for details. .P .TP .B return_str Formats the return value as a string .IP See .IR function::return_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::errno_str (3stap), .BR .IR \%function::returnval (3stap), .BR .IR \%function::returnstr (3stap), .BR .IR \%function::return_str (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::guru-delay.3stap000066400000000000000000000013461356460210500300030ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::GURU-DELAY 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::guru-delay \- systemtap guru-delay tapset .SH DESCRIPTION Functions in the guru-delay tapset allow a probe handler to insert deliberate delays. This is sometimes useful as a fault-injection aid. Due to its likelihood of interference with the kernel, guru mode is required, and overload-prevention is suppressed. .TP .P .TP .B mdelay millisecond delay .IP See .IR function::mdelay (3stap) for details. .P .TP .B udelay microsecond delay .IP See .IR function::udelay (3stap) for details. .SH SEE ALSO .BR .IR \%function::mdelay (3stap), .BR .IR \%function::udelay (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::guru-signal.3stap000066400000000000000000000010671356460210500301620ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::GURU-SIGNAL 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::guru-signal \- systemtap guru-signal tapset .SH DESCRIPTION Functions in the guru-signal tapset allow a probe handler to queue a user-space signals. Such operations may only be safe from some kinds of probe points, therefore are guru-mode only. .TP .P .TP .B raise raise a signal in the current thread .IP See .IR function::raise (3stap) for details. .SH SEE ALSO .BR .IR \%function::raise (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::indent.3stap000066400000000000000000000016011356460210500272000ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INDENT 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::indent \- systemtap indent tapset .SH DESCRIPTION .TP .P .TP .B thread_indent returns an amount of space with the current task information .IP See .IR function::thread_indent (3stap) for details. .P .TP .B thread_indent_depth returns the nested-depth of the current task .IP See .IR function::thread_indent_depth (3stap) for details. .P .TP .B indent returns an amount of space to indent .IP See .IR function::indent (3stap) for details. .P .TP .B indent_depth returns the global nested-depth .IP See .IR function::indent_depth (3stap) for details. .SH SEE ALSO .BR .IR \%function::thread_indent (3stap), .BR .IR \%function::thread_indent_depth (3stap), .BR .IR \%function::indent (3stap), .BR .IR \%function::indent_depth (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::inet.3stap000066400000000000000000000021541356460210500266620ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INET 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::inet \- systemtap inet tapset .SH DESCRIPTION .TP .P .TP .B htonll Convert 64-bit long long from host to network order .IP See .IR function::htonll (3stap) for details. .P .TP .B htonl Convert 32-bit long from host to network order .IP See .IR function::htonl (3stap) for details. .P .TP .B htons Convert 16-bit short from host to network order .IP See .IR function::htons (3stap) for details. .P .TP .B ntohll Convert 64-bit long long from network to host order .IP See .IR function::ntohll (3stap) for details. .P .TP .B ntohl Convert 32-bit long from network to host order .IP See .IR function::ntohl (3stap) for details. .P .TP .B ntohs Convert 16-bit short from network to host order .IP See .IR function::ntohs (3stap) for details. .SH SEE ALSO .BR .IR \%function::htonll (3stap), .BR .IR \%function::htonl (3stap), .BR .IR \%function::htons (3stap), .BR .IR \%function::ntohll (3stap), .BR .IR \%function::ntohl (3stap), .BR .IR \%function::ntohs (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::inet_sock.3stap000066400000000000000000000011471356460210500277020ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INET_SOCK 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::inet_sock \- systemtap inet_sock tapset .SH DESCRIPTION .TP .P .TP .B inet_get_local_port Provide local port number for a kernel socket .IP See .IR function::inet_get_local_port (3stap) for details. .P .TP .B inet_get_ip_source Provide IP source address string for a kernel socket .IP See .IR function::inet_get_ip_source (3stap) for details. .SH SEE ALSO .BR .IR \%function::inet_get_local_port (3stap), .BR .IR \%function::inet_get_ip_source (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ioblock.3stap000066400000000000000000000022451356460210500273460ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IOBLOCK 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ioblock \- systemtap ioblock tapset .SH DESCRIPTION .TP .P .TP .B ioblock.request Fires whenever making a generic block I/O request. .IP See .IR probe::ioblock.request (3stap) for details. .P .TP .B ioblock.end Fires whenever a block I/O transfer is complete. .IP See .IR probe::ioblock.end (3stap) for details. .P .TP .B ioblock_trace.bounce Fires whenever a buffer bounce is needed for at least one page of a block IO request. .IP See .IR probe::ioblock_trace.bounce (3stap) for details. .P .TP .B ioblock_trace.request Fires just as a generic block I/O request is created for a bio. .IP See .IR probe::ioblock_trace.request (3stap) for details. .P .TP .B ioblock_trace.end Fires whenever a block I/O transfer is complete. .IP See .IR probe::ioblock_trace.end (3stap) for details. .SH SEE ALSO .BR .IR \%probe::ioblock.request (3stap), .BR .IR \%probe::ioblock.end (3stap), .BR .IR \%probe::ioblock_trace.bounce (3stap), .BR .IR \%probe::ioblock_trace.request (3stap), .BR .IR \%probe::ioblock_trace.end (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ioscheduler.3stap000066400000000000000000000061631356460210500302350ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IOSCHEDULER 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ioscheduler \- systemtap ioscheduler tapset .SH DESCRIPTION This family of probe points is used to probe IO scheduler activities. .TP .P .TP .B ioscheduler.elv_next_request Fires when a request is retrieved from the request queue .IP See .IR probe::ioscheduler.elv_next_request (3stap) for details. .P .TP .B ioscheduler.elv_next_request.return Fires when a request retrieval issues a return signal .IP See .IR probe::ioscheduler.elv_next_request.return (3stap) for details. .P .TP .B ioscheduler.elv_completed_request Fires when a request is completed .IP See .IR probe::ioscheduler.elv_completed_request (3stap) for details. .P .TP .B ioscheduler.elv_add_request.kp kprobe based probe to indicate that a request was added to the request queue .IP See .IR probe::ioscheduler.elv_add_request.kp (3stap) for details. .P .TP .B ioscheduler.elv_add_request.tp tracepoint based probe to indicate a request is added to the request queue. .IP See .IR probe::ioscheduler.elv_add_request.tp (3stap) for details. .P .TP .B ioscheduler.elv_add_request probe to indicate request is added to the request queue. .IP See .IR probe::ioscheduler.elv_add_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_completed_request Fires when a request is .IP See .IR probe::ioscheduler_trace.elv_completed_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_issue_request Fires when a request is .IP See .IR probe::ioscheduler_trace.elv_issue_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_requeue_request Fires when a request is .IP See .IR probe::ioscheduler_trace.elv_requeue_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_abort_request Fires when a request is aborted. .IP See .IR probe::ioscheduler_trace.elv_abort_request (3stap) for details. .P .TP .B ioscheduler_trace.plug Fires when a request queue is plugged; .IP See .IR probe::ioscheduler_trace.plug (3stap) for details. .P .TP .B ioscheduler_trace.unplug_io Fires when a request queue is unplugged; .IP See .IR probe::ioscheduler_trace.unplug_io (3stap) for details. .P .TP .B ioscheduler_trace.unplug_timer Fires when unplug timer associated .IP See .IR probe::ioscheduler_trace.unplug_timer (3stap) for details. .SH SEE ALSO .BR .IR \%probe::ioscheduler.elv_next_request (3stap), .BR .IR \%probe::ioscheduler.elv_next_request.return (3stap), .BR .IR \%probe::ioscheduler.elv_completed_request (3stap), .BR .IR \%probe::ioscheduler.elv_add_request.kp (3stap), .BR .IR \%probe::ioscheduler.elv_add_request.tp (3stap), .BR .IR \%probe::ioscheduler.elv_add_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_completed_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_issue_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_requeue_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_abort_request (3stap), .BR .IR \%probe::ioscheduler_trace.plug (3stap), .BR .IR \%probe::ioscheduler_trace.unplug_io (3stap), .BR .IR \%probe::ioscheduler_trace.unplug_timer (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ip.3stap000066400000000000000000000010421356460210500263260ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IP 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ip \- systemtap ip tapset .SH DESCRIPTION .TP .P .TP .B format_ipaddr Returns a string representation for an IP address .IP See .IR function::format_ipaddr (3stap) for details. .P .TP .B ip_ntop Returns a string representation for an IPv4 address .IP See .IR function::ip_ntop (3stap) for details. .SH SEE ALSO .BR .IR \%function::format_ipaddr (3stap), .BR .IR \%function::ip_ntop (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ipmib-filter-default.3stap000066400000000000000000000006711356460210500317320ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IPMIB-FILTER-DEFAULT 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ipmib-filter-default \- systemtap ipmib-filter-default tapset .SH DESCRIPTION .TP .P .TP .B ipmib_filter_key Default filter function for ipmib.* probes .IP See .IR function::ipmib_filter_key (3stap) for details. .SH SEE ALSO .BR .IR \%function::ipmib_filter_key (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ipmib.3stap000066400000000000000000000055601356460210500270270ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IPMIB 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ipmib \- systemtap ipmib tapset .SH DESCRIPTION .TP .P .TP .B ipmib_remote_addr Get the remote ip address .IP See .IR function::ipmib_remote_addr (3stap) for details. .P .TP .B ipmib_local_addr Get the local ip address .IP See .IR function::ipmib_local_addr (3stap) for details. .P .TP .B ipmib_tcp_remote_port Get the remote tcp port .IP See .IR function::ipmib_tcp_remote_port (3stap) for details. .P .TP .B ipmib_tcp_local_port Get the local tcp port .IP See .IR function::ipmib_tcp_local_port (3stap) for details. .P .TP .B ipmib_get_proto Get the protocol value .IP See .IR function::ipmib_get_proto (3stap) for details. .P .TP .B ipmib.InReceives Count an arriving packet .IP See .IR probe::ipmib.InReceives (3stap) for details. .P .TP .B ipmib.InNoRoutes Count an arriving packet with no matching socket .IP See .IR probe::ipmib.InNoRoutes (3stap) for details. .P .TP .B ipmib.InAddrErrors Count arriving packets with an incorrect address .IP See .IR probe::ipmib.InAddrErrors (3stap) for details. .P .TP .B ipmib.InUnknownProtos Count arriving packets with an unbound proto .IP See .IR probe::ipmib.InUnknownProtos (3stap) for details. .P .TP .B ipmib.InDiscards Count discarded inbound packets .IP See .IR probe::ipmib.InDiscards (3stap) for details. .P .TP .B ipmib.ForwDatagrams Count forwarded packet .IP See .IR probe::ipmib.ForwDatagrams (3stap) for details. .P .TP .B ipmib.OutRequests Count a request to send a packet .IP See .IR probe::ipmib.OutRequests (3stap) for details. .P .TP .B ipmib.ReasmTimeout Count Reassembly Timeouts .IP See .IR probe::ipmib.ReasmTimeout (3stap) for details. .P .TP .B ipmib.ReasmReqds Count number of packet fragments reassembly requests .IP See .IR probe::ipmib.ReasmReqds (3stap) for details. .P .TP .B ipmib.FragOKs Count datagram fragmented successfully .IP See .IR probe::ipmib.FragOKs (3stap) for details. .P .TP .B ipmib.FragFails Count datagram fragmented unsuccessfully .IP See .IR probe::ipmib.FragFails (3stap) for details. .SH SEE ALSO .BR .IR \%function::ipmib_remote_addr (3stap), .BR .IR \%function::ipmib_local_addr (3stap), .BR .IR \%function::ipmib_tcp_remote_port (3stap), .BR .IR \%function::ipmib_tcp_local_port (3stap), .BR .IR \%function::ipmib_get_proto (3stap), .BR .IR \%probe::ipmib.InReceives (3stap), .BR .IR \%probe::ipmib.InNoRoutes (3stap), .BR .IR \%probe::ipmib.InAddrErrors (3stap), .BR .IR \%probe::ipmib.InUnknownProtos (3stap), .BR .IR \%probe::ipmib.InDiscards (3stap), .BR .IR \%probe::ipmib.ForwDatagrams (3stap), .BR .IR \%probe::ipmib.OutRequests (3stap), .BR .IR \%probe::ipmib.ReasmTimeout (3stap), .BR .IR \%probe::ipmib.ReasmReqds (3stap), .BR .IR \%probe::ipmib.FragOKs (3stap), .BR .IR \%probe::ipmib.FragFails (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::irq.3stap000066400000000000000000000027731356460210500265250ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IRQ 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::irq \- systemtap irq tapset .SH DESCRIPTION .TP .P .TP .B workqueue.create Creating a new workqueue .IP See .IR probe::workqueue.create (3stap) for details. .P .TP .B workqueue.insert Queuing work on a workqueue .IP See .IR probe::workqueue.insert (3stap) for details. .P .TP .B workqueue.execute Executing deferred work .IP See .IR probe::workqueue.execute (3stap) for details. .P .TP .B workqueue.destroy Destroying workqueue .IP See .IR probe::workqueue.destroy (3stap) for details. .P .TP .B irq_handler.entry Execution of interrupt handler starting .IP See .IR probe::irq_handler.entry (3stap) for details. .P .TP .B irq_handler.exit Execution of interrupt handler completed .IP See .IR probe::irq_handler.exit (3stap) for details. .P .TP .B softirq.entry Execution of handler for a pending softirq starting .IP See .IR probe::softirq.entry (3stap) for details. .P .TP .B softirq.exit Execution of handler for a pending softirq completed .IP See .IR probe::softirq.exit (3stap) for details. .SH SEE ALSO .BR .IR \%probe::workqueue.create (3stap), .BR .IR \%probe::workqueue.insert (3stap), .BR .IR \%probe::workqueue.execute (3stap), .BR .IR \%probe::workqueue.destroy (3stap), .BR .IR \%probe::irq_handler.entry (3stap), .BR .IR \%probe::irq_handler.exit (3stap), .BR .IR \%probe::softirq.entry (3stap), .BR .IR \%probe::softirq.exit (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::json.3stap000066400000000000000000000055271356460210500267030ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::JSON 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::json \- systemtap json tapset .SH DESCRIPTION The JSON tapset provides probes, functions, and macros to generate a JSON metadata and data file. The JSON metadata file is located in /proc/systemtap/MODULE/metadata.json. The JSON data file is located in /proc/systemtap/MODULE/data.json. The JSON data file is updated with current data every time the file is read. .TP .P .TP .B json_set_prefix Set the metric prefix. .IP See .IR function::json_set_prefix (3stap) for details. .P .TP .B json_add_numeric_metric Add a numeric metric .IP See .IR function::json_add_numeric_metric (3stap) for details. .P .TP .B json_add_string_metric Add a string metric .IP See .IR function::json_add_string_metric (3stap) for details. .P .TP .B json_add_array Add an array .IP See .IR function::json_add_array (3stap) for details. .P .TP .B json_add_array_numeric_metric Add a numeric metric to an array .IP See .IR function::json_add_array_numeric_metric (3stap) for details. .P .TP .B json_add_array_string_metric Add a string metric to an array .IP See .IR function::json_add_array_string_metric (3stap) for details. .P .TP .B json_data Fires whenever JSON data is wanted by a reader. .IP See .IR probe::json_data (3stap) for details. .P .TP .B @json_output_data_start Start the json output. .IP See .IR macro::json_output_data_start (3stap) for details. .P .TP .B @json_output_string_value Output a string value. .IP See .IR macro::json_output_string_value (3stap) for details. .P .TP .B @json_output_numeric_value Output a numeric value. .IP See .IR macro::json_output_numeric_value (3stap) for details. .P .TP .B @json_output_array_string_value Output a string value for metric in an array. .IP See .IR macro::json_output_array_string_value (3stap) for details. .P .TP .B @json_output_array_numeric_value Output a numeric value for metric in an array. .IP See .IR macro::json_output_array_numeric_value (3stap) for details. .P .TP .B @json_output_data_end End the json output. .IP See .IR macro::json_output_data_end (3stap) for details. .SH SEE ALSO .BR .IR \%function::json_set_prefix (3stap), .BR .IR \%function::json_add_numeric_metric (3stap), .BR .IR \%function::json_add_string_metric (3stap), .BR .IR \%function::json_add_array (3stap), .BR .IR \%function::json_add_array_numeric_metric (3stap), .BR .IR \%function::json_add_array_string_metric (3stap), .BR .IR \%probe::json_data (3stap), .BR .IR \%macro::json_output_data_start (3stap), .BR .IR \%macro::json_output_string_value (3stap), .BR .IR \%macro::json_output_numeric_value (3stap), .BR .IR \%macro::json_output_array_string_value (3stap), .BR .IR \%macro::json_output_array_numeric_value (3stap), .BR .IR \%macro::json_output_data_end (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::kprocess.3stap000066400000000000000000000023621356460210500275550ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::KPROCESS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::kprocess \- systemtap kprocess tapset .SH DESCRIPTION This family of probe points is used to probe process-related activities. .TP .P .TP .B kprocess.create Fires whenever a new process or thread is successfully created .IP See .IR probe::kprocess.create (3stap) for details. .P .TP .B kprocess.start Starting new process .IP See .IR probe::kprocess.start (3stap) for details. .P .TP .B kprocess.exec Attempt to exec to a new program .IP See .IR probe::kprocess.exec (3stap) for details. .P .TP .B kprocess.exec_complete Return from exec to a new program .IP See .IR probe::kprocess.exec_complete (3stap) for details. .P .TP .B kprocess.exit Exit from process .IP See .IR probe::kprocess.exit (3stap) for details. .P .TP .B kprocess.release Process released .IP See .IR probe::kprocess.release (3stap) for details. .SH SEE ALSO .BR .IR \%probe::kprocess.create (3stap), .BR .IR \%probe::kprocess.start (3stap), .BR .IR \%probe::kprocess.exec (3stap), .BR .IR \%probe::kprocess.exec_complete (3stap), .BR .IR \%probe::kprocess.exit (3stap), .BR .IR \%probe::kprocess.release (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::linuxmib-filter-default.3stap000066400000000000000000000007161356460210500324610ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LINUXMIB-FILTER-DEFAULT 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::linuxmib-filter-default \- systemtap linuxmib-filter-default tapset .SH DESCRIPTION .TP .P .TP .B linuxmib_filter_key Default filter function for linuxmib.* probes .IP See .IR function::linuxmib_filter_key (3stap) for details. .SH SEE ALSO .BR .IR \%function::linuxmib_filter_key (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::linuxmib.3stap000066400000000000000000000017241356460210500275540ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LINUXMIB 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::linuxmib \- systemtap linuxmib tapset .SH DESCRIPTION .TP .P .TP .B linuxmib.DelayedACKs Count of delayed acks .IP See .IR probe::linuxmib.DelayedACKs (3stap) for details. .P .TP .B linuxmib.ListenOverflows Count of times a listen queue overflowed .IP See .IR probe::linuxmib.ListenOverflows (3stap) for details. .P .TP .B linuxmib.ListenDrops Count of times conn request that were dropped .IP See .IR probe::linuxmib.ListenDrops (3stap) for details. .P .TP .B linuxmib.TCPMemoryPressures Count of times memory pressure was used .IP See .IR probe::linuxmib.TCPMemoryPressures (3stap) for details. .SH SEE ALSO .BR .IR \%probe::linuxmib.DelayedACKs (3stap), .BR .IR \%probe::linuxmib.ListenOverflows (3stap), .BR .IR \%probe::linuxmib.ListenDrops (3stap), .BR .IR \%probe::linuxmib.TCPMemoryPressures (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::loadavg.3stap000066400000000000000000000012261356460210500273370ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LOADAVG 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::loadavg \- systemtap loadavg tapset .SH DESCRIPTION Functions in the loadavg tapset allow a probe handler to capture the load average. .TP .P .TP .B get_loadavg_index Get the load average for a specified interval .IP See .IR function::get_loadavg_index (3stap) for details. .P .TP .B sprint_loadavg Report a pretty-printed load average .IP See .IR function::sprint_loadavg (3stap) for details. .SH SEE ALSO .BR .IR \%function::get_loadavg_index (3stap), .BR .IR \%function::sprint_loadavg (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::logging.3stap000066400000000000000000000026001356460210500273450ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LOGGING 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::logging \- systemtap logging tapset .SH DESCRIPTION .TP .P .TP .B log Send a line to the common trace buffer .IP See .IR function::log (3stap) for details. .P .TP .B warn Send a line to the warning stream .IP See .IR function::warn (3stap) for details. .P .TP .B exit Start shutting down probing script. .IP See .IR function::exit (3stap) for details. .P .TP .B abort Immediately shutting down probing script. .IP See .IR function::abort (3stap) for details. .P .TP .B error Send an error message .IP See .IR function::error (3stap) for details. .P .TP .B assert evaluate assertion .IP See .IR function::assert (3stap) for details. .P .TP .B assert evaluate assertion .IP See .IR function::assert (3stap) for details. .P .TP .B ftrace Send a message to the ftrace ring-buffer .IP See .IR function::ftrace (3stap) for details. .P .TP .B printk Send a message to the kernel trace buffer .IP See .IR function::printk (3stap) for details. .SH SEE ALSO .BR .IR \%function::log (3stap), .BR .IR \%function::warn (3stap), .BR .IR \%function::exit (3stap), .BR .IR \%function::abort (3stap), .BR .IR \%function::error (3stap), .BR .IR \%function::assert (3stap), .BR .IR \%function::ftrace (3stap), .BR .IR \%function::printk (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::memory.3stap000066400000000000000000000056251356460210500272410ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::MEMORY 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::memory \- systemtap memory tapset .SH DESCRIPTION This family of probe points is used to probe memory-related events. .TP .P .TP .B vm_fault_contains Test return value for page fault reason .IP See .IR function::vm_fault_contains (3stap) for details. .P .TP .B vm.pagefault Records that a page fault occurred .IP See .IR probe::vm.pagefault (3stap) for details. .P .TP .B vm.pagefault.return Indicates what type of fault occurred .IP See .IR probe::vm.pagefault.return (3stap) for details. .P .TP .B addr_to_node Returns which node a given address belongs to within a NUMA system .IP See .IR function::addr_to_node (3stap) for details. .P .TP .B vm.write_shared Attempts at writing to a shared page .IP See .IR probe::vm.write_shared (3stap) for details. .P .TP .B vm.write_shared_copy Page copy for shared page write .IP See .IR probe::vm.write_shared_copy (3stap) for details. .P .TP .B vm.mmap Fires when an mmap is requested .IP See .IR probe::vm.mmap (3stap) for details. .P .TP .B vm.munmap Fires when an munmap is requested .IP See .IR probe::vm.munmap (3stap) for details. .P .TP .B vm.brk Fires when a brk is requested (i.e. the heap will be resized) .IP See .IR probe::vm.brk (3stap) for details. .P .TP .B vm.oom_kill Fires when a thread is selected for termination by the OOM killer .IP See .IR probe::vm.oom_kill (3stap) for details. .P .TP .B vm.kmalloc Fires when kmalloc is requested .IP See .IR probe::vm.kmalloc (3stap) for details. .P .TP .B vm.kmem_cache_alloc Fires when kmem_cache_alloc is requested .IP See .IR probe::vm.kmem_cache_alloc (3stap) for details. .P .TP .B vm.kmalloc_node Fires when kmalloc_node is requested .IP See .IR probe::vm.kmalloc_node (3stap) for details. .P .TP .B vm.kmem_cache_alloc_node Fires when kmem_cache_alloc_node is requested .IP See .IR probe::vm.kmem_cache_alloc_node (3stap) for details. .P .TP .B vm.kfree Fires when kfree is requested .IP See .IR probe::vm.kfree (3stap) for details. .P .TP .B vm.kmem_cache_free Fires when kmem_cache_free is requested .IP See .IR probe::vm.kmem_cache_free (3stap) for details. .SH SEE ALSO .BR .IR \%function::vm_fault_contains (3stap), .BR .IR \%function::addr_to_node (3stap), .BR .IR \%probe::vm.pagefault (3stap), .BR .IR \%probe::vm.pagefault.return (3stap), .BR .IR \%probe::vm.write_shared (3stap), .BR .IR \%probe::vm.write_shared_copy (3stap), .BR .IR \%probe::vm.mmap (3stap), .BR .IR \%probe::vm.munmap (3stap), .BR .IR \%probe::vm.brk (3stap), .BR .IR \%probe::vm.oom_kill (3stap), .BR .IR \%probe::vm.kmalloc (3stap), .BR .IR \%probe::vm.kmem_cache_alloc (3stap), .BR .IR \%probe::vm.kmalloc_node (3stap), .BR .IR \%probe::vm.kmem_cache_alloc_node (3stap), .BR .IR \%probe::vm.kfree (3stap), .BR .IR \%probe::vm.kmem_cache_free (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::netfilter.3stap000066400000000000000000000041511356460210500277160ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NETFILTER 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::netfilter \- systemtap netfilter tapset .SH DESCRIPTION .TP .P .TP .B netfilter.ip.pre_routing Called before an IP packet is routed .IP See .IR probe::netfilter.ip.pre_routing (3stap) for details. .P .TP .B netfilter.ip.local_in Called on an incoming IP packet addressed to the local computer .IP See .IR probe::netfilter.ip.local_in (3stap) for details. .P .TP .B netfilter.ip.forward Called on an incoming IP packet addressed to some other computer .IP See .IR probe::netfilter.ip.forward (3stap) for details. .P .TP .B netfilter.ip.local_out Called on an outgoing IP packet .IP See .IR probe::netfilter.ip.local_out (3stap) for details. .P .TP .B netfilter.ip.post_routing Called immediately before an outgoing IP packet leaves the computer .IP See .IR probe::netfilter.ip.post_routing (3stap) for details. .P .TP .B netfilter.bridge.local_in Called on a bridging packet destined for the local computer .IP See .IR probe::netfilter.bridge.local_in (3stap) for details. .P .TP .B netfilter.bridge.forward Called on an incoming bridging packet destined for some other computer .IP See .IR probe::netfilter.bridge.forward (3stap) for details. .P .TP .B netfilter.bridge.local_out Called on a bridging packet coming from a local process .IP See .IR probe::netfilter.bridge.local_out (3stap) for details. .SH SEE ALSO .BR .IR \%probe::netfilter.ip.pre_routing (3stap), .BR .IR \%probe::netfilter.ip.local_in (3stap), .BR .IR \%probe::netfilter.ip.forward (3stap), .BR .IR \%probe::netfilter.ip.local_out (3stap), .BR .IR \%probe::netfilter.ip.post_routing (3stap), .BR .IR \%probe::netfilter.arp.in (3stap), .BR .IR \%probe::netfilter.arp.out (3stap), .BR .IR \%probe::netfilter.arp.forward (3stap), .BR .IR \%probe::netfilter.bridge.pre_routing (3stap), .BR .IR \%probe::netfilter.bridge.local_in (3stap), .BR .IR \%probe::netfilter.bridge.forward (3stap), .BR .IR \%probe::netfilter.bridge.local_out (3stap), .BR .IR \%probe::netfilter.bridge.post_routing (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::networking.3stap000066400000000000000000000052401356460210500301110ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NETWORKING 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::networking \- systemtap networking tapset .SH DESCRIPTION This family of probe points is used to probe the activities of the network device. .TP .P .TP .B netdev.receive Data received from network device. .IP See .IR probe::netdev.receive (3stap) for details. .P .TP .B netdev.transmit Network device transmitting buffer .IP See .IR probe::netdev.transmit (3stap) for details. .P .TP .B netdev.change_mtu Called when the netdev MTU is changed .IP See .IR probe::netdev.change_mtu (3stap) for details. .P .TP .B netdev.open Called when the device is opened .IP See .IR probe::netdev.open (3stap) for details. .P .TP .B netdev.close Called when the device is closed .IP See .IR probe::netdev.close (3stap) for details. .P .TP .B netdev.hard_transmit Called when the devices is going to TX (hard) .IP See .IR probe::netdev.hard_transmit (3stap) for details. .P .TP .B netdev.rx Called when the device is going to receive a packet .IP See .IR probe::netdev.rx (3stap) for details. .P .TP .B netdev.change_rx_flag Called when the device RX flag will be changed .IP See .IR probe::netdev.change_rx_flag (3stap) for details. .P .TP .B netdev.set_promiscuity Called when the device enters/leaves promiscuity .IP See .IR probe::netdev.set_promiscuity (3stap) for details. .P .TP .B netdev.ioctl Called when the device suffers an IOCTL .IP See .IR probe::netdev.ioctl (3stap) for details. .P .TP .B netdev.register Called when the device is registered .IP See .IR probe::netdev.register (3stap) for details. .P .TP .B netdev.unregister Called when the device is being unregistered .IP See .IR probe::netdev.unregister (3stap) for details. .P .TP .B netdev.get_stats Called when someone asks the device statistics .IP See .IR probe::netdev.get_stats (3stap) for details. .P .TP .B netdev.change_mac Called when the netdev_name has the MAC changed .IP See .IR probe::netdev.change_mac (3stap) for details. .SH SEE ALSO .BR .IR \%probe::netdev.receive (3stap), .BR .IR \%probe::netdev.transmit (3stap), .BR .IR \%probe::netdev.change_mtu (3stap), .BR .IR \%probe::netdev.open (3stap), .BR .IR \%probe::netdev.close (3stap), .BR .IR \%probe::netdev.hard_transmit (3stap), .BR .IR \%probe::netdev.rx (3stap), .BR .IR \%probe::netdev.change_rx_flag (3stap), .BR .IR \%probe::netdev.set_promiscuity (3stap), .BR .IR \%probe::netdev.ioctl (3stap), .BR .IR \%probe::netdev.register (3stap), .BR .IR \%probe::netdev.unregister (3stap), .BR .IR \%probe::netdev.get_stats (3stap), .BR .IR \%probe::netdev.change_mac (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfs.3stap000066400000000000000000000076301356460210500265150ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::nfs \- systemtap nfs tapset .SH DESCRIPTION .TP .P .TP .B nfs.fop.llseek NFS client llseek operation .IP See .IR probe::nfs.fop.llseek (3stap) for details. .P .TP .B nfs.fop.read NFS client read operation .IP See .IR probe::nfs.fop.read (3stap) for details. .P .TP .B nfs.fop.write NFS client write operation .IP See .IR probe::nfs.fop.write (3stap) for details. .P .TP .B nfs.fop.aio_read NFS client aio_read file operation .IP See .IR probe::nfs.fop.aio_read (3stap) for details. .P .TP .B nfs.fop.read_iter NFS client read_iter file operation .IP See .IR probe::nfs.fop.read_iter (3stap) for details. .P .TP .B nfs.fop.aio_write NFS client aio_write file operation .IP See .IR probe::nfs.fop.aio_write (3stap) for details. .P .TP .B nfs.fop.write_iter NFS client write_iter file operation .IP See .IR probe::nfs.fop.write_iter (3stap) for details. .P .TP .B nfs.fop.mmap NFS client mmap operation .IP See .IR probe::nfs.fop.mmap (3stap) for details. .P .TP .B nfs.fop.open NFS client file open operation .IP See .IR probe::nfs.fop.open (3stap) for details. .P .TP .B nfs.fop.flush NFS client flush file operation .IP See .IR probe::nfs.fop.flush (3stap) for details. .P .TP .B nfs.fop.release NFS client release page operation .IP See .IR probe::nfs.fop.release (3stap) for details. .P .TP .B nfs.fop.fsync NFS client fsync operation .IP See .IR probe::nfs.fop.fsync (3stap) for details. .P .TP .B nfs.fop.lock NFS client file lock operation .IP See .IR probe::nfs.fop.lock (3stap) for details. .P .TP .B nfs.fop.sendfile NFS client send file operation .IP See .IR probe::nfs.fop.sendfile (3stap) for details. .P .TP .B nfs.fop.check_flags NFS client checking flag operation .IP See .IR probe::nfs.fop.check_flags (3stap) for details. .P .TP .B nfs.aop.readpage NFS client synchronously reading a page .IP See .IR probe::nfs.aop.readpage (3stap) for details. .P .TP .B nfs.aop.readpages NFS client reading multiple pages .IP See .IR probe::nfs.aop.readpages (3stap) for details. .P .TP .B nfs.aop.set_page_dirty NFS client marking page as dirty .IP See .IR probe::nfs.aop.set_page_dirty (3stap) for details. .P .TP .B nfs.aop.writepage NFS client writing a mapped page to the NFS server .IP See .IR probe::nfs.aop.writepage (3stap) for details. .P .TP .B nfs.aop.writepages NFS client writing several dirty pages to the NFS server .IP See .IR probe::nfs.aop.writepages (3stap) for details. .P .TP .B nfs.aop.write_begin NFS client begin to write data .IP See .IR probe::nfs.aop.write_begin (3stap) for details. .P .TP .B nfs.aop.write_end NFS client complete writing data .IP See .IR probe::nfs.aop.write_end (3stap) for details. .P .TP .B nfs.aop.release_page NFS client releasing page .IP See .IR probe::nfs.aop.release_page (3stap) for details. .SH SEE ALSO .BR .IR \%probe::nfs.fop.llseek (3stap), .BR .IR \%probe::nfs.fop.read (3stap), .BR .IR \%probe::nfs.fop.write (3stap), .BR .IR \%probe::nfs.fop.aio_read (3stap), .BR .IR \%probe::nfs.fop.read_iter (3stap), .BR .IR \%probe::nfs.fop.aio_write (3stap), .BR .IR \%probe::nfs.fop.write_iter (3stap), .BR .IR \%probe::nfs.fop.mmap (3stap), .BR .IR \%probe::nfs.fop.open (3stap), .BR .IR \%probe::nfs.fop.flush (3stap), .BR .IR \%probe::nfs.fop.release (3stap), .BR .IR \%probe::nfs.fop.fsync (3stap), .BR .IR \%probe::nfs.fop.lock (3stap), .BR .IR \%probe::nfs.fop.sendfile (3stap), .BR .IR \%probe::nfs.fop.check_flags (3stap), .BR .IR \%probe::nfs.aop.readpage (3stap), .BR .IR \%probe::nfs.aop.readpages (3stap), .BR .IR \%probe::nfs.aop.set_page_dirty (3stap), .BR .IR \%probe::nfs.aop.writepage (3stap), .BR .IR \%probe::nfs.aop.writepages (3stap), .BR .IR \%probe::nfs.aop.write_begin (3stap), .BR .IR \%probe::nfs.aop.write_end (3stap), .BR .IR \%probe::nfs.aop.release_page (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfs_proc.3stap000066400000000000000000000065271356460210500275440ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFS_PROC 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::nfs_proc \- systemtap nfs_proc tapset .SH DESCRIPTION .TP .P .TP .B nfs.proc.lookup NFS client opens/searches a file on server .IP See .IR probe::nfs.proc.lookup (3stap) for details. .P .TP .B nfs.proc.read NFS client synchronously reads file from server .IP See .IR probe::nfs.proc.read (3stap) for details. .P .TP .B nfs.proc.write NFS client synchronously writes file to server .IP See .IR probe::nfs.proc.write (3stap) for details. .P .TP .B nfs.proc.commit NFS client committing data on server .IP See .IR probe::nfs.proc.commit (3stap) for details. .P .TP .B nfs.proc.read_setup NFS client setting up a read RPC task .IP See .IR probe::nfs.proc.read_setup (3stap) for details. .P .TP .B nfs.proc.read_done NFS client response to a read RPC task .IP See .IR probe::nfs.proc.read_done (3stap) for details. .P .TP .B nfs.proc.write_setup NFS client setting up a write RPC task .IP See .IR probe::nfs.proc.write_setup (3stap) for details. .P .TP .B nfs.proc.write_done NFS client response to a write RPC task .IP See .IR probe::nfs.proc.write_done (3stap) for details. .P .TP .B nfs.proc.commit_setup NFS client setting up a commit RPC task .IP See .IR probe::nfs.proc.commit_setup (3stap) for details. .P .TP .B nfs.proc.commit_done NFS client response to a commit RPC task .IP See .IR probe::nfs.proc.commit_done (3stap) for details. .P .TP .B nfs.proc.rename_setup NFS client setting up a rename RPC task .IP See .IR probe::nfs.proc.rename_setup (3stap) for details. .P .TP .B nfs.proc.rename_done NFS client response to a rename RPC task .IP See .IR probe::nfs.proc.rename_done (3stap) for details. .P .TP .B nfs.proc.open NFS client allocates file read/write context information .IP See .IR probe::nfs.proc.open (3stap) for details. .P .TP .B nfs.proc.release NFS client releases file read/write context information .IP See .IR probe::nfs.proc.release (3stap) for details. .P .TP .B nfs.proc.handle_exception NFS client handling an NFSv4 exception .IP See .IR probe::nfs.proc.handle_exception (3stap) for details. .P .TP .B nfs.proc.create NFS client creating file on server .IP See .IR probe::nfs.proc.create (3stap) for details. .P .TP .B nfs.proc.remove NFS client removes a file on server .IP See .IR probe::nfs.proc.remove (3stap) for details. .P .TP .B nfs.proc.rename NFS client renames a file on server .IP See .IR probe::nfs.proc.rename (3stap) for details. .SH SEE ALSO .BR .IR \%probe::nfs.proc.lookup (3stap), .BR .IR \%probe::nfs.proc.read (3stap), .BR .IR \%probe::nfs.proc.write (3stap), .BR .IR \%probe::nfs.proc.commit (3stap), .BR .IR \%probe::nfs.proc.read_setup (3stap), .BR .IR \%probe::nfs.proc.read_done (3stap), .BR .IR \%probe::nfs.proc.write_setup (3stap), .BR .IR \%probe::nfs.proc.write_done (3stap), .BR .IR \%probe::nfs.proc.commit_setup (3stap), .BR .IR \%probe::nfs.proc.commit_done (3stap), .BR .IR \%probe::nfs.proc.rename_setup (3stap), .BR .IR \%probe::nfs.proc.rename_done (3stap), .BR .IR \%probe::nfs.proc.open (3stap), .BR .IR \%probe::nfs.proc.release (3stap), .BR .IR \%probe::nfs.proc.handle_exception (3stap), .BR .IR \%probe::nfs.proc.create (3stap), .BR .IR \%probe::nfs.proc.remove (3stap), .BR .IR \%probe::nfs.proc.rename (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfsd.3stap000066400000000000000000000060671356460210500266640ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFSD 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::nfsd \- systemtap nfsd tapset .SH DESCRIPTION .TP .P .TP .B nfsd.dispatch NFS server receives an operation from client .IP See .IR probe::nfsd.dispatch (3stap) for details. .P .TP .B nfsd.proc.lookup NFS server opening or searching for a file for client .IP See .IR probe::nfsd.proc.lookup (3stap) for details. .P .TP .B nfsd.proc.read NFS server reading file for client .IP See .IR probe::nfsd.proc.read (3stap) for details. .P .TP .B nfsd.proc.write NFS server writing data to file for client .IP See .IR probe::nfsd.proc.write (3stap) for details. .P .TP .B nfsd.proc.commit NFS server performing a commit operation for client .IP See .IR probe::nfsd.proc.commit (3stap) for details. .P .TP .B nfsd.proc.create NFS server creating a file for client .IP See .IR probe::nfsd.proc.create (3stap) for details. .P .TP .B nfsd.proc.remove NFS server removing a file for client .IP See .IR probe::nfsd.proc.remove (3stap) for details. .P .TP .B nfsd.proc.rename NFS Server renaming a file for client .IP See .IR probe::nfsd.proc.rename (3stap) for details. .P .TP .B nfsd.open NFS server opening a file for client .IP See .IR probe::nfsd.open (3stap) for details. .P .TP .B nfsd.close NFS server closing a file for client .IP See .IR probe::nfsd.close (3stap) for details. .P .TP .B nfsd.read NFS server reading data from a file for client .IP See .IR probe::nfsd.read (3stap) for details. .P .TP .B nfsd.write NFS server writing data to a file for client .IP See .IR probe::nfsd.write (3stap) for details. .P .TP .B nfsd.commit NFS server committing all pending writes to stable storage .IP See .IR probe::nfsd.commit (3stap) for details. .P .TP .B nfsd.lookup NFS server opening or searching file for a file for client .IP See .IR probe::nfsd.lookup (3stap) for details. .P .TP .B nfsd.create NFS server creating a file(regular,dir,device,fifo) for client .IP See .IR probe::nfsd.create (3stap) for details. .P .TP .B nfsd.createv3 NFS server creating a regular file or set file attributes for client .IP See .IR probe::nfsd.createv3 (3stap) for details. .P .TP .B nfsd.unlink NFS server removing a file or a directory for client .IP See .IR probe::nfsd.unlink (3stap) for details. .SH SEE ALSO .BR .IR \%probe::nfsd.dispatch (3stap), .BR .IR \%probe::nfsd.proc.lookup (3stap), .BR .IR \%probe::nfsd.proc.read (3stap), .BR .IR \%probe::nfsd.proc.write (3stap), .BR .IR \%probe::nfsd.proc.commit (3stap), .BR .IR \%probe::nfsd.proc.create (3stap), .BR .IR \%probe::nfsd.proc.remove (3stap), .BR .IR \%probe::nfsd.proc.rename (3stap), .BR .IR \%probe::nfsd.open (3stap), .BR .IR \%probe::nfsd.close (3stap), .BR .IR \%probe::nfsd.read (3stap), .BR .IR \%probe::nfsd.write (3stap), .BR .IR \%probe::nfsd.commit (3stap), .BR .IR \%probe::nfsd.lookup (3stap), .BR .IR \%probe::nfsd.create (3stap), .BR .IR \%probe::nfsd.createv3 (3stap), .BR .IR \%probe::nfsd.unlink (3stap), .BR .IR \%probe::nfsd.rename (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfsderrno.3stap000066400000000000000000000005761356460210500277310ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFSDERRNO 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::nfsderrno \- systemtap nfsderrno tapset .SH DESCRIPTION .TP .P .TP .B nfsderror Convert nfsd error number into string .IP See .IR function::nfsderror (3stap) for details. .SH SEE ALSO .BR .IR \%function::nfsderror (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::panic.3stap000066400000000000000000000013051356460210500270120ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PANIC 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::panic \- systemtap panic tapset .SH DESCRIPTION Functions in the panic tapset allow a probe handler to invoke the system panic routine with a user-specified message. This may be used with a crash dump collection facility such as kexec/kdump in order to capture data for post-mortem debugging. Due to the fact that this will bring the system to an immediate halt the functions in this tapset require guru mode. .TP .P .TP .B panic trigger a panic .IP See .IR function::panic (3stap) for details. .SH SEE ALSO .BR .IR \%function::panic (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::pn.3stap000066400000000000000000000007531356460210500263430ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PN 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::pn \- systemtap pn tapset .SH DESCRIPTION .TP .P .TP .B pn Returns the active probe name .IP See .IR function::pn (3stap) for details. .P .TP .B pnlabel Returns the label name parsed from the probe name .IP See .IR function::pnlabel (3stap) for details. .SH SEE ALSO .BR .IR \%function::pn (3stap), .BR .IR \%function::pnlabel (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::proc_mem.3stap000066400000000000000000000055121356460210500275250ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PROC_MEM 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::proc_mem \- systemtap proc_mem tapset .SH DESCRIPTION Process memory query and utility functions provide information about the memory usage of the current application. These functions provide information about the full size, resident, shared, code and data used by the current process. And provide utility functions to query the page size of the current architecture and create human readable string representations of bytes and pages used. .TP .P .TP .B proc_mem_size Total program virtual memory size in pages .IP See .IR function::proc_mem_size (3stap) for details. .P .TP .B proc_mem_size Total program virtual memory size in pages .IP See .IR function::proc_mem_size (3stap) for details. .P .TP .B proc_mem_rss Program resident set size in pages .IP See .IR function::proc_mem_rss (3stap) for details. .P .TP .B proc_mem_rss Program resident set size in pages .IP See .IR function::proc_mem_rss (3stap) for details. .P .TP .B proc_mem_shr Program shared pages (from shared mappings) .IP See .IR function::proc_mem_shr (3stap) for details. .P .TP .B proc_mem_shr Program shared pages (from shared mappings) .IP See .IR function::proc_mem_shr (3stap) for details. .P .TP .B proc_mem_txt Program text (code) size in pages .IP See .IR function::proc_mem_txt (3stap) for details. .P .TP .B proc_mem_txt Program text (code) size in pages .IP See .IR function::proc_mem_txt (3stap) for details. .P .TP .B proc_mem_data Program data size (data + stack) in pages .IP See .IR function::proc_mem_data (3stap) for details. .P .TP .B proc_mem_data Program data size (data + stack) in pages .IP See .IR function::proc_mem_data (3stap) for details. .P .TP .B mem_page_size Number of bytes in a page for this architecture .IP See .IR function::mem_page_size (3stap) for details. .P .TP .B bytes_to_string Human readable string for given bytes .IP See .IR function::bytes_to_string (3stap) for details. .P .TP .B pages_to_string Turns pages into a human readable string .IP See .IR function::pages_to_string (3stap) for details. .P .TP .B proc_mem_string Human readable string of process memory usage .IP See .IR function::proc_mem_string (3stap) for details. .P .TP .B proc_mem_string Human readable string of process memory usage .IP See .IR function::proc_mem_string (3stap) for details. .SH SEE ALSO .BR .IR \%function::proc_mem_size (3stap), .BR .IR \%function::proc_mem_rss (3stap), .BR .IR \%function::proc_mem_shr (3stap), .BR .IR \%function::proc_mem_txt (3stap), .BR .IR \%function::proc_mem_data (3stap), .BR .IR \%function::mem_page_size (3stap), .BR .IR \%function::bytes_to_string (3stap), .BR .IR \%function::pages_to_string (3stap), .BR .IR \%function::proc_mem_string (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::pstrace.3stap000066400000000000000000000005701356460210500273640ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PSTRACE 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::pstrace \- systemtap pstrace tapset .SH DESCRIPTION .TP .P .TP .B pstrace Chain of processes and pids back to init(1) .IP See .IR function::pstrace (3stap) for details. .SH SEE ALSO .BR .IR \%function::pstrace (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::queue_stats.3stap000066400000000000000000000040151356460210500302630ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::QUEUE_STATS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::queue_stats \- systemtap queue_stats tapset .SH DESCRIPTION .TP .P .TP .B qs_wait Function to record enqueue requests .IP See .IR function::qs_wait (3stap) for details. .P .TP .B qs_run Function to record being moved from wait queue to being serviced .IP See .IR function::qs_run (3stap) for details. .P .TP .B qs_done Function to record finishing request .IP See .IR function::qs_done (3stap) for details. .P .TP .B qsq_start Function to reset the stats for a queue .IP See .IR function::qsq_start (3stap) for details. .P .TP .B qsq_utilization Fraction of time that any request was being serviced .IP See .IR function::qsq_utilization (3stap) for details. .P .TP .B qsq_blocked Returns the time reqest was on the wait queue .IP See .IR function::qsq_blocked (3stap) for details. .P .TP .B qsq_wait_queue_length length of wait queue .IP See .IR function::qsq_wait_queue_length (3stap) for details. .P .TP .B qsq_service_time Amount of time per request service .IP See .IR function::qsq_service_time (3stap) for details. .P .TP .B qsq_wait_time Amount of time in queue + service per request .IP See .IR function::qsq_wait_time (3stap) for details. .P .TP .B qsq_throughput Number of requests served per unit time .IP See .IR function::qsq_throughput (3stap) for details. .P .TP .B qsq_print Prints a line of statistics for the given queue .IP See .IR function::qsq_print (3stap) for details. .SH SEE ALSO .BR .IR \%function::qs_wait (3stap), .BR .IR \%function::qs_run (3stap), .BR .IR \%function::qs_done (3stap), .BR .IR \%function::qsq_start (3stap), .BR .IR \%function::qsq_utilization (3stap), .BR .IR \%function::qsq_blocked (3stap), .BR .IR \%function::qsq_wait_queue_length (3stap), .BR .IR \%function::qsq_service_time (3stap), .BR .IR \%function::qsq_wait_time (3stap), .BR .IR \%function::qsq_throughput (3stap), .BR .IR \%function::qsq_print (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::random.3stap000066400000000000000000000005561356460210500272070ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RANDOM 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::random \- systemtap random tapset .SH DESCRIPTION .TP .P .TP .B randint Return a random number between [0,n) .IP See .IR function::randint (3stap) for details. .SH SEE ALSO .BR .IR \%function::randint (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::regex.3stap000066400000000000000000000012361356460210500270350ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::REGEX 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::regex \- systemtap regex tapset .SH DESCRIPTION .TP .P .TP .B matched_str Return the last matched string. .IP See .IR function::matched_str (3stap) for details. .P .TP .B matched Return a given matched subexpression. .IP See .IR function::matched (3stap) for details. .P .TP .B ngroups Number of subexpressions in the last match. .IP See .IR function::ngroups (3stap) for details. .SH SEE ALSO .BR .IR \%function::matched_str (3stap), .BR .IR \%function::matched (3stap), .BR .IR \%function::ngroups (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::registers.3stap000066400000000000000000000053051356460210500277330ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::REGISTERS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::registers \- systemtap registers tapset .SH DESCRIPTION .TP .P .TP .B register Return the signed value of the named CPU register .IP See .IR function::register (3stap) for details. .P .TP .B u_register Return the unsigned value of the named CPU register .IP See .IR function::u_register (3stap) for details. .P .TP .B int_arg Return function argument as signed int .IP See .IR function::int_arg (3stap) for details. .P .TP .B uint_arg Return function argument as unsigned int .IP See .IR function::uint_arg (3stap) for details. .P .TP .B long_arg Return function argument as signed long .IP See .IR function::long_arg (3stap) for details. .P .TP .B ulong_arg Return function argument as unsigned long .IP See .IR function::ulong_arg (3stap) for details. .P .TP .B longlong_arg Return function argument as 64-bit value .IP See .IR function::longlong_arg (3stap) for details. .P .TP .B ulonglong_arg Return function argument as 64-bit value .IP See .IR function::ulonglong_arg (3stap) for details. .P .TP .B pointer_arg Return function argument as pointer value .IP See .IR function::pointer_arg (3stap) for details. .P .TP .B s32_arg Return function argument as signed 32-bit value .IP See .IR function::s32_arg (3stap) for details. .P .TP .B u32_arg Return function argument as unsigned 32-bit value .IP See .IR function::u32_arg (3stap) for details. .P .TP .B s64_arg Return function argument as signed 64-bit value .IP See .IR function::s64_arg (3stap) for details. .P .TP .B u64_arg Return function argument as unsigned 64-bit value .IP See .IR function::u64_arg (3stap) for details. .P .TP .B asmlinkage Mark function as declared asmlinkage .IP See .IR function::asmlinkage (3stap) for details. .P .TP .B fastcall Mark function as declared fastcall .IP See .IR function::fastcall (3stap) for details. .P .TP .B regparm Specify regparm value used to compile function .IP See .IR function::regparm (3stap) for details. .SH SEE ALSO .BR .IR \%function::register (3stap), .BR .IR \%function::u_register (3stap), .BR .IR \%function::int_arg (3stap), .BR .IR \%function::uint_arg (3stap), .BR .IR \%function::long_arg (3stap), .BR .IR \%function::ulong_arg (3stap), .BR .IR \%function::longlong_arg (3stap), .BR .IR \%function::ulonglong_arg (3stap), .BR .IR \%function::pointer_arg (3stap), .BR .IR \%function::s32_arg (3stap), .BR .IR \%function::u32_arg (3stap), .BR .IR \%function::s64_arg (3stap), .BR .IR \%function::u64_arg (3stap), .BR .IR \%function::asmlinkage (3stap), .BR .IR \%function::fastcall (3stap), .BR .IR \%function::regparm (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::rlimit.3stap000066400000000000000000000006251356460210500272240ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RLIMIT 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::rlimit \- systemtap rlimit tapset .SH DESCRIPTION .TP .P .TP .B rlimit_from_str Symbolic string associated with resource limit code .IP See .IR function::rlimit_from_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::rlimit_from_str (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::rpc.3stap000066400000000000000000000067401356460210500265140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RPC 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::rpc \- systemtap rpc tapset .SH DESCRIPTION .TP .P .TP .B sunrpc.clnt.create_client Create an RPC client .IP See .IR probe::sunrpc.clnt.create_client (3stap) for details. .P .TP .B sunrpc.clnt.clone_client Clone an RPC client structure .IP See .IR probe::sunrpc.clnt.clone_client (3stap) for details. .P .TP .B sunrpc.clnt.shutdown_client Shutdown an RPC client .IP See .IR probe::sunrpc.clnt.shutdown_client (3stap) for details. .P .TP .B sunrpc.clnt.bind_new_program Bind a new RPC program to an existing client .IP See .IR probe::sunrpc.clnt.bind_new_program (3stap) for details. .P .TP .B sunrpc.clnt.call_sync Make a synchronous RPC call .IP See .IR probe::sunrpc.clnt.call_sync (3stap) for details. .P .TP .B sunrpc.clnt.call_async Make an asynchronous RPC call .IP See .IR probe::sunrpc.clnt.call_async (3stap) for details. .P .TP .B sunrpc.clnt.restart_call Restart an asynchronous RPC call .IP See .IR probe::sunrpc.clnt.restart_call (3stap) for details. .P .TP .B sunrpc.svc.register Register an RPC service with the local portmapper .IP See .IR probe::sunrpc.svc.register (3stap) for details. .P .TP .B sunrpc.svc.create Create an RPC service .IP See .IR probe::sunrpc.svc.create (3stap) for details. .P .TP .B sunrpc.svc.destroy Destroy an RPC service .IP See .IR probe::sunrpc.svc.destroy (3stap) for details. .P .TP .B sunrpc.svc.process Process an RPC request .IP See .IR probe::sunrpc.svc.process (3stap) for details. .P .TP .B sunrpc.svc.authorise An RPC request is to be authorised .IP See .IR probe::sunrpc.svc.authorise (3stap) for details. .P .TP .B sunrpc.svc.recv Listen for the next RPC request on any socket .IP See .IR probe::sunrpc.svc.recv (3stap) for details. .P .TP .B sunrpc.svc.send Return reply to RPC client .IP See .IR probe::sunrpc.svc.send (3stap) for details. .P .TP .B sunrpc.svc.drop Drop RPC request .IP See .IR probe::sunrpc.svc.drop (3stap) for details. .P .TP .B sunrpc.sched.new_task Create new task for the specified client .IP See .IR probe::sunrpc.sched.new_task (3stap) for details. .P .TP .B sunrpc.sched.release_task Release all resources associated with a task .IP See .IR probe::sunrpc.sched.release_task (3stap) for details. .P .TP .B sunrpc.sched.execute Execute the RPC `scheduler' .IP See .IR probe::sunrpc.sched.execute (3stap) for details. .P .TP .B sunrpc.sched.delay Delay an RPC task .IP See .IR probe::sunrpc.sched.delay (3stap) for details. .SH SEE ALSO .BR .IR \%probe::sunrpc.clnt.create_client (3stap), .BR .IR \%probe::sunrpc.clnt.clone_client (3stap), .BR .IR \%probe::sunrpc.clnt.shutdown_client (3stap), .BR .IR \%probe::sunrpc.clnt.bind_new_program (3stap), .BR .IR \%probe::sunrpc.clnt.call_sync (3stap), .BR .IR \%probe::sunrpc.clnt.call_async (3stap), .BR .IR \%probe::sunrpc.clnt.restart_call (3stap), .BR .IR \%probe::sunrpc.svc.register (3stap), .BR .IR \%probe::sunrpc.svc.create (3stap), .BR .IR \%probe::sunrpc.svc.destroy (3stap), .BR .IR \%probe::sunrpc.svc.process (3stap), .BR .IR \%probe::sunrpc.svc.authorise (3stap), .BR .IR \%probe::sunrpc.svc.recv (3stap), .BR .IR \%probe::sunrpc.svc.send (3stap), .BR .IR \%probe::sunrpc.svc.drop (3stap), .BR .IR \%probe::sunrpc.sched.new_task (3stap), .BR .IR \%probe::sunrpc.sched.release_task (3stap), .BR .IR \%probe::sunrpc.sched.execute (3stap), .BR .IR \%probe::sunrpc.sched.delay (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::scheduler.3stap000066400000000000000000000060351356460210500277030ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SCHEDULER 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::scheduler \- systemtap scheduler tapset .SH DESCRIPTION .TP .P .TP .B scheduler.cpu_off Process is about to stop running on a cpu .IP See .IR probe::scheduler.cpu_off (3stap) for details. .P .TP .B scheduler.cpu_on Process is beginning execution on a cpu .IP See .IR probe::scheduler.cpu_on (3stap) for details. .P .TP .B scheduler.tick Schedulers internal tick, a processes timeslice accounting is updated .IP See .IR probe::scheduler.tick (3stap) for details. .P .TP .B scheduler.balance A cpu attempting to find more work. .IP See .IR probe::scheduler.balance (3stap) for details. .P .TP .B scheduler.ctxswitch A context switch is occuring. .IP See .IR probe::scheduler.ctxswitch (3stap) for details. .P .TP .B scheduler.kthread_stop A thread created by kthread_create is being stopped .IP See .IR probe::scheduler.kthread_stop (3stap) for details. .P .TP .B scheduler.kthread_stop.return A kthread is stopped and gets the return value .IP See .IR probe::scheduler.kthread_stop.return (3stap) for details. .P .TP .B scheduler.wait_task Waiting on a task to unschedule (become inactive) .IP See .IR probe::scheduler.wait_task (3stap) for details. .P .TP .B scheduler.wakeup Task is woken up .IP See .IR probe::scheduler.wakeup (3stap) for details. .P .TP .B scheduler.wakeup_new Newly created task is woken up for the first time .IP See .IR probe::scheduler.wakeup_new (3stap) for details. .P .TP .B scheduler.migrate Task migrating across cpus .IP See .IR probe::scheduler.migrate (3stap) for details. .P .TP .B scheduler.process_free Scheduler freeing a data structure for a process .IP See .IR probe::scheduler.process_free (3stap) for details. .P .TP .B scheduler.process_exit Process exiting .IP See .IR probe::scheduler.process_exit (3stap) for details. .P .TP .B scheduler.process_wait Scheduler starting to wait on a process .IP See .IR probe::scheduler.process_wait (3stap) for details. .P .TP .B scheduler.process_fork Process forked .IP See .IR probe::scheduler.process_fork (3stap) for details. .P .TP .B scheduler.signal_send Sending a signal .IP See .IR probe::scheduler.signal_send (3stap) for details. .SH SEE ALSO .BR .IR \%probe::scheduler.cpu_off (3stap), .BR .IR \%probe::scheduler.cpu_on (3stap), .BR .IR \%probe::scheduler.tick (3stap), .BR .IR \%probe::scheduler.balance (3stap), .BR .IR \%probe::scheduler.ctxswitch (3stap), .BR .IR \%probe::scheduler.kthread_stop (3stap), .BR .IR \%probe::scheduler.kthread_stop.return (3stap), .BR .IR \%probe::scheduler.wait_task (3stap), .BR .IR \%probe::scheduler.wakeup (3stap), .BR .IR \%probe::scheduler.wakeup_new (3stap), .BR .IR \%probe::scheduler.migrate (3stap), .BR .IR \%probe::scheduler.process_free (3stap), .BR .IR \%probe::scheduler.process_exit (3stap), .BR .IR \%probe::scheduler.process_wait (3stap), .BR .IR \%probe::scheduler.process_fork (3stap), .BR .IR \%probe::scheduler.signal_send (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::scsi.3stap000066400000000000000000000025141356460210500266640ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SCSI 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::scsi \- systemtap scsi tapset .SH DESCRIPTION This family of probe points is used to probe SCSI activities. .TP .P .TP .B scsi.ioentry Prepares a SCSI mid-layer request .IP See .IR probe::scsi.ioentry (3stap) for details. .P .TP .B scsi.iodispatching SCSI mid-layer dispatched low-level SCSI command .IP See .IR probe::scsi.iodispatching (3stap) for details. .P .TP .B scsi.iodone SCSI command completed by low level driver and enqueued into the done queue. .IP See .IR probe::scsi.iodone (3stap) for details. .P .TP .B scsi.iocompleted SCSI mid-layer running the completion processing for block device I/O requests .IP See .IR probe::scsi.iocompleted (3stap) for details. .P .TP .B scsi.ioexecute Create mid-layer SCSI request and wait for the result .IP See .IR probe::scsi.ioexecute (3stap) for details. .P .TP .B scsi.set_state Order SCSI device state change .IP See .IR probe::scsi.set_state (3stap) for details. .SH SEE ALSO .BR .IR \%probe::scsi.ioentry (3stap), .BR .IR \%probe::scsi.iodispatching (3stap), .BR .IR \%probe::scsi.iodone (3stap), .BR .IR \%probe::scsi.iocompleted (3stap), .BR .IR \%probe::scsi.ioexecute (3stap), .BR .IR \%probe::scsi.set_state (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::signal.3stap000066400000000000000000000143601356460210500272020ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SIGNAL 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::signal \- systemtap signal tapset .SH DESCRIPTION This family of probe points is used to probe signal activities. Since there are so many signals sent to processes at any given point, it is advisable to filter the information according to the requirements. For example, filter only for a particular signal (if sig==2) or for a particular process (if pid_name==stap). .TP .P .TP .B signal.send Signal being sent to a process .IP See .IR probe::signal.send (3stap) for details. .P .TP .B signal.send.return Signal being sent to a process completed (deprecated in SystemTap 2.1) .IP See .IR probe::signal.send.return (3stap) for details. .P .TP .B signal.checkperm Check being performed on a sent signal .IP See .IR probe::signal.checkperm (3stap) for details. .P .TP .B signal.checkperm.return Check performed on a sent signal completed .IP See .IR probe::signal.checkperm.return (3stap) for details. .P .TP .B signal.wakeup Sleeping process being wakened for signal .IP See .IR probe::signal.wakeup (3stap) for details. .P .TP .B signal.check_ignored Checking to see signal is ignored .IP See .IR probe::signal.check_ignored (3stap) for details. .P .TP .B signal.check_ignored.return Check to see signal is ignored completed .IP See .IR probe::signal.check_ignored.return (3stap) for details. .P .TP .B signal.force_segv Forcing send of SIGSEGV .IP See .IR probe::signal.force_segv (3stap) for details. .P .TP .B signal.force_segv.return Forcing send of SIGSEGV complete .IP See .IR probe::signal.force_segv.return (3stap) for details. .P .TP .B signal.syskill Sending kill signal to a process .IP See .IR probe::signal.syskill (3stap) for details. .P .TP .B signal.syskill.return Sending kill signal completed .IP See .IR probe::signal.syskill.return (3stap) for details. .P .TP .B signal.sys_tkill Sending a kill signal to a thread .IP See .IR probe::signal.sys_tkill (3stap) for details. .P .TP .B signal.systkill.return Sending kill signal to a thread completed .IP See .IR probe::signal.systkill.return (3stap) for details. .P .TP .B signal.sys_tgkill Sending kill signal to a thread group .IP See .IR probe::signal.sys_tgkill (3stap) for details. .P .TP .B signal.sys_tgkill.return Sending kill signal to a thread group completed .IP See .IR probe::signal.sys_tgkill.return (3stap) for details. .P .TP .B signal.send_sig_queue Queuing a signal to a process .IP See .IR probe::signal.send_sig_queue (3stap) for details. .P .TP .B signal.send_sig_queue.return Queuing a signal to a process completed .IP See .IR probe::signal.send_sig_queue.return (3stap) for details. .P .TP .B signal.pending Examining pending signal .IP See .IR probe::signal.pending (3stap) for details. .P .TP .B signal.pending.return Examination of pending signal completed .IP See .IR probe::signal.pending.return (3stap) for details. .P .TP .B signal.handle Signal handler being invoked .IP See .IR probe::signal.handle (3stap) for details. .P .TP .B signal.handle.return Signal handler invocation completed .IP See .IR probe::signal.handle.return (3stap) for details. .P .TP .B signal.do_action Examining or changing a signal action .IP See .IR probe::signal.do_action (3stap) for details. .P .TP .B signal.do_action.return Examining or changing a signal action completed .IP See .IR probe::signal.do_action.return (3stap) for details. .P .TP .B signal.procmask Examining or changing blocked signals .IP See .IR probe::signal.procmask (3stap) for details. .P .TP .B signal.procmask.return Examining or changing blocked signals completed .IP See .IR probe::signal.procmask.return (3stap) for details. .P .TP .B signal.flush Flushing all pending signals for a task .IP See .IR probe::signal.flush (3stap) for details. .P .TP .B get_sa_flags Returns the numeric value of sa_flags .IP See .IR function::get_sa_flags (3stap) for details. .P .TP .B get_sa_handler Returns the numeric value of sa_handler .IP See .IR function::get_sa_handler (3stap) for details. .P .TP .B sigset_mask_str Returns the string representation of a sigset .IP See .IR function::sigset_mask_str (3stap) for details. .P .TP .B is_sig_blocked Returns 1 if the signal is currently blocked, or 0 if it is not .IP See .IR function::is_sig_blocked (3stap) for details. .P .TP .B sa_flags_str Returns the string representation of sa_flags .IP See .IR function::sa_flags_str (3stap) for details. .P .TP .B sa_handler Returns the string representation of an sa_handler .IP See .IR function::sa_handler (3stap) for details. .P .TP .B signal_str Returns the string representation of a signal number .IP See .IR function::signal_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::get_sa_flags (3stap), .BR .IR \%function::get_sa_handler (3stap), .BR .IR \%function::sigset_mask_str (3stap), .BR .IR \%function::is_sig_blocked (3stap), .BR .IR \%function::sa_flags_str (3stap), .BR .IR \%function::sa_handler (3stap), .BR .IR \%function::signal_str (3stap), .BR .IR \%probe::signal.send (3stap), .BR .IR \%probe::signal.send.return (3stap), .BR .IR \%probe::signal.checkperm (3stap), .BR .IR \%probe::signal.checkperm.return (3stap), .BR .IR \%probe::signal.wakeup (3stap), .BR .IR \%probe::signal.check_ignored (3stap), .BR .IR \%probe::signal.check_ignored.return (3stap), .BR .IR \%probe::signal.force_segv (3stap), .BR .IR \%probe::signal.force_segv.return (3stap), .BR .IR \%probe::signal.syskill (3stap), .BR .IR \%probe::signal.syskill.return (3stap), .BR .IR \%probe::signal.sys_tkill (3stap), .BR .IR \%probe::signal.systkill.return (3stap), .BR .IR \%probe::signal.sys_tgkill (3stap), .BR .IR \%probe::signal.sys_tgkill.return (3stap), .BR .IR \%probe::signal.send_sig_queue (3stap), .BR .IR \%probe::signal.send_sig_queue.return (3stap), .BR .IR \%probe::signal.pending (3stap), .BR .IR \%probe::signal.pending.return (3stap), .BR .IR \%probe::signal.handle (3stap), .BR .IR \%probe::signal.handle.return (3stap), .BR .IR \%probe::signal.do_action (3stap), .BR .IR \%probe::signal.do_action.return (3stap), .BR .IR \%probe::signal.procmask (3stap), .BR .IR \%probe::signal.procmask.return (3stap), .BR .IR \%probe::signal.flush (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::socket.3stap000066400000000000000000000122751356460210500272200ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SOCKET 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::socket \- systemtap socket tapset .SH DESCRIPTION This family of probe points is used to probe socket activities. .TP .P .TP .B socket.send Message sent on a socket. .IP See .IR probe::socket.send (3stap) for details. .P .TP .B socket.receive Message received on a socket. .IP See .IR probe::socket.receive (3stap) for details. .P .TP .B socket.sendmsg Message is currently being sent on a socket. .IP See .IR probe::socket.sendmsg (3stap) for details. .P .TP .B socket.sendmsg.return Return from socket.sendmsg. .IP See .IR probe::socket.sendmsg.return (3stap) for details. .P .TP .B socket.recvmsg Message being received on socket .IP See .IR probe::socket.recvmsg (3stap) for details. .P .TP .B socket.recvmsg.return Return from Message being received on socket .IP See .IR probe::socket.recvmsg.return (3stap) for details. .P .TP .B socket.aio_write Message send via sock_aio_write() .IP See .IR probe::socket.aio_write (3stap) for details. .P .TP .B socket.aio_write.return Conclusion of message send via sock_aio_write() .IP See .IR probe::socket.aio_write.return (3stap) for details. .P .TP .B socket.aio_read Receiving message via sock_aio_read() .IP See .IR probe::socket.aio_read (3stap) for details. .P .TP .B socket.aio_read.return Conclusion of message received via sock_aio_read() .IP See .IR probe::socket.aio_read.return (3stap) for details. .P .TP .B socket.write_iter Message send via sock_write_iter() .IP See .IR probe::socket.write_iter (3stap) for details. .P .TP .B socket.write_iter.return Conclusion of message send via sock_write_iter() .IP See .IR probe::socket.write_iter.return (3stap) for details. .P .TP .B socket.read_iter Receiving message via sock_read_iter() .IP See .IR probe::socket.read_iter (3stap) for details. .P .TP .B socket.read_iter.return Conclusion of message received via sock_read_iter() .IP See .IR probe::socket.read_iter.return (3stap) for details. .P .TP .B socket.writev Message sent via socket_writev() .IP See .IR probe::socket.writev (3stap) for details. .P .TP .B socket.writev.return Conclusion of message sent via socket_writev() .IP See .IR probe::socket.writev.return (3stap) for details. .P .TP .B socket.readv Receiving a message via sock_readv() .IP See .IR probe::socket.readv (3stap) for details. .P .TP .B socket.readv.return Conclusion of receiving a message via sock_readv() .IP See .IR probe::socket.readv.return (3stap) for details. .P .TP .B socket.create Creation of a socket .IP See .IR probe::socket.create (3stap) for details. .P .TP .B socket.create.return Return from Creation of a socket .IP See .IR probe::socket.create.return (3stap) for details. .P .TP .B socket.close Close a socket .IP See .IR probe::socket.close (3stap) for details. .P .TP .B socket.close.return Return from closing a socket .IP See .IR probe::socket.close.return (3stap) for details. .P .TP .B sock_prot_num2str Given a protocol number, return a string representation .IP See .IR function::sock_prot_num2str (3stap) for details. .P .TP .B sock_prot_str2num Given a protocol name (string), return the corresponding protocol number .IP See .IR function::sock_prot_str2num (3stap) for details. .P .TP .B sock_fam_num2str Given a protocol family number, return a string representation .IP See .IR function::sock_fam_num2str (3stap) for details. .P .TP .B sock_fam_str2num Given a protocol family name (string), return the corresponding protocol family number .IP See .IR function::sock_fam_str2num (3stap) for details. .P .TP .B sock_state_num2str Given a socket state number, return a string representation .IP See .IR function::sock_state_num2str (3stap) for details. .P .TP .B sock_state_str2num Given a socket state string, return the corresponding state number .IP See .IR function::sock_state_str2num (3stap) for details. .SH SEE ALSO .BR .IR \%function::sock_prot_num2str (3stap), .BR .IR \%function::sock_prot_str2num (3stap), .BR .IR \%function::sock_fam_num2str (3stap), .BR .IR \%function::sock_fam_str2num (3stap), .BR .IR \%function::sock_state_num2str (3stap), .BR .IR \%function::sock_state_str2num (3stap), .BR .IR \%probe::socket.send (3stap), .BR .IR \%probe::socket.receive (3stap), .BR .IR \%probe::socket.sendmsg (3stap), .BR .IR \%probe::socket.sendmsg.return (3stap), .BR .IR \%probe::socket.recvmsg (3stap), .BR .IR \%probe::socket.recvmsg.return (3stap), .BR .IR \%probe::socket.aio_write (3stap), .BR .IR \%probe::socket.aio_write.return (3stap), .BR .IR \%probe::socket.aio_read (3stap), .BR .IR \%probe::socket.aio_read.return (3stap), .BR .IR \%probe::socket.write_iter (3stap), .BR .IR \%probe::socket.write_iter.return (3stap), .BR .IR \%probe::socket.read_iter (3stap), .BR .IR \%probe::socket.read_iter.return (3stap), .BR .IR \%probe::socket.writev (3stap), .BR .IR \%probe::socket.writev.return (3stap), .BR .IR \%probe::socket.readv (3stap), .BR .IR \%probe::socket.readv.return (3stap), .BR .IR \%probe::socket.create (3stap), .BR .IR \%probe::socket.create.return (3stap), .BR .IR \%probe::socket.close (3stap), .BR .IR \%probe::socket.close.return (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::speculative.3stap000066400000000000000000000015501356460210500302460ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SPECULATIVE 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::speculative \- systemtap speculative tapset .SH DESCRIPTION .TP .P .TP .B speculation Allocate a new id for speculative output .IP See .IR function::speculation (3stap) for details. .P .TP .B speculate Store a string for possible output later .IP See .IR function::speculate (3stap) for details. .P .TP .B discard Discard all output related to a speculation buffer .IP See .IR function::discard (3stap) for details. .P .TP .B commit Write out all output related to a speculation buffer .IP See .IR function::commit (3stap) for details. .SH SEE ALSO .BR .IR \%function::speculation (3stap), .BR .IR \%function::speculate (3stap), .BR .IR \%function::discard (3stap), .BR .IR \%function::commit (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::stap_staticmarkers.3stap000066400000000000000000000112671356460210500316330ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STAP_STATICMARKERS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::stap_staticmarkers \- systemtap stap_staticmarkers tapset .SH DESCRIPTION .TP .P .TP .B stap.pass0 Starting stap pass0 (parsing command line arguments) .IP See .IR probe::stap.pass0 (3stap) for details. .P .TP .B stap.pass0.end Finished stap pass0 (parsing command line arguments) .IP See .IR probe::stap.pass0.end (3stap) for details. .P .TP .B stap.pass1a Starting stap pass1 (parsing user script) .IP See .IR probe::stap.pass1a (3stap) for details. .P .TP .B stap.pass1b Starting stap pass1 (parsing library scripts) .IP See .IR probe::stap.pass1b (3stap) for details. .P .TP .B stap.pass1.end Finished stap pass1 (parsing scripts) .IP See .IR probe::stap.pass1.end (3stap) for details. .P .TP .B stap.pass2 Starting stap pass2 (elaboration) .IP See .IR probe::stap.pass2 (3stap) for details. .P .TP .B stap.pass2.end Finished stap pass2 (elaboration) .IP See .IR probe::stap.pass2.end (3stap) for details. .P .TP .B stap.pass3 Starting stap pass3 (translation to C) .IP See .IR probe::stap.pass3 (3stap) for details. .P .TP .B stap.pass3.end Finished stap pass3 (translation to C) .IP See .IR probe::stap.pass3.end (3stap) for details. .P .TP .B stap.pass4 Starting stap pass4 (compile C code into kernel module) .IP See .IR probe::stap.pass4 (3stap) for details. .P .TP .B stap.pass4.end Finished stap pass4 (compile C code into kernel module) .IP See .IR probe::stap.pass4.end (3stap) for details. .P .TP .B stap.pass5 Starting stap pass5 (running the instrumentation) .IP See .IR probe::stap.pass5 (3stap) for details. .P .TP .B stap.pass5.end Finished stap pass5 (running the instrumentation) .IP See .IR probe::stap.pass5.end (3stap) for details. .P .TP .B stap.pass6 Starting stap pass6 (cleanup) .IP See .IR probe::stap.pass6 (3stap) for details. .P .TP .B stap.pass6.end Finished stap pass6 (cleanup) .IP See .IR probe::stap.pass6.end (3stap) for details. .P .TP .B stap.cache_clean Removing file from stap cache .IP See .IR probe::stap.cache_clean (3stap) for details. .P .TP .B stap.cache_add_mod Adding kernel instrumentation module to cache .IP See .IR probe::stap.cache_add_mod (3stap) for details. .P .TP .B stap.cache_add_src Adding C code translation to cache .IP See .IR probe::stap.cache_add_src (3stap) for details. .P .TP .B stap.cache_add_nss Add NSS (Network Security Services) information to cache .IP See .IR probe::stap.cache_add_nss (3stap) for details. .P .TP .B stap.cache_get Found item in stap cache .IP See .IR probe::stap.cache_get (3stap) for details. .P .TP .B stap.system Starting a command from stap .IP See .IR probe::stap.system (3stap) for details. .P .TP .B stap.system.spawn stap spawned new process .IP See .IR probe::stap.system.spawn (3stap) for details. .P .TP .B stap.system.return Finished a command from stap .IP See .IR probe::stap.system.return (3stap) for details. .P .TP .B staprun.insert_module Inserting SystemTap instrumentation module .IP See .IR probe::staprun.insert_module (3stap) for details. .P .TP .B staprun.remove_module Removing SystemTap instrumentation module .IP See .IR probe::staprun.remove_module (3stap) for details. .P .TP .B staprun.send_control_message Sending a control message .IP See .IR probe::staprun.send_control_message (3stap) for details. .P .TP .B stapio.receive_control_message Received a control message .IP See .IR probe::stapio.receive_control_message (3stap) for details. .SH SEE ALSO .BR .IR \%probe::stap.pass0 (3stap), .BR .IR \%probe::stap.pass0.end (3stap), .BR .IR \%probe::stap.pass1a (3stap), .BR .IR \%probe::stap.pass1b (3stap), .BR .IR \%probe::stap.pass1.end (3stap), .BR .IR \%probe::stap.pass2 (3stap), .BR .IR \%probe::stap.pass2.end (3stap), .BR .IR \%probe::stap.pass3 (3stap), .BR .IR \%probe::stap.pass3.end (3stap), .BR .IR \%probe::stap.pass4 (3stap), .BR .IR \%probe::stap.pass4.end (3stap), .BR .IR \%probe::stap.pass5 (3stap), .BR .IR \%probe::stap.pass5.end (3stap), .BR .IR \%probe::stap.pass6 (3stap), .BR .IR \%probe::stap.pass6.end (3stap), .BR .IR \%probe::stap.cache_clean (3stap), .BR .IR \%probe::stap.cache_add_mod (3stap), .BR .IR \%probe::stap.cache_add_src (3stap), .BR .IR \%probe::stap.cache_add_nss (3stap), .BR .IR \%probe::stap.cache_get (3stap), .BR .IR \%probe::stap.system (3stap), .BR .IR \%probe::stap.system.spawn (3stap), .BR .IR \%probe::stap.system.return (3stap), .BR .IR \%probe::staprun.insert_module (3stap), .BR .IR \%probe::staprun.remove_module (3stap), .BR .IR \%probe::staprun.send_control_message (3stap), .BR .IR \%probe::stapio.receive_control_message (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::stopwatch.3stap000066400000000000000000000026251356460210500277420ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STOPWATCH 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::stopwatch \- systemtap stopwatch tapset .SH DESCRIPTION .TP .P .TP .B delete_stopwatch Remove an existing stopwatch .IP See .IR function::delete_stopwatch (3stap) for details. .P .TP .B start_stopwatch Start a stopwatch .IP See .IR function::start_stopwatch (3stap) for details. .P .TP .B stop_stopwatch Stop a stopwatch .IP See .IR function::stop_stopwatch (3stap) for details. .P .TP .B read_stopwatch_ns Reads the time in nanoseconds for a stopwatch .IP See .IR function::read_stopwatch_ns (3stap) for details. .P .TP .B read_stopwatch_us Reads the time in microseconds for a stopwatch .IP See .IR function::read_stopwatch_us (3stap) for details. .P .TP .B read_stopwatch_ms Reads the time in milliseconds for a stopwatch .IP See .IR function::read_stopwatch_ms (3stap) for details. .P .TP .B read_stopwatch_s Reads the time in seconds for a stopwatch .IP See .IR function::read_stopwatch_s (3stap) for details. .SH SEE ALSO .BR .IR \%function::delete_stopwatch (3stap), .BR .IR \%function::start_stopwatch (3stap), .BR .IR \%function::stop_stopwatch (3stap), .BR .IR \%function::read_stopwatch_ns (3stap), .BR .IR \%function::read_stopwatch_us (3stap), .BR .IR \%function::read_stopwatch_ms (3stap), .BR .IR \%function::read_stopwatch_s (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::string.3stap000066400000000000000000000033031356460210500272260ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STRING 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::string \- systemtap string tapset .SH DESCRIPTION .TP .P .TP .B strlen Returns the length of a string .IP See .IR function::strlen (3stap) for details. .P .TP .B substr Returns a substring .IP See .IR function::substr (3stap) for details. .P .TP .B stringat Returns the char at a given position in the string .IP See .IR function::stringat (3stap) for details. .P .TP .B isinstr Returns whether a string is a substring of another string .IP See .IR function::isinstr (3stap) for details. .P .TP .B strpos Returns location of a substring within another string .IP See .IR function::strpos (3stap) for details. .P .TP .B text_str Escape any non-printable chars in a string .IP See .IR function::text_str (3stap) for details. .P .TP .B text_strn Escape any non-printable chars in a string .IP See .IR function::text_strn (3stap) for details. .P .TP .B - strtol Convert a string to a long .IP See .IR function::- strtol (3stap) for details. .P .TP .B isdigit Checks for a digit .IP See .IR function::isdigit (3stap) for details. .P .TP .B string_quoted Quotes a given string .IP See .IR function::string_quoted (3stap) for details. .SH SEE ALSO .BR .IR \%function::strlen (3stap), .BR .IR \%function::substr (3stap), .BR .IR \%function::stringat (3stap), .BR .IR \%function::isinstr (3stap), .BR .IR \%function::strpos (3stap), .BR .IR \%function::text_str (3stap), .BR .IR \%function::text_strn (3stap), .BR .IR \%function::- (3stap), .BR .IR \%function::strtol (3stap), .BR .IR \%function::isdigit (3stap), .BR .IR \%function::string_quoted (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::switchfile.3stap000066400000000000000000000006001356460210500300560ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SWITCHFILE 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::switchfile \- systemtap switchfile tapset .SH DESCRIPTION .TP .P .TP .B switch_file switch to the next output file .IP See .IR function::switch_file (3stap) for details. .SH SEE ALSO .BR .IR \%function::switch_file (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::syscall_any.3stap000066400000000000000000000010371356460210500302430ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SYSCALL_ANY 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::syscall_any \- systemtap syscall_any tapset .SH DESCRIPTION .TP .P .TP .B syscall_any Record entry into a syscall .IP See .IR probe::syscall_any (3stap) for details. .P .TP .B syscall_any.return Record exit from a syscall .IP See .IR probe::syscall_any.return (3stap) for details. .SH SEE ALSO .BR .IR \%probe::syscall_any (3stap), .BR .IR \%probe::syscall_any.return (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::syscalls.3stap000066400000000000000000000561411356460210500275650ustar00rootroot00000000000000." -*- nroff -*- .TH TAPSET::SYSCALLS 3stap "November 2019" "Systemtap Tapset Reference" .SH NAME tapset::syscalls \- systemtap syscall tapset .SH DESCRIPTION Following is an overview of available syscall probes and convenience variables they offer. By default, each syscall probe has name and argstr convenience variables, which are not included in the overview in order to keep it short. Non dwarf-based nd_syscall probes are supposed to have the same convenience variables. .TP .P .TP .P .TP .B syscall.accept addr_uaddr, addrlen_uaddr, sockfd .P .TP .B syscall.accept4 addr_uaddr, addrlen_uaddr, flags, flags_str, sockfd .P .TP .B syscall.access mode, mode_str, pathname .P .TP .B syscall.acct filename .P .TP .B syscall.add_key description_uaddr, payload_uaddr, plen, ringid, type_uaddr .P .TP .B syscall.adjtimex buf_str, buf_uaddr .P .TP .B syscall.alarm seconds .P .TP .B syscall.arch_prctl addr, code, code_str .P .TP .B syscall.bdflush data, data_str, func .P .TP .B syscall.bind addrlen, my_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.bpf attr_uaddr, cmd, cmd_str, size .P .TP .B syscall.brk brk .P .TP .B syscall.capget data_uaddr, header_uaddr .P .TP .B syscall.capset data_uaddr, header_uaddr .P .TP .B syscall.chdir path .P .TP .B syscall.chmod mode, path .P .TP .B syscall.chown group, owner, path .P .TP .B syscall.chown16 group, owner, path .P .TP .B syscall.chroot path .P .TP .B syscall.clock_adjtime clk_id, clk_id_str, tx_uaddr, tx_uaddr_str .P .TP .B syscall.clock_getres clk_id, clk_id_str, res_uaddr .P .TP .B syscall.clock_gettime clk_id, clk_id_str, tp_uaddr .P .TP .B syscall.clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.clock_settime clk_id, clk_id_str, tp_uaddr, tp_uaddr_str .P .TP .B syscall.clone child_tid_uaddr, clone_flags, parent_tid_uaddr, stack_start .P .TP .B syscall.close fd .P .TP .B syscall.compat_adjtimex buf_str, buf_uaddr .P .TP .B syscall.compat_clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_execve args, env_str, filename .P .TP .B syscall.compat_execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.compat_fadvise64 advice, advice_str, fd, len, offset .P .TP .B syscall.compat_fadvise64_64 advice, advice_str, fd, len, offset .P .TP .B syscall.compat_fallocate fd, len, mode, mode_str, offset .P .TP .B syscall.compat_ftruncate64 fd, length .P .TP .B syscall.compat_futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.compat_futimesat dirfd, dirfd_str, filename, filename_uaddr, tvp_str, tvp_uaddr .P .TP .B syscall.compat_getitimer value_uaddr, which .P .TP .B syscall.compat_lookup_dcookie buffer_uaddr, cookie, len .P .TP .B syscall.compat_nanosleep rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.compat_pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.compat_readahead count, fd, offset .P .TP .B syscall.compat_recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.compat_select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.compat_setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.compat_signalfd flags .P .TP .B syscall.compat_sys_msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.compat_sys_msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.compat_sys_msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.compat_sys_recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.compat_sys_semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.compat_sys_sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.compat_sys_shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.compat_sys_utimes filename, timeval, tvp_uaddr_str .P .TP .B syscall.compat_truncate64 length, path, path_uaddr .P .TP .B syscall.compat_utime actime, buf_uaddr, filename, filename_uaddr, modtime .P .TP .B syscall.compat_utimensat dfd, dfd_str, filename, filename_uaddr, flags, flags_str, tsp_str, tsp_uaddr .P .TP .B syscall.compat_vmsplice fd, flags, flags_str, iov, nr_segs .P .TP .B syscall.connect addrlen, serv_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.copy_file_range fd_in, fd_out, flags, len, off_in, off_out .P .TP .B syscall.creat mode, pathname .P .TP .B syscall.delete_module flags, flags_str, name_user .P .TP .B syscall.dup oldfd .P .TP .B syscall.dup2 flags, flags_str, newfd, oldfd .P .TP .B syscall.dup3 flags, flags_str, newfd, oldfd .P .TP .B syscall.epoll_create flags, size .P .TP .B syscall.epoll_ctl epfd, event_uaddr, fd, op, op_str .P .TP .B syscall.epoll_pwait epfd, events_uaddr, maxevents, sigmask_uaddr, sigsetsize, timeout .P .TP .B syscall.epoll_wait epfd, events_uaddr, maxevents, timeout .P .TP .B syscall.eventfd count, flags, flags_str .P .TP .B syscall.execve args, env_str, filename .P .TP .B syscall.execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.exit status .P .TP .B syscall.exit_group status .P .TP .B syscall.faccessat dirfd, dirfd_str, mode, mode_str, pathname .P .TP .B syscall.fadvise64 advice, advice_str, fd, len, offset .P .TP .B syscall.fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.fallocate fd, len, mode, mode_str, offset .P .TP .B syscall.fanotify_init event_f_flags, event_f_flags_str, flags, flags_str .P .TP .B syscall.fanotify_mark dirfd, dirfd_str, fanotify_fd, flags, flags_str, mask, mask_str, pathname .P .TP .B syscall.fchdir fd .P .TP .B syscall.fchmod fildes, mode .P .TP .B syscall.fchmodat dirfd, dirfd_str, mode, pathname .P .TP .B syscall.fchown fd, group, owner .P .TP .B syscall.fchown16 fd, group, owner .P .TP .B syscall.fchownat dirfd, dirfd_str, flags, flags_str, group, owner, pathname .P .TP .B syscall.fcntl arg, cmd, cmd_str, fd .P .TP .B syscall.fdatasync fd .P .TP .B syscall.fgetxattr filedes, name_str, size, value_uaddr .P .TP .B syscall.finit_module fd, flags, flags_str, uargs .P .TP .B syscall.flistxattr filedes, list_uaddr, size .P .TP .B syscall.flock fd, operation .P .TP .B syscall.fork .P .TP .B syscall.fremovexattr filedes, name_str, name_uaddr .P .TP .B syscall.fsetxattr filedes, flags, flags_str, name_str, name_uaddr, size, value_str, value_uaddr .P .TP .B syscall.fstat buf_uaddr, filedes .P .TP .B syscall.fstatat buf_uaddr, dirfd, dirfd_str, flags, flags_str, path .P .TP .B syscall.fstatfs buf_uaddr, fd .P .TP .B syscall.fstatfs64 buf_uaddr, fd, sz .P .TP .B syscall.fsync fd .P .TP .B syscall.ftruncate fd, length .P .TP .B syscall.ftruncate64 $id, $regs, fd, int, length, pt_regs* .P .TP .B syscall.futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.futimesat dirfd, dirfd_str, filename, filename_uaddr, tvp_str, tvp_uaddr .P .TP .B syscall.get_mempolicy addr, flags, flags_str, maxnode, nmask_uaddr, policy_uaddr .P .TP .B syscall.get_robust_list len_uaddr, list_head_uaddr, pid .P .TP .B syscall.get_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.getcpu cpu_uaddr, node_uaddr, tcache_uaddr .P .TP .B syscall.getcwd buf_uaddr, size .P .TP .B syscall.getdents count, dirp_uaddr, fd .P .TP .B syscall.getegid .P .TP .B syscall.geteuid .P .TP .B syscall.getgid .P .TP .B syscall.getgroups list_uaddr, size .P .TP .B syscall.getitimer value_uaddr, which .P .TP .B syscall.getpeername name_uaddr, namelen_uaddr, s .P .TP .B syscall.getpgid pid .P .TP .B syscall.getpgrp .P .TP .B syscall.getpid .P .TP .B syscall.getppid .P .TP .B syscall.getpriority which, who .P .TP .B syscall.getrandom buf, count, flags, flags_str .P .TP .B syscall.getresgid egid_uaddr, rgid_uaddr, sgid_uaddr .P .TP .B syscall.getresuid euid_uaddr, ruid_uaddr, suid_uaddr .P .TP .B syscall.getrlimit resource, rlim_uaddr .P .TP .B syscall.getrusage usage_uaddr, who, who_str .P .TP .B syscall.getsid pid .P .TP .B syscall.getsockname name_uaddr, namelen_uaddr, s .P .TP .B syscall.getsockopt fd, level, level_str, optlen_uaddr, optname, optname_str, optval_uaddr .P .TP .B syscall.gettid .P .TP .B syscall.gettimeofday tv_uaddr, tz_uaddr .P .TP .B syscall.getuid .P .TP .B syscall.getxattr name_str, path, size, value_uaddr .P .TP .B syscall.init_module len, uargs, umod_uaddr .P .TP .B syscall.inotify_add_watch fd, mask, mask_str, path, path_uaddr .P .TP .B syscall.inotify_init flags .P .TP .B syscall.inotify_rm_watch fd, wd .P .TP .B syscall.io_cancel ctx_id, iocb_uaddr, result_uaddr .P .TP .B syscall.io_destroy ctx .P .TP .B syscall.io_getevents ctx_id, events_uaddr, min_nr, nr, timeout_uaddr, timestr .P .TP .B syscall.io_setup ctxp_uaddr, maxevents .P .TP .B syscall.io_submit ctx_id, iocbpp_uaddr, nr .P .TP .B syscall.ioctl argp, fd, request .P .TP .B syscall.ioperm from, num, turn_on .P .TP .B syscall.iopl level .P .TP .B syscall.ioprio_get which, which_str, who .P .TP .B syscall.ioprio_set ioprio, ioprio_str, which, which_str, who .P .TP .B syscall.kcmp idx1, idx2, pid1, pid2, type, type_str .P .TP .B syscall.kexec_file_load cmdline, cmdline_len, flags, flags_str, initrd_fd, kernel_fd .P .TP .B syscall.kexec_load entry, flags, flags_str, nr_segments, segments_uaddr .P .TP .B syscall.keyctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.kill pid, sig, sig_name .P .TP .B syscall.lchown group, owner, path .P .TP .B syscall.lchown16 group, owner, path .P .TP .B syscall.lgetxattr name_str, path, size, value_uaddr .P .TP .B syscall.link newpath, oldpath .P .TP .B syscall.linkat flags, flags_str, newdirfd, newdirfd_str, newpath, olddirfd, olddirfd_str, oldpath .P .TP .B syscall.listen backlog, sockfd .P .TP .B syscall.listxattr list_uaddr, path, path_uaddr, size .P .TP .B syscall.llistxattr list_uaddr, path, path_uaddr, size .P .TP .B syscall.llseek fd, offset_high, offset_low, result_uaddr, whence, whence_str .P .TP .B syscall.lookup_dcookie buffer_uaddr, cookie, len .P .TP .B syscall.lremovexattr name_str, name_uaddr, path, path_uaddr .P .TP .B syscall.lseek fildes, offset, whence, whence_str .P .TP .B syscall.lsetxattr flags, flags_str, name_str, name_uaddr, path, path_uaddr, size, value_str, value_uaddr .P .TP .B syscall.lstat buf_uaddr, path .P .TP .B syscall.madvise advice, advice_str, length, start .P .TP .B syscall.mbind flags, flags_str, len, maxnode, mode, mode_str, nmask_uaddr, start .P .TP .B syscall.membarrier cmd, cmd_str, flags .P .TP .B syscall.memfd_create flags, flags_str, uname .P .TP .B syscall.migrate_pages maxnode, new_nodes, old_nodes, pid .P .TP .B syscall.mincore length, start, vec_uaddr .P .TP .B syscall.mkdir mode, pathname, pathname_uaddr .P .TP .B syscall.mkdirat dirfd, dirfd_str, mode, pathname .P .TP .B syscall.mknod dev, mode, mode_str, pathname .P .TP .B syscall.mknodat dev, dirfd, dirfd_str, mode, mode_str, pathname .P .TP .B syscall.mlock addr, len .P .TP .B syscall.mlock2 addr, flags, flags_str, len .P .TP .B syscall.mlockall flags, flags_str .P .TP .B syscall.mmap2 fd, flags, flags_str, length, pgoffset, prot, prot_str, start .P .TP .B syscall.modify_ldt bytecount, func, ptr_uaddr .P .TP .B syscall.mount data, filesystemtype, mountflags, mountflags_str, source, target .P .TP .B syscall.move_pages flags, flags_str, nodes, nr_pages, pages, pid, status .P .TP .B syscall.mprotect addr, len, prot, prot_str .P .TP .B syscall.mq_getsetattr mqdes, u_mqstat_uaddr, u_omqstat_uaddr .P .TP .B syscall.mq_notify mqdes, notification_uaddr .P .TP .B syscall.mq_open filename, mode, name_uaddr, oflag, oflag_str, u_attr_uaddr .P .TP .B syscall.mq_timedreceive abs_timeout_uaddr, mqdes, msg_len, msg_prio_uaddr, msg_ptr_uaddr .P .TP .B syscall.mq_timedsend abs_timeout_uaddr, mqdes, msg_len, msg_prio, msg_ptr_uaddr .P .TP .B syscall.mq_unlink u_name, u_name_uaddr .P .TP .B syscall.mremap flags, flags_str, new_address, new_size, old_address, old_size .P .TP .B syscall.msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.msgget key, key_str, msgflg, msgflg_str .P .TP .B syscall.msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.msync flags, flags_str, length, start .P .TP .B syscall.munlock addr, len .P .TP .B syscall.munlockall .P .TP .B syscall.munmap length, start .P .TP .B syscall.name_to_handle_at dfd, dfd_str, flags, flags_str, handle_uaddr, mnt_id_uaddr, pathname .P .TP .B syscall.nanosleep rem_uaddr, req_str, req_uaddr .P .TP .B syscall.ni_syscall .P .TP .B syscall.nice inc .P .TP .B syscall.open filename, flags, flags_str, mode .P .TP .B syscall.open_by_handle_at flags, flags_str, handle_uaddr, mount_dfd, mount_dfd_str .P .TP .B syscall.openat dfd, dfd_str, filename, flags, flags_str, mode .P .TP .B syscall.pause .P .TP .B syscall.perf_event_open attr_uaddr, cpu, flags, flags_str, group_fd, pid .P .TP .B syscall.personality persona .P .TP .B syscall.pipe fildes_uaddr, flag_str, flags, pipe0, pipe1 .P .TP .B syscall.pivot_root new_root_str, old_root_str .P .TP .B syscall.pkey_alloc flags, init_val, init_val_str .P .TP .B syscall.pkey_free pkey .P .TP .B syscall.pkey_mprotect addr, len, pkey, prot, prot_str .P .TP .B syscall.poll nfds, timeout, ufds_uaddr .P .TP .B syscall.ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.prctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.pread buf_uaddr, count, fd, offset .P .TP .B syscall.preadv count, fd, offset, vector_uaddr .P .TP .B syscall.preadv2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.prlimit64 new_rlim_str, new_rlim_uaddr, old_rlim_uaddr, pid, resource, resource_str .P .TP .B syscall.process_vm_readv flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.process_vm_writev flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.ptrace addr, data, pid, request .P .TP .B syscall.pwrite buf_str, buf_uaddr, count, fd, offset .P .TP .B syscall.pwrite32 buf_str, buf_uaddr, count, fd, offset .P .TP .B syscall.pwritev count, fd, offset, vector_uaddr .P .TP .B syscall.pwritev2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.quotactl addr_uaddr, cmd, cmd_str, id, special, special_str .P .TP .B syscall.read buf_uaddr, count, fd .P .TP .B syscall.readahead count, fd, offset .P .TP .B syscall.readdir count, dirent, fd .P .TP .B syscall.readlink buf_uaddr, bufsiz, path .P .TP .B syscall.readlinkat buf_uaddr, bufsiz, dfd, dfd_str, path .P .TP .B syscall.readv count, fd, vector_uaddr .P .TP .B syscall.reboot arg_uaddr, flag, flag_str, magic2, magic2_str, magic, magic_str .P .TP .B syscall.recv buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvfrom addr_uaddr, addrlen_uaddr, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.remap_file_pages flags, flags_str, pgoff, prot, prot_str, size, start .P .TP .B syscall.removexattr name_str, path .P .TP .B syscall.rename newpath, oldpath .P .TP .B syscall.renameat newdfd, newdfd_str, newname, newname_str, olddfd, olddfd_str, oldname, oldname_str .P .TP .B syscall.renameat2 flags, flags_str, newdfd, newdfd_str, newname, newname_str, olddfd, olddfd_str, oldname, oldname_str .P .TP .B syscall.request_key callout_info_uaddr, description_str, description_uaddr, destringid, type_str, type_uaddr .P .TP .B syscall.restart_syscall .P .TP .B syscall.rmdir pathname .P .TP .B syscall.rt_sigaction act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigpending set_uaddr, sigsetsize .P .TP .B syscall.rt_sigprocmask how, how_str, oldset_uaddr, set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigqueueinfo pid, sig, sig_name, siginfo_str, uinfo_uaddr .P .TP .B syscall.rt_sigreturn .P .TP .B syscall.rt_sigsuspend set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigtimedwait sigsetsize, uinfo_str, uinfo_uaddr, uthese_str, uthese_uaddr, uts_str, uts_uaddr .P .TP .B syscall.rt_tgsigqueueinfo sig, sig_str, tgid, tid, uinfo_str, uinfo_uaddr .P .TP .B syscall.sched_get_priority_max policy, policy_str .P .TP .B syscall.sched_get_priority_min policy, policy_str .P .TP .B syscall.sched_getaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_getattr flags, pid, sched_attr_str, sched_attr_uaddr, size .P .TP .B syscall.sched_getparam p_uaddr, pid .P .TP .B syscall.sched_getscheduler pid .P .TP .B syscall.sched_rr_get_interval pid, tp_uaddr .P .TP .B syscall.sched_setaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_setattr flags, pid, sched_attr_str, sched_attr_uaddr .P .TP .B syscall.sched_setparam p_uaddr, pid .P .TP .B syscall.sched_setscheduler p_uaddr, pid, policy, policy_str .P .TP .B syscall.sched_yield .P .TP .B syscall.seccomp flags, flags_str, op, op_str, uargs_uaddr .P .TP .B syscall.select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.semget key, key_str, nsems, semflg, semflg_str .P .TP .B syscall.semop nsops, semid, sops_uaddr .P .TP .B syscall.semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.send buf, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.sendfile count, in_fd, offset_uaddr, out_fd .P .TP .B syscall.sendmmsg flags, flags_str, mmsg_uaddr, s, vlen .P .TP .B syscall.sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.sendto buf, buf_uaddr, flags, flags_str, len, s, to_str, to_uaddr, tolen .P .TP .B syscall.set_mempolicy maxnode, mode, mode_str, nmask_uaddr .P .TP .B syscall.set_robust_list len, list_head_uaddr .P .TP .B syscall.set_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.set_tid_address tidptr_uaddr .P .TP .B syscall.setdomainname domainname_str, domainname_uaddr, len .P .TP .B syscall.setfsgid fsgid .P .TP .B syscall.setfsuid fsuid .P .TP .B syscall.setgid gid .P .TP .B syscall.setgroups list_uaddr, size .P .TP .B syscall.sethostname hostname_uaddr, len, name_str .P .TP .B syscall.setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.setns fd, nstype, nstype_str .P .TP .B syscall.setpgid pgid, pid .P .TP .B syscall.setpriority prio, which, which_str, who .P .TP .B syscall.setregid egid, rgid .P .TP .B syscall.setregid16 egid, rgid .P .TP .B syscall.setresgid egid, rgid, sgid .P .TP .B syscall.setresgid16 egid, rgid, sgid .P .TP .B syscall.setresuid euid, ruid, suid .P .TP .B syscall.setresuid16 euid, ruid, suid .P .TP .B syscall.setreuid euid, ruid .P .TP .B syscall.setreuid16 euid, ruid .P .TP .B syscall.setrlimit resource, resource_str, rlim_str, rlim_uaddr .P .TP .B syscall.setsid .P .TP .B syscall.setsockopt fd, level, level_str, optlen, optname, optname_str, optval_uaddr .P .TP .B syscall.settimeofday tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.settimeofday32 tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.setuid uid .P .TP .B syscall.setxattr flags, flags_str, name_str, name_uaddr, path, path_uaddr, size, value_str, value_uaddr .P .TP .B syscall.sgetmask .P .TP .B syscall.shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.shmdt shmaddr_uaddr .P .TP .B syscall.shmget key, shmflg, shmflg_str, size .P .TP .B syscall.shutdown how, how_str, s .P .TP .B syscall.sigaction $id, $regs, act_str, act_uaddr, int, oact_uaddr, pt_regs*, sig, sig_str .P .TP .B syscall.sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str .P .TP .B syscall.sigaltstack uoss_uaddr, uss_str, uss_uaddr .P .TP .B syscall.signal handler, handler_str, sig, sig_str .P .TP .B syscall.signalfd flags .P .TP .B syscall.sigpending set .P .TP .B syscall.sigprocmask how, how_str, oldset_uaddr, set_uaddr .P .TP .B syscall.sigreturn .P .TP .B syscall.sigsuspend mask, mask_str .P .TP .B syscall.socket family, family_str, protocol, protocol_str, type, type_str .P .TP .B syscall.socketpair family, family_str, protocol, protocol_str, sv_uaddr, type, type_str .P .TP .B syscall.splice fd_in, fd_out, flags, flags_str, len, off_in, off_out .P .TP .B syscall.ssetmask newmask, newmask_str .P .TP .B syscall.stat buf_uaddr, filename, filename_uaddr .P .TP .B syscall.statfs buf_uaddr, path .P .TP .B syscall.statfs64 buf_uaddr, path, sz .P .TP .B syscall.statx buf_uaddr, dfd, dfd_str, filename, filename_uaddr, flags, flags_str, mask, mask_str .P .TP .B syscall.stime t_uaddr .P .TP .B syscall.swapoff path, path_uaddr .P .TP .B syscall.swapon path, path_uaddr, swapflags, swapflags_str .P .TP .B syscall.symlink newpath, oldpath .P .TP .B syscall.symlinkat newdfd, newdfd_str, newname, newname_str, oldname, oldname_str .P .TP .B syscall.sync .P .TP .B syscall.sync_file_range fd, flags, flags_str, nbytes, offset .P .TP .B syscall.syncfs fd .P .TP .B syscall.sysctl args .P .TP .B syscall.sysfs arg1, arg2, option .P .TP .B syscall.sysinfo info_str, info_uaddr .P .TP .B syscall.syslog bufp_uaddr, len, type .P .TP .B syscall.tee fdin, fdout, flags, len .P .TP .B syscall.tgkill pid, sig, sig_str, tgid .P .TP .B syscall.time t_uaddr .P .TP .B syscall.timer_create clockid, clockid_str, evp_uaddr, timerid_uaddr .P .TP .B syscall.timer_delete timerid .P .TP .B syscall.timer_getoverrun timerid .P .TP .B syscall.timer_gettime timerid, value_uaddr .P .TP .B syscall.timer_settime flags, ovalue_uaddr, timerid, value_str, value_uaddr .P .TP .B syscall.timerfd_create clockid, clockid_str, flags, flags_str .P .TP .B syscall.timerfd_gettime fd, value_uaddr .P .TP .B syscall.timerfd_settime fd, flags, flags_str, ovalue_uaddr, value_str, value_uaddr .P .TP .B syscall.times buf_str, buf_uaddr .P .TP .B syscall.tkill pid, sig, sig_str .P .TP .B syscall.truncate length, path, path_uaddr .P .TP .B syscall.umask mask .P .TP .B syscall.umount flags, flags_str, target .P .TP .B syscall.uname name_uaddr .P .TP .B syscall.unlink pathname, pathname_uaddr .P .TP .B syscall.unlinkat dfd, dfd_str, flag, flag_str, pathname, pathname_str .P .TP .B syscall.unshare unshare_flags, unshare_flags_str .P .TP .B syscall.uselib $id, $regs, int, library, library_uaddr, pt_regs* .P .TP .B syscall.userfaultfd flags, flags_str .P .TP .B syscall.ustat dev, ubuf_uaddr .P .TP .B syscall.ustat32 dev, ubuf_uaddr .P .TP .B syscall.utime actime, buf_uaddr, filename, filename_uaddr, modtime .P .TP .B syscall.utimensat dfd, dfd_str, filename, filename_uaddr, flags, flags_str, tsp_str, tsp_uaddr .P .TP .B syscall.utimes filename, filename_uaddr, tvp_uaddr, tvp_uaddr_str .P .TP .B syscall.vfork .P .TP .B syscall.vhangup .P .TP .B syscall.vmsplice fd, flags, flags_str, iov, nr_segs .P .TP .B syscall.wait4 options, options_str, pid, rusage_uaddr, status_uaddr .P .TP .B syscall.waitid infop_uaddr, options, options_str, pid, rusage_uaddr, which, which_str .P .TP .B syscall.waitpid options, options_str, pid, status_uaddr .P .TP .B syscall.write buf_str, buf_uaddr, count, fd .P .TP .B syscall.writev count, fd, vector_uaddr .SH SEE ALSO .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::system.3stap000066400000000000000000000005441356460210500272500ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SYSTEM 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::system \- systemtap system tapset .SH DESCRIPTION .TP .P .TP .B system Issue a command to the system .IP See .IR function::system (3stap) for details. .SH SEE ALSO .BR .IR \%function::system (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::target_set.3stap000066400000000000000000000010771356460210500300670ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TARGET_SET 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::target_set \- systemtap target_set tapset .SH DESCRIPTION .TP .P .TP .B target_set_pid Does pid descend from target process? .IP See .IR function::target_set_pid (3stap) for details. .P .TP .B target_set_report Print a report about the target set .IP See .IR function::target_set_report (3stap) for details. .SH SEE ALSO .BR .IR \%function::target_set_pid (3stap), .BR .IR \%function::target_set_report (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::task.3stap000066400000000000000000000074231356460210500266710ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::task \- systemtap task tapset .SH DESCRIPTION .TP .P .TP .B task_current The current task_struct of the current task .IP See .IR function::task_current (3stap) for details. .P .TP .B task_parent The task_struct of the parent task .IP See .IR function::task_parent (3stap) for details. .P .TP .B task_state The state of the task .IP See .IR function::task_state (3stap) for details. .P .TP .B task_execname The name of the task .IP See .IR function::task_execname (3stap) for details. .P .TP .B task_pid The process identifier of the task .IP See .IR function::task_pid (3stap) for details. .P .TP .B task_ns_pid The process identifier of the task .IP See .IR function::task_ns_pid (3stap) for details. .P .TP .B pid2task The task_struct of the given process identifier .IP See .IR function::pid2task (3stap) for details. .P .TP .B pid2execname The name of the given process identifier .IP See .IR function::pid2execname (3stap) for details. .P .TP .B task_tid The thread identifier of the task .IP See .IR function::task_tid (3stap) for details. .P .TP .B task_ns_tid The thread identifier of the task as seen in a namespace .IP See .IR function::task_ns_tid (3stap) for details. .P .TP .B task_gid The group identifier of the task .IP See .IR function::task_gid (3stap) for details. .P .TP .B task_ns_gid The group identifier of the task as seen in a namespace .IP See .IR function::task_ns_gid (3stap) for details. .P .TP .B task_egid The effective group identifier of the task .IP See .IR function::task_egid (3stap) for details. .P .TP .B task_ns_egid The effective group identifier of the task .IP See .IR function::task_ns_egid (3stap) for details. .P .TP .B task_uid The user identifier of the task .IP See .IR function::task_uid (3stap) for details. .P .TP .B task_ns_uid The user identifier of the task .IP See .IR function::task_ns_uid (3stap) for details. .P .TP .B task_euid The effective user identifier of the task .IP See .IR function::task_euid (3stap) for details. .P .TP .B task_ns_euid The effective user identifier of the task .IP See .IR function::task_ns_euid (3stap) for details. .P .TP .B task_prio The priority value of the task .IP See .IR function::task_prio (3stap) for details. .P .TP .B task_nice The nice value of the task .IP See .IR function::task_nice (3stap) for details. .P .TP .B task_cpu The scheduled cpu of the task .IP See .IR function::task_cpu (3stap) for details. .P .TP .B task_open_file_handles The number of open files of the task .IP See .IR function::task_open_file_handles (3stap) for details. .P .TP .B task_max_file_handles The max number of open files for the task .IP See .IR function::task_max_file_handles (3stap) for details. .SH SEE ALSO .BR .IR \%function::task_current (3stap), .BR .IR \%function::task_parent (3stap), .BR .IR \%function::task_state (3stap), .BR .IR \%function::task_execname (3stap), .BR .IR \%function::task_pid (3stap), .BR .IR \%function::task_ns_pid (3stap), .BR .IR \%function::pid2task (3stap), .BR .IR \%function::pid2execname (3stap), .BR .IR \%function::task_tid (3stap), .BR .IR \%function::task_ns_tid (3stap), .BR .IR \%function::task_gid (3stap), .BR .IR \%function::task_ns_gid (3stap), .BR .IR \%function::task_egid (3stap), .BR .IR \%function::task_ns_egid (3stap), .BR .IR \%function::task_uid (3stap), .BR .IR \%function::task_ns_uid (3stap), .BR .IR \%function::task_euid (3stap), .BR .IR \%function::task_ns_euid (3stap), .BR .IR \%function::task_prio (3stap), .BR .IR \%function::task_nice (3stap), .BR .IR \%function::task_cpu (3stap), .BR .IR \%function::task_open_file_handles (3stap), .BR .IR \%function::task_max_file_handles (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::task_ancestry.3stap000066400000000000000000000006171356460210500305770ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK_ANCESTRY 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::task_ancestry \- systemtap task_ancestry tapset .SH DESCRIPTION .TP .P .TP .B task_ancestry The ancestry of the given task .IP See .IR function::task_ancestry (3stap) for details. .SH SEE ALSO .BR .IR \%function::task_ancestry (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::task_time.3stap000066400000000000000000000055501356460210500277060ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK_TIME 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::task_time \- systemtap task_time tapset .SH DESCRIPTION Task time query and utility functions provide information about the time resource usage of the current task. These functions provide information about the user time and system time of the current task. And provide utility functions to turn the reported times into miliseconds and create human readable string representations of task time used. The reported times are approximates and should be used for "coarse grained" measurements only. The reported user and system time are only for the current task, not for the process as a whole nor of any time spend by children of the current task. .TP .P .TP .B task_utime User time of the task .IP See .IR function::task_utime (3stap) for details. .P .TP .B task_utime User time of the task .IP See .IR function::task_utime (3stap) for details. .P .TP .B task_stime System time of the task .IP See .IR function::task_stime (3stap) for details. .P .TP .B task_stime System time of the task .IP See .IR function::task_stime (3stap) for details. .P .TP .B task_start_time Start time of the given task .IP See .IR function::task_start_time (3stap) for details. .P .TP .B cputime_to_msecs Translates the given cputime into milliseconds .IP See .IR function::cputime_to_msecs (3stap) for details. .P .TP .B cputime_to_usecs Translates the given cputime into microseconds .IP See .IR function::cputime_to_usecs (3stap) for details. .P .TP .B msecs_to_string Human readable string for given milliseconds .IP See .IR function::msecs_to_string (3stap) for details. .P .TP .B usecs_to_string Human readable string for given microseconds .IP See .IR function::usecs_to_string (3stap) for details. .P .TP .B nsecs_to_string Human readable string for given nanoseconds .IP See .IR function::nsecs_to_string (3stap) for details. .P .TP .B cputime_to_string Human readable string for given cputime .IP See .IR function::cputime_to_string (3stap) for details. .P .TP .B task_time_string Human readable string of task time usage .IP See .IR function::task_time_string (3stap) for details. .P .TP .B task_time_string_tid Human readable string of task time usage .IP See .IR function::task_time_string_tid (3stap) for details. .SH SEE ALSO .BR .IR \%function::task_utime (3stap), .BR .IR \%function::task_stime (3stap), .BR .IR \%function::task_start_time (3stap), .BR .IR \%function::cputime_to_msecs (3stap), .BR .IR \%function::cputime_to_usecs (3stap), .BR .IR \%function::msecs_to_string (3stap), .BR .IR \%function::usecs_to_string (3stap), .BR .IR \%function::nsecs_to_string (3stap), .BR .IR \%function::cputime_to_string (3stap), .BR .IR \%function::task_time_string (3stap), .BR .IR \%function::task_time_string_tid (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcp.3stap000066400000000000000000000032531356460210500265120ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCP 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::tcp \- systemtap tcp tapset .SH DESCRIPTION This family of probe points is used to probe events that occur in the TCP layer, .TP .P .TP .B tcp.sendmsg Sending a tcp message .IP See .IR probe::tcp.sendmsg (3stap) for details. .P .TP .B tcp.sendmsg.return Sending TCP message is done .IP See .IR probe::tcp.sendmsg.return (3stap) for details. .P .TP .B tcp.recvmsg Receiving TCP message .IP See .IR probe::tcp.recvmsg (3stap) for details. .P .TP .B tcp.recvmsg.return Receiving TCP message complete .IP See .IR probe::tcp.recvmsg.return (3stap) for details. .P .TP .B tcp.disconnect TCP socket disconnection .IP See .IR probe::tcp.disconnect (3stap) for details. .P .TP .B tcp.disconnect.return TCP socket disconnection complete .IP See .IR probe::tcp.disconnect.return (3stap) for details. .P .TP .B tcp.setsockopt Call to setsockopt() .IP See .IR probe::tcp.setsockopt (3stap) for details. .P .TP .B tcp.setsockopt.return Return from setsockopt() .IP See .IR probe::tcp.setsockopt.return (3stap) for details. .P .TP .B tcp.receive Called when a TCP packet is received .IP See .IR probe::tcp.receive (3stap) for details. .SH SEE ALSO .BR .IR \%probe::tcp.sendmsg (3stap), .BR .IR \%probe::tcp.sendmsg.return (3stap), .BR .IR \%probe::tcp.recvmsg (3stap), .BR .IR \%probe::tcp.recvmsg.return (3stap), .BR .IR \%probe::tcp.disconnect (3stap), .BR .IR \%probe::tcp.disconnect.return (3stap), .BR .IR \%probe::tcp.setsockopt (3stap), .BR .IR \%probe::tcp.setsockopt.return (3stap), .BR .IR \%probe::tcp.receive (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcpmib-filter-default.3stap000066400000000000000000000007001356460210500321010ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCPMIB-FILTER-DEFAULT 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::tcpmib-filter-default \- systemtap tcpmib-filter-default tapset .SH DESCRIPTION .TP .P .TP .B tcpmib_filter_key Default filter function for tcpmib.* probes .IP See .IR function::tcpmib_filter_key (3stap) for details. .SH SEE ALSO .BR .IR \%function::tcpmib_filter_key (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcpmib.3stap000066400000000000000000000047511356460210500272060ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCPMIB 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::tcpmib \- systemtap tcpmib tapset .SH DESCRIPTION .TP .P .TP .B tcpmib_get_state Get a socket's state .IP See .IR function::tcpmib_get_state (3stap) for details. .P .TP .B tcpmib_local_addr Get the source address .IP See .IR function::tcpmib_local_addr (3stap) for details. .P .TP .B tcpmib_remote_addr Get the remote address .IP See .IR function::tcpmib_remote_addr (3stap) for details. .P .TP .B tcpmib_local_port Get the local port .IP See .IR function::tcpmib_local_port (3stap) for details. .P .TP .B tcpmib_remote_port Get the remote port .IP See .IR function::tcpmib_remote_port (3stap) for details. .P .TP .B tcpmib.ActiveOpens Count an active opening of a socket .IP See .IR probe::tcpmib.ActiveOpens (3stap) for details. .P .TP .B tcpmib.AttemptFails Count a failed attempt to open a socket .IP See .IR probe::tcpmib.AttemptFails (3stap) for details. .P .TP .B tcpmib.CurrEstab Update the count of open sockets .IP See .IR probe::tcpmib.CurrEstab (3stap) for details. .P .TP .B tcpmib.EstabResets Count the reset of a socket .IP See .IR probe::tcpmib.EstabResets (3stap) for details. .P .TP .B tcpmib.InSegs Count an incoming tcp segment .IP See .IR probe::tcpmib.InSegs (3stap) for details. .P .TP .B tcpmib.OutRsts Count the sending of a reset packet .IP See .IR probe::tcpmib.OutRsts (3stap) for details. .P .TP .B tcpmib.OutSegs Count the sending of a TCP segment .IP See .IR probe::tcpmib.OutSegs (3stap) for details. .P .TP .B tcpmib.PassiveOpens Count the passive creation of a socket .IP See .IR probe::tcpmib.PassiveOpens (3stap) for details. .P .TP .B tcpmib.RetransSegs Count the retransmission of a TCP segment .IP See .IR probe::tcpmib.RetransSegs (3stap) for details. .SH SEE ALSO .BR .IR \%function::tcpmib_get_state (3stap), .BR .IR \%function::tcpmib_local_addr (3stap), .BR .IR \%function::tcpmib_remote_addr (3stap), .BR .IR \%function::tcpmib_local_port (3stap), .BR .IR \%function::tcpmib_remote_port (3stap), .BR .IR \%probe::tcpmib.ActiveOpens (3stap), .BR .IR \%probe::tcpmib.AttemptFails (3stap), .BR .IR \%probe::tcpmib.CurrEstab (3stap), .BR .IR \%probe::tcpmib.EstabResets (3stap), .BR .IR \%probe::tcpmib.InSegs (3stap), .BR .IR \%probe::tcpmib.OutRsts (3stap), .BR .IR \%probe::tcpmib.OutSegs (3stap), .BR .IR \%probe::tcpmib.PassiveOpens (3stap), .BR .IR \%probe::tcpmib.RetransSegs (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp.3stap000066400000000000000000000015331356460210500277260ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::timestamp \- systemtap timestamp tapset .SH DESCRIPTION Each timestamp function returns a value to indicate when a function is executed. These returned values can then be used to indicate when an event occurred, provide an ordering for events, or compute the amount of time elapsed between two time stamps. .TP .P .TP .B get_cycles Processor cycle count .IP See .IR function::get_cycles (3stap) for details. .P .TP .B jiffies Kernel jiffies count .IP See .IR function::jiffies (3stap) for details. .P .TP .B HZ Kernel HZ .IP See .IR function::HZ (3stap) for details. .SH SEE ALSO .BR .IR \%function::get_cycles (3stap), .BR .IR \%function::jiffies (3stap), .BR .IR \%function::HZ (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp_gtod.3stap000066400000000000000000000016371356460210500307500ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP_GTOD 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::timestamp_gtod \- systemtap timestamp_gtod tapset .SH DESCRIPTION .TP .P .TP .B gettimeofday_ns Number of nanoseconds since UNIX epoch .IP See .IR function::gettimeofday_ns (3stap) for details. .P .TP .B gettimeofday_us Number of microseconds since UNIX epoch .IP See .IR function::gettimeofday_us (3stap) for details. .P .TP .B gettimeofday_ms Number of milliseconds since UNIX epoch .IP See .IR function::gettimeofday_ms (3stap) for details. .P .TP .B gettimeofday_s Number of seconds since UNIX epoch .IP See .IR function::gettimeofday_s (3stap) for details. .SH SEE ALSO .BR .IR \%function::gettimeofday_ns (3stap), .BR .IR \%function::gettimeofday_us (3stap), .BR .IR \%function::gettimeofday_ms (3stap), .BR .IR \%function::gettimeofday_s (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp_monotonic.3stap000066400000000000000000000034061356460210500320140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP_MONOTONIC 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::timestamp_monotonic \- systemtap timestamp_monotonic tapset .SH DESCRIPTION .TP .P .TP .B cpu_clock_ns Number of nanoseconds on the given cpu's clock .IP See .IR function::cpu_clock_ns (3stap) for details. .P .TP .B cpu_clock_us Number of microseconds on the given cpu's clock .IP See .IR function::cpu_clock_us (3stap) for details. .P .TP .B cpu_clock_ms Number of milliseconds on the given cpu's clock .IP See .IR function::cpu_clock_ms (3stap) for details. .P .TP .B cpu_clock_s Number of seconds on the given cpu's clock .IP See .IR function::cpu_clock_s (3stap) for details. .P .TP .B local_clock_ns Number of nanoseconds on the local cpu's clock .IP See .IR function::local_clock_ns (3stap) for details. .P .TP .B local_clock_us Number of microseconds on the local cpu's clock .IP See .IR function::local_clock_us (3stap) for details. .P .TP .B local_clock_ms Number of milliseconds on the local cpu's clock .IP See .IR function::local_clock_ms (3stap) for details. .P .TP .B local_clock_s Number of seconds on the local cpu's clock .IP See .IR function::local_clock_s (3stap) for details. .P .TP .B ktime_get_ns Number of nanoseconds since boot .IP See .IR function::ktime_get_ns (3stap) for details. .SH SEE ALSO .BR .IR \%function::cpu_clock_ns (3stap), .BR .IR \%function::cpu_clock_us (3stap), .BR .IR \%function::cpu_clock_ms (3stap), .BR .IR \%function::cpu_clock_s (3stap), .BR .IR \%function::local_clock_ns (3stap), .BR .IR \%function::local_clock_us (3stap), .BR .IR \%function::local_clock_ms (3stap), .BR .IR \%function::local_clock_s (3stap), .BR .IR \%function::ktime_get_ns (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::tokenize.3stap000066400000000000000000000007641356460210500275600ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TOKENIZE 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::tokenize \- systemtap tokenize tapset .SH DESCRIPTION .TP .P .TP .B tokenize Return the next non-empty token in a string .IP See .IR function::tokenize (3stap) for details. .P .TP .B tokenize Return the next non-empty token in a string .IP See .IR function::tokenize (3stap) for details. .SH SEE ALSO .BR .IR \%function::tokenize (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::tty.3stap000066400000000000000000000034651356460210500265510ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TTY 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::tty \- systemtap tty tapset .SH DESCRIPTION .TP .P .TP .B tty.open Called when a tty is opened .IP See .IR probe::tty.open (3stap) for details. .P .TP .B tty.release Called when the tty is closed .IP See .IR probe::tty.release (3stap) for details. .P .TP .B tty.resize Called when a terminal resize happens .IP See .IR probe::tty.resize (3stap) for details. .P .TP .B tty.ioctl called when a ioctl is request to the tty .IP See .IR probe::tty.ioctl (3stap) for details. .P .TP .B tty.init Called when a tty is being initalized .IP See .IR probe::tty.init (3stap) for details. .P .TP .B tty.register Called when a tty device is registred .IP See .IR probe::tty.register (3stap) for details. .P .TP .B tty.unregister Called when a tty device is being unregistered .IP See .IR probe::tty.unregister (3stap) for details. .P .TP .B tty.poll Called when a tty device is being polled .IP See .IR probe::tty.poll (3stap) for details. .P .TP .B tty.receive called when a tty receives a message .IP See .IR probe::tty.receive (3stap) for details. .P .TP .B tty.write write to the tty line .IP See .IR probe::tty.write (3stap) for details. .P .TP .B tty.read called when a tty line will be read .IP See .IR probe::tty.read (3stap) for details. .SH SEE ALSO .BR .IR \%probe::tty.open (3stap), .BR .IR \%probe::tty.release (3stap), .BR .IR \%probe::tty.resize (3stap), .BR .IR \%probe::tty.ioctl (3stap), .BR .IR \%probe::tty.init (3stap), .BR .IR \%probe::tty.register (3stap), .BR .IR \%probe::tty.unregister (3stap), .BR .IR \%probe::tty.poll (3stap), .BR .IR \%probe::tty.receive (3stap), .BR .IR \%probe::tty.write (3stap), .BR .IR \%probe::tty.read (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::tzinfo.3stap000066400000000000000000000012751356460210500272370ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TZINFO 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::tzinfo \- systemtap tzinfo tapset .SH DESCRIPTION .TP .P .TP .B tz_gmtoff Return local time zone offset .IP See .IR function::tz_gmtoff (3stap) for details. .P .TP .B tz_name Return local time zone name .IP See .IR function::tz_name (3stap) for details. .P .TP .B tz_ctime Convert seconds since epoch into human readable date/time string, with local time zone .IP See .IR function::tz_ctime (3stap) for details. .SH SEE ALSO .BR .IR \%function::tz_gmtoff (3stap), .BR .IR \%function::tz_name (3stap), .BR .IR \%function::tz_ctime (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext-symbols.3stap000066400000000000000000000041201356460210500312550ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT-SYMBOLS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ucontext-symbols \- systemtap ucontext-symbols tapset .SH DESCRIPTION User context symbol functions provide additional information about addresses from an application. These functions can provide information about the user space map (library) that the event occurred or the function symbol of an address. .TP .P .TP .B ustack Return address at given depth of user stack backtrace .IP See .IR function::ustack (3stap) for details. .P .TP .B usymname Return the symbol of an address in the current task. .IP See .IR function::usymname (3stap) for details. .P .TP .B usymdata Return the symbol and module offset of an address. .IP See .IR function::usymdata (3stap) for details. .P .TP .B print_ustack Print out stack for the current task from string. .IP See .IR function::print_ustack (3stap) for details. .P .TP .B print_usyms Print out user stack from string .IP See .IR function::print_usyms (3stap) for details. .P .TP .B sprint_ustack Return stack for the current task from string. .IP See .IR function::sprint_ustack (3stap) for details. .P .TP .B sprint_usyms Return stack for user addresses from string .IP See .IR function::sprint_usyms (3stap) for details. .P .TP .B usymfileline Return the file name and line number of an address. .IP See .IR function::usymfileline (3stap) for details. .P .TP .B usymfile Return the file name of a given address. .IP See .IR function::usymfile (3stap) for details. .P .TP .B usymline Return the line number of an address. .IP See .IR function::usymline (3stap) for details. .SH SEE ALSO .BR .IR \%function::ustack (3stap), .BR .IR \%function::usymname (3stap), .BR .IR \%function::usymdata (3stap), .BR .IR \%function::print_ustack (3stap), .BR .IR \%function::print_usyms (3stap), .BR .IR \%function::sprint_ustack (3stap), .BR .IR \%function::sprint_usyms (3stap), .BR .IR \%function::usymfileline (3stap), .BR .IR \%function::usymfile (3stap), .BR .IR \%function::usymline (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext-unwind.3stap000066400000000000000000000025041356460210500310750ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT-UNWIND 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ucontext-unwind \- systemtap ucontext-unwind tapset .SH DESCRIPTION .TP .P .TP .B print_ubacktrace Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace (3stap) for details. .P .TP .B print_ubacktrace Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace (3stap) for details. .P .TP .B sprint_ubacktrace Return stack back trace for current user-space task as string. .IP See .IR function::sprint_ubacktrace (3stap) for details. .P .TP .B print_ubacktrace_fileline Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace_fileline (3stap) for details. .P .TP .B print_ubacktrace Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace (3stap) for details. .P .TP .B ubacktrace Hex backtrace of current user-space task stack. .IP See .IR function::ubacktrace (3stap) for details. .SH SEE ALSO .BR .IR \%function::print_ubacktrace (3stap), .BR .IR \%function::sprint_ubacktrace (3stap), .BR .IR \%function::print_ubacktrace_fileline (3stap), .BR .IR \%function::print_ubacktrace (3stap), .BR .IR \%function::ubacktrace (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext.3stap000066400000000000000000000010371356460210500275730ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::ucontext \- systemtap ucontext tapset .SH DESCRIPTION .TP .P .TP .B umodname Returns the (short) name of the user module. .IP See .IR function::umodname (3stap) for details. .P .TP .B ucallers Return first n elements of user stack backtrace .IP See .IR function::ucallers (3stap) for details. .SH SEE ALSO .BR .IR \%function::umodname (3stap), .BR .IR \%function::ucallers (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::uconversions-guru.3stap000066400000000000000000000026231356460210500314410ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONVERSIONS-GURU 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::uconversions-guru \- systemtap uconversions-guru tapset .SH DESCRIPTION .TP .P .TP .B set_user_string Writes a string to user memory .IP See .IR function::set_user_string (3stap) for details. .P .TP .B set_user_string_n Writes a string of given length to user memory .IP See .IR function::set_user_string_n (3stap) for details. .P .TP .B set_user_long Writes a long value to user memory .IP See .IR function::set_user_long (3stap) for details. .P .TP .B set_user_int Writes an int value to user memory .IP See .IR function::set_user_int (3stap) for details. .P .TP .B set_user_short Writes a short value to user memory .IP See .IR function::set_user_short (3stap) for details. .P .TP .B set_user_char Writes a char value to user memory .IP See .IR function::set_user_char (3stap) for details. .P .TP .B set_user_pointer Writes a pointer value to user memory. .IP See .IR function::set_user_pointer (3stap) for details. .SH SEE ALSO .BR .IR \%function::set_user_string (3stap), .BR .IR \%function::set_user_string_n (3stap), .BR .IR \%function::set_user_long (3stap), .BR .IR \%function::set_user_int (3stap), .BR .IR \%function::set_user_short (3stap), .BR .IR \%function::set_user_char (3stap), .BR .IR \%function::set_user_pointer (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::uconversions.3stap000066400000000000000000000226201356460210500304600ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONVERSIONS 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::uconversions \- systemtap uconversions tapset .SH DESCRIPTION .TP .P .TP .B user_string Retrieves string from user space .IP See .IR function::user_string (3stap) for details. .P .TP .B user_string Retrieves string from user space with alternative error string .IP See .IR function::user_string (3stap) for details. .P .TP .B user_string_warn Retrieves string from user space .IP See .IR function::user_string_warn (3stap) for details. .P .TP .B user_string_warn Retrieves string from user space with alternative warning string .IP See .IR function::user_string_warn (3stap) for details. .P .TP .B user_string_quoted Retrieves and quotes string from user space .IP See .IR function::user_string_quoted (3stap) for details. .P .TP .B user_string_n Retrieves string of given length from user space .IP See .IR function::user_string_n (3stap) for details. .P .TP .B user_string_n Retrieves string of given length from user space .IP See .IR function::user_string_n (3stap) for details. .P .TP .B user_string_n_warn Retrieves string from user space .IP See .IR function::user_string_n_warn (3stap) for details. .P .TP .B user_string_n_warn Retrieves string from user space with alternative warning string .IP See .IR function::user_string_n_warn (3stap) for details. .P .TP .B user_string_n_quoted Retrieves and quotes string from user space .IP See .IR function::user_string_n_quoted (3stap) for details. .P .TP .B user_string_n_quoted Retrieves and quotes string from user space .IP See .IR function::user_string_n_quoted (3stap) for details. .P .TP .B user_string_utf32 Retrieves UTF-32 string from user memory .IP See .IR function::user_string_utf32 (3stap) for details. .P .TP .B user_string_utf32 Retrieves UTF-32 string from user memory with alternative error string .IP See .IR function::user_string_utf32 (3stap) for details. .P .TP .B user_string_quoted_utf32 Quote given user UTF-32 string. .IP See .IR function::user_string_quoted_utf32 (3stap) for details. .P .TP .B user_string_utf16 Retrieves UTF-16 string from user memory .IP See .IR function::user_string_utf16 (3stap) for details. .P .TP .B user_string_utf16 Retrieves UTF-16 string from user memory with alternative error string .IP See .IR function::user_string_utf16 (3stap) for details. .P .TP .B user_string_quoted_utf16 Quote given user UTF-16 string. .IP See .IR function::user_string_quoted_utf16 (3stap) for details. .P .TP .B user_char_error Retrieves a char value stored in user space .IP See .IR function::user_char_error (3stap) for details. .P .TP .B user_char Retrieves a char value stored in user space .IP See .IR function::user_char (3stap) for details. .P .TP .B user_char_warn Retrieves a char value stored in user space .IP See .IR function::user_char_warn (3stap) for details. .P .TP .B user_short_error Retrieves a short value stored in user space .IP See .IR function::user_short_error (3stap) for details. .P .TP .B user_short Retrieves a short value stored in user space .IP See .IR function::user_short (3stap) for details. .P .TP .B user_short_warn Retrieves a short value stored in user space .IP See .IR function::user_short_warn (3stap) for details. .P .TP .B user_ushort_error Retrieves an unsigned short value stored in user space .IP See .IR function::user_ushort_error (3stap) for details. .P .TP .B user_ushort Retrieves an unsigned short value stored in user space .IP See .IR function::user_ushort (3stap) for details. .P .TP .B user_ushort_warn Retrieves an unsigned short value stored in user space .IP See .IR function::user_ushort_warn (3stap) for details. .P .TP .B user_int_error Retrieves an int value stored in user space .IP See .IR function::user_int_error (3stap) for details. .P .TP .B user_int Retrieves an int value stored in user space .IP See .IR function::user_int (3stap) for details. .P .TP .B user_int_warn Retrieves an int value stored in user space .IP See .IR function::user_int_warn (3stap) for details. .P .TP .B user_long_error Retrieves a long value stored in user space .IP See .IR function::user_long_error (3stap) for details. .P .TP .B user_long Retrieves a long value stored in user space .IP See .IR function::user_long (3stap) for details. .P .TP .B user_long_warn Retrieves a long value stored in user space .IP See .IR function::user_long_warn (3stap) for details. .P .TP .B user_ulong_error Retrieves a unsigned long value stored in user space .IP See .IR function::user_ulong_error (3stap) for details. .P .TP .B user_ulong Retrieves an unsigned long value stored in user space .IP See .IR function::user_ulong (3stap) for details. .P .TP .B user_ulong_warn Retrieves an unsigned long value stored in user space .IP See .IR function::user_ulong_warn (3stap) for details. .P .TP .B user_int8_error Retrieves a 8-bit integer value stored in user space .IP See .IR function::user_int8_error (3stap) for details. .P .TP .B user_int8 Retrieves a 8-bit integer value stored in user space .IP See .IR function::user_int8 (3stap) for details. .P .TP .B user_uint8_error Retrieves a unsigned 8-bit integer value stored in user space .IP See .IR function::user_uint8_error (3stap) for details. .P .TP .B user_uint8 Retrieves a unsigned 8-bit integer value stored in user space .IP See .IR function::user_uint8 (3stap) for details. .P .TP .B user_int16_error Retrieves a 16-bit integer value stored in user space .IP See .IR function::user_int16_error (3stap) for details. .P .TP .B user_int16 Retrieves a 16-bit integer value stored in user space .IP See .IR function::user_int16 (3stap) for details. .P .TP .B user_uint16_error Retrieves an unsigned 16-bit integer value stored in user space .IP See .IR function::user_uint16_error (3stap) for details. .P .TP .B user_uint16 Retrieves an unsigned 16-bit integer value stored in user space .IP See .IR function::user_uint16 (3stap) for details. .P .TP .B user_int32_error Retrieves a 32-bit integer value stored in user space .IP See .IR function::user_int32_error (3stap) for details. .P .TP .B user_int32 Retrieves a 32-bit integer value stored in user space .IP See .IR function::user_int32 (3stap) for details. .P .TP .B user_uint32_error Retrieves an unsigned 32-bit integer value stored in user space .IP See .IR function::user_uint32_error (3stap) for details. .P .TP .B user_uint32 Retrieves an unsigned 32-bit integer value stored in user space .IP See .IR function::user_uint32 (3stap) for details. .P .TP .B user_int64_error Retrieves a 64-bit integer value stored in user space .IP See .IR function::user_int64_error (3stap) for details. .P .TP .B user_int64 Retrieves a 64-bit integer value stored in user space .IP See .IR function::user_int64 (3stap) for details. .P .TP .B user_uint64_error Retrieves an unsigned 64-bit integer value stored in user space .IP See .IR function::user_uint64_error (3stap) for details. .P .TP .B user_uint64 Retrieves an unsigned 64-bit integer value stored in user space .IP See .IR function::user_uint64 (3stap) for details. .P .TP .B user_buffer_quoted Retrieves and quotes buffer from user space .IP See .IR function::user_buffer_quoted (3stap) for details. .P .TP .B user_buffer_quoted_error Retrieves and quotes buffer from user space .IP See .IR function::user_buffer_quoted_error (3stap) for details. .SH SEE ALSO .BR .IR \%function::user_string (3stap), .BR .IR \%function::user_string_warn (3stap), .BR .IR \%function::user_string_quoted (3stap), .BR .IR \%function::user_string_n (3stap), .BR .IR \%function::user_string_n_warn (3stap), .BR .IR \%function::user_string_n_quoted (3stap), .BR .IR \%function::user_string_utf32 (3stap), .BR .IR \%function::user_string_quoted_utf32 (3stap), .BR .IR \%function::user_string_utf16 (3stap), .BR .IR \%function::user_string_quoted_utf16 (3stap), .BR .IR \%function::user_char_error (3stap), .BR .IR \%function::user_char (3stap), .BR .IR \%function::user_char_warn (3stap), .BR .IR \%function::user_short_error (3stap), .BR .IR \%function::user_short (3stap), .BR .IR \%function::user_short_warn (3stap), .BR .IR \%function::user_ushort_error (3stap), .BR .IR \%function::user_ushort (3stap), .BR .IR \%function::user_ushort_warn (3stap), .BR .IR \%function::user_int_error (3stap), .BR .IR \%function::user_int (3stap), .BR .IR \%function::user_int_warn (3stap), .BR .IR \%function::user_long_error (3stap), .BR .IR \%function::user_long (3stap), .BR .IR \%function::user_long_warn (3stap), .BR .IR \%function::user_ulong_error (3stap), .BR .IR \%function::user_ulong (3stap), .BR .IR \%function::user_ulong_warn (3stap), .BR .IR \%function::user_int8_error (3stap), .BR .IR \%function::user_int8 (3stap), .BR .IR \%function::user_uint8_error (3stap), .BR .IR \%function::user_uint8 (3stap), .BR .IR \%function::user_int16_error (3stap), .BR .IR \%function::user_int16 (3stap), .BR .IR \%function::user_uint16_error (3stap), .BR .IR \%function::user_uint16 (3stap), .BR .IR \%function::user_int32_error (3stap), .BR .IR \%function::user_int32 (3stap), .BR .IR \%function::user_uint32_error (3stap), .BR .IR \%function::user_uint32 (3stap), .BR .IR \%function::user_int64_error (3stap), .BR .IR \%function::user_int64 (3stap), .BR .IR \%function::user_uint64_error (3stap), .BR .IR \%function::user_uint64 (3stap), .BR .IR \%function::user_buffer_quoted (3stap), .BR .IR \%function::user_buffer_quoted_error (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/man_pages/tapset::udp.3stap000066400000000000000000000025541356460210500265170ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UDP 3stap "November 2019" "SystemTap Tapset Reference" .SH NAME tapset::udp \- systemtap udp tapset .SH DESCRIPTION This family of probe points is used to probe events that occur in the UDP layer. .TP .P .TP .B udp.sendmsg Fires whenever a process sends a UDP message .IP See .IR probe::udp.sendmsg (3stap) for details. .P .TP .B udp.sendmsg.return Fires whenever an attempt to send a UDP message is completed .IP See .IR probe::udp.sendmsg.return (3stap) for details. .P .TP .B udp.recvmsg Fires whenever a UDP message is received .IP See .IR probe::udp.recvmsg (3stap) for details. .P .TP .B udp.recvmsg.return Fires whenever an attempt to receive a UDP message received is completed .IP See .IR probe::udp.recvmsg.return (3stap) for details. .P .TP .B udp.disconnect Fires when a process requests for a UDP disconnection .IP See .IR probe::udp.disconnect (3stap) for details. .P .TP .B udp.disconnect.return UDP has been disconnected successfully .IP See .IR probe::udp.disconnect.return (3stap) for details. .SH SEE ALSO .BR .IR \%probe::udp.sendmsg (3stap), .BR .IR \%probe::udp.sendmsg.return (3stap), .BR .IR \%probe::udp.recvmsg (3stap), .BR .IR \%probe::udp.recvmsg.return (3stap), .BR .IR \%probe::udp.disconnect (3stap), .BR .IR \%probe::udp.disconnect.return (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/manpager000077500000000000000000000120411356460210500231240ustar00rootroot00000000000000#!/bin/bash # This script builds overview man pages for each tapset from the doc # comments in the tapset source. As such, the man page content # generated herein should be in sync with the SystemTap Tapset # Reference. # If testing manually, just run this script with # doc/SystemTap_Tapset_Reference as the working directory # and the SRCTREE variable set to the location of your # systemtap source tree. echo "Starting manpager in" `pwd` # cleanup rm -rf man_pages # create working directory mkdir workingdir ; # create list of man pages to generate cat $SRCTREE/doc/SystemTap_Tapset_Reference/tapsets.tmpl | grep ^\!Itapset > manpageus ; sed -i -e 's/\!Itapset\///g' manpageus ; # copy list of man pages into working directory # with similar basenames concatenated for i in `cat manpageus` ; do b=`basename $i | sed -e 's/.stpm$/.stp/'` cat $SRCTREE/tapset/$i >>workingdir/$b ; done ; # rewrite manpageus to the resulting files ls workingdir >manpageus # enter workdir cd workingdir ; # copy tapsetdescriptions, then clean for i in `cat ../manpageus`; do sed -n '/\/\/ /,/\/\/ <\/tapsetdescription>/ s/.*/&/w temp' < $i ; mv temp $i.tapsetdescription ; sed -i -e 's/\/\/ //g' $i.tapsetdescription ; sed -i -e 's/\/\/ <\/tapsetdescription>//g' $i.tapsetdescription ; sed -i -e 's/\/\///g' $i.tapsetdescription ; # XXX: may want to trim whitespace from description edges done # strip all tapset files to just comments; but all comments must be exactly 1 space before and after "*" for i in `cat ../manpageus` ; do sed -i -e 's/^ \*/ \*/g' $i; sed -i -e 's/^ \* / \* /g' $i; # mark the start of each probe entry (sub "/**") perl -p -i -e 's|^/\*\*| *probestart|g' $i; sed -i -e '/^ \*/!d' $i; # rename all tapsets (remove .stp/.stpm filename suffix), create templates echo $i > tempname ; sed -i -e 's/.stpm*$//g' tempname ; mv $i `cat tempname` ; mv tempname $i ; done ; # create man page headers date=`date "+%B %Y"` for i in `ls | grep -v .stp | grep -v tapsetdescription` ; do icap=`echo $i | tr a-z A-Z` echo ".\\\" -*- nroff -*-" >> $i.template ; echo ".TH TAPSET::"$icap" 3stap \"$date\" \"SystemTap Tapset Reference\"" >> $i.template ; echo ".SH NAME" >> $i.template ; echo "tapset::"`cat $i.stp`" \- systemtap "`cat $i.stp`" tapset" >> $i.template ; echo " " >> $i.template ; echo ".SH DESCRIPTION" >> $i.template ; cat $i.stp.tapsetdescription >> $i.template ; echo ".TP" >> $i.template ; done # clean man page body sed -i -e 's/\.stp$//g' ../manpageus ; for i in `cat ../manpageus` ; do mv $i $i.tmp ; perl -e 'while(<>){print"$1\n"if/ \* probe ([^\n]*) -/;}' $i.tmp >$i.probenames; perl -e 'while(<>){print"$1\n"if/ \* sfunction ([^\n]*) -/;}' $i.tmp >$i.funcnames; perl -e 'while(<>){print"$1\n"if/ \* smacro ([^\n]*) -/;}' $i.tmp >$i.macros; # perl -p -i -e 's/ \* (probe|sfunction) ([^\n]*)\n/.P\n.TP\n.B $1 \n $2\n$3\n perl -p -i -e 's/ \* sfunction ([^\n]*) - ([^\n]*)\n/.P\n.TP\n.B $1 \n$2\n.IP\nSee \n.IR function::$1 \(3stap\)\n for details.\n/g' $i.tmp ; perl -p -i -e 's/ \* probe ([^\n]*) - ([^\n]*)\n/.P\n.TP\n.B $1 \n$2\n.IP\n See \n.IR probe::$1 \(3stap\)\n for details.\n/g' $i.tmp ; perl -p -i -e 's/ \* smacro ([^\n]*) - ([^\n]*)\n/.P\n.TP\n.B \@$1 \n$2\n.IP\n See \n.IR macro::$1 \(3stap\)\n for details.\n/g' $i.tmp ; # XXX: the people hunger for argument descriptions, which would be extracted here perl -p -i -e 's/ \*([^\n]*)\n//g' $i.tmp ; # nuke the rest of it done # generate footer template for i in `cat ../manpageus` ; do echo "" >> $i.footer echo ".SH SEE ALSO" >> $i.footer for j in `cat $i.funcnames | uniq` ; do echo ".BR" >> $i.footer echo ".IR \\%function::"$j" (3stap)," >> $i.footer done for j in `cat $i.probenames` ; do echo ".BR" >> $i.footer echo ".IR \\%probe::"$j" (3stap)," >> $i.footer done for j in `cat $i.macros` ; do echo ".BR" >> $i.footer echo ".IR \\%macro::"$j" (3stap)," >> $i.footer done echo ".BR" >> $i.footer echo ".IR \\%stap (1)," >> $i.footer echo ".IR \\%stapprobes (3stap)" >> $i.footer done # add cross reference to enclosed functions and probes for i in `cat ../manpageus` ; do for j in `cat $i.funcnames | uniq` ; do echo ".SH SEE ALSO\n " >> ../man3/function::$j.3stap echo ".IR tapset::$i (3stap)" >> ../man3/function::$j.3stap done for j in `cat $i.probenames` ; do echo ".SH SEE ALSO\n " >> ../man3/probe::$j.3stap echo ".IR tapset::$i (3stap)" >> ../man3/probe::$j.3stap done for j in `cat $i.macros` ; do echo ".SH SEE ALSO\n " >> ../man3/macro::$j.3stap echo ".IR tapset::$i (3stap)" >> ../man3/macro::$j.3stap done done # assemble parts for i in `cat ../manpageus`; do cat $i.template >> tapset\:\:$i.3stap ; cat $i.tmp >> tapset\:\:$i.3stap ; cat $i.footer >> tapset\:\:$i.3stap ; # final polish sed -i -e 's/\*\/$//g' tapset\:\:$i.3stap ; done # cleanup for i in `ls | grep -v -e "tapset::.*\\.3stap"` ; do rm $i ; done rm ../manpageus ; cd .. mv workingdir man_pages echo " " echo "Finished! man pages generated in ./man_pages." echo " " systemtap-4.2/doc/SystemTap_Tapset_Reference/overload.py000077500000000000000000000062041356460210500236000ustar00rootroot00000000000000# XML tree transformation for systemtap function overloading # This script merges all overloaded tapset function entries # into one entry. import sys from lxml import etree DEBUG = 0 def collect_overloads(refentries): """ Collect overloads into lists. """ functions = {} for entry in refentries: name = entry.xpath("refnamediv/refname")[0].text if name not in functions: functions[name] = [] functions[name].append(entry) return {k: v for (k, v) in functions.items() if len(v) > 1} def get_params(functions): """ Return a parameter list containing the parameters for all overloads. """ seen = set() params = [] for overload in functions: refsect = overload.xpath("refsect1[1]")[0] # add variablelist node for future construction if len(refsect.xpath("variablelist")) == 0: refsect.remove(refsect[1]) etree.SubElement(refsect, "variablelist") continue param_list = refsect.xpath("variablelist")[0].getchildren() for param in param_list: name = param.xpath("term/parameter")[0].text if name not in seen: seen.add(name) params.append(param) return params def annotate(entry): """ Numbers all overloaded entries. """ num_overloads = len(entry.xpath("refsynopsisdiv/programlisting")) synopsis = entry.xpath("refsynopsisdiv/programlisting") description = entry.xpath("refsect1[2]/para") for i in range(num_overloads): synopsis[i].text = str(i+1) + ")" + " " + synopsis[i].text.strip() description[i].text = str(i+1) + ")" + " " + description[i].text.strip() def merge(functions): """ Merge matching refentries into one and delete them from their parents. """ merged = functions[0] # merge params new_params = get_params(functions) param_list = merged.xpath("refsect1[1]/variablelist")[0] for param in param_list: param.getparent().remove(param) for param in new_params: param_list.append(param) # merge synopsis and descriptions description = merged.xpath("refsect1[2]")[0] synopsis = merged.xpath("refsynopsisdiv")[0] for overload in functions[1:]: synopsis.append(overload.xpath("refsynopsisdiv/programlisting")[0]) description.append(overload.xpath("refsect1[2]/para")[0]) overload.getparent().remove(overload) annotate(merged) def merge_overloads(functions_list): for functions in functions_list.values(): merge(functions) def usage(): print("Usage: ./overload.py ") def main(): if len(sys.argv) != 2: usage() sys.exit() parser = etree.XMLParser(remove_comments=False) tree = etree.parse(sys.argv[1], parser=parser) root = tree.getroot() refentries = [r for r in root.iter("refentry")] functions = collect_overloads(refentries) merge_overloads(functions) output_file = getattr(sys.stdout, "buffer", sys.stdout) tree.write(output_file, encoding="UTF-8", xml_declaration=True, doctype=tree.docinfo.doctype) if __name__ == '__main__': main() systemtap-4.2/doc/SystemTap_Tapset_Reference/publicanize.sh000077700000000000000000000000001356460210500336512../Tapset_Reference_Guide/publicanize.shustar00rootroot00000000000000systemtap-4.2/doc/SystemTap_Tapset_Reference/sort-tapsets.xslt000066400000000000000000000012611356460210500247720ustar00rootroot00000000000000 systemtap-4.2/doc/SystemTap_Tapset_Reference/syscalls.3stap000066400000000000000000000561411356460210500242260ustar00rootroot00000000000000." -*- nroff -*- .TH TAPSET::SYSCALLS 3stap "November 2019" "Systemtap Tapset Reference" .SH NAME tapset::syscalls \- systemtap syscall tapset .SH DESCRIPTION Following is an overview of available syscall probes and convenience variables they offer. By default, each syscall probe has name and argstr convenience variables, which are not included in the overview in order to keep it short. Non dwarf-based nd_syscall probes are supposed to have the same convenience variables. .TP .P .TP .P .TP .B syscall.accept addr_uaddr, addrlen_uaddr, sockfd .P .TP .B syscall.accept4 addr_uaddr, addrlen_uaddr, flags, flags_str, sockfd .P .TP .B syscall.access mode, mode_str, pathname .P .TP .B syscall.acct filename .P .TP .B syscall.add_key description_uaddr, payload_uaddr, plen, ringid, type_uaddr .P .TP .B syscall.adjtimex buf_str, buf_uaddr .P .TP .B syscall.alarm seconds .P .TP .B syscall.arch_prctl addr, code, code_str .P .TP .B syscall.bdflush data, data_str, func .P .TP .B syscall.bind addrlen, my_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.bpf attr_uaddr, cmd, cmd_str, size .P .TP .B syscall.brk brk .P .TP .B syscall.capget data_uaddr, header_uaddr .P .TP .B syscall.capset data_uaddr, header_uaddr .P .TP .B syscall.chdir path .P .TP .B syscall.chmod mode, path .P .TP .B syscall.chown group, owner, path .P .TP .B syscall.chown16 group, owner, path .P .TP .B syscall.chroot path .P .TP .B syscall.clock_adjtime clk_id, clk_id_str, tx_uaddr, tx_uaddr_str .P .TP .B syscall.clock_getres clk_id, clk_id_str, res_uaddr .P .TP .B syscall.clock_gettime clk_id, clk_id_str, tp_uaddr .P .TP .B syscall.clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.clock_settime clk_id, clk_id_str, tp_uaddr, tp_uaddr_str .P .TP .B syscall.clone child_tid_uaddr, clone_flags, parent_tid_uaddr, stack_start .P .TP .B syscall.close fd .P .TP .B syscall.compat_adjtimex buf_str, buf_uaddr .P .TP .B syscall.compat_clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_execve args, env_str, filename .P .TP .B syscall.compat_execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.compat_fadvise64 advice, advice_str, fd, len, offset .P .TP .B syscall.compat_fadvise64_64 advice, advice_str, fd, len, offset .P .TP .B syscall.compat_fallocate fd, len, mode, mode_str, offset .P .TP .B syscall.compat_ftruncate64 fd, length .P .TP .B syscall.compat_futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.compat_futimesat dirfd, dirfd_str, filename, filename_uaddr, tvp_str, tvp_uaddr .P .TP .B syscall.compat_getitimer value_uaddr, which .P .TP .B syscall.compat_lookup_dcookie buffer_uaddr, cookie, len .P .TP .B syscall.compat_nanosleep rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.compat_pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.compat_readahead count, fd, offset .P .TP .B syscall.compat_recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.compat_select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.compat_setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.compat_signalfd flags .P .TP .B syscall.compat_sys_msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.compat_sys_msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.compat_sys_msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.compat_sys_recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.compat_sys_semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.compat_sys_sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.compat_sys_shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.compat_sys_utimes filename, timeval, tvp_uaddr_str .P .TP .B syscall.compat_truncate64 length, path, path_uaddr .P .TP .B syscall.compat_utime actime, buf_uaddr, filename, filename_uaddr, modtime .P .TP .B syscall.compat_utimensat dfd, dfd_str, filename, filename_uaddr, flags, flags_str, tsp_str, tsp_uaddr .P .TP .B syscall.compat_vmsplice fd, flags, flags_str, iov, nr_segs .P .TP .B syscall.connect addrlen, serv_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.copy_file_range fd_in, fd_out, flags, len, off_in, off_out .P .TP .B syscall.creat mode, pathname .P .TP .B syscall.delete_module flags, flags_str, name_user .P .TP .B syscall.dup oldfd .P .TP .B syscall.dup2 flags, flags_str, newfd, oldfd .P .TP .B syscall.dup3 flags, flags_str, newfd, oldfd .P .TP .B syscall.epoll_create flags, size .P .TP .B syscall.epoll_ctl epfd, event_uaddr, fd, op, op_str .P .TP .B syscall.epoll_pwait epfd, events_uaddr, maxevents, sigmask_uaddr, sigsetsize, timeout .P .TP .B syscall.epoll_wait epfd, events_uaddr, maxevents, timeout .P .TP .B syscall.eventfd count, flags, flags_str .P .TP .B syscall.execve args, env_str, filename .P .TP .B syscall.execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.exit status .P .TP .B syscall.exit_group status .P .TP .B syscall.faccessat dirfd, dirfd_str, mode, mode_str, pathname .P .TP .B syscall.fadvise64 advice, advice_str, fd, len, offset .P .TP .B syscall.fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.fallocate fd, len, mode, mode_str, offset .P .TP .B syscall.fanotify_init event_f_flags, event_f_flags_str, flags, flags_str .P .TP .B syscall.fanotify_mark dirfd, dirfd_str, fanotify_fd, flags, flags_str, mask, mask_str, pathname .P .TP .B syscall.fchdir fd .P .TP .B syscall.fchmod fildes, mode .P .TP .B syscall.fchmodat dirfd, dirfd_str, mode, pathname .P .TP .B syscall.fchown fd, group, owner .P .TP .B syscall.fchown16 fd, group, owner .P .TP .B syscall.fchownat dirfd, dirfd_str, flags, flags_str, group, owner, pathname .P .TP .B syscall.fcntl arg, cmd, cmd_str, fd .P .TP .B syscall.fdatasync fd .P .TP .B syscall.fgetxattr filedes, name_str, size, value_uaddr .P .TP .B syscall.finit_module fd, flags, flags_str, uargs .P .TP .B syscall.flistxattr filedes, list_uaddr, size .P .TP .B syscall.flock fd, operation .P .TP .B syscall.fork .P .TP .B syscall.fremovexattr filedes, name_str, name_uaddr .P .TP .B syscall.fsetxattr filedes, flags, flags_str, name_str, name_uaddr, size, value_str, value_uaddr .P .TP .B syscall.fstat buf_uaddr, filedes .P .TP .B syscall.fstatat buf_uaddr, dirfd, dirfd_str, flags, flags_str, path .P .TP .B syscall.fstatfs buf_uaddr, fd .P .TP .B syscall.fstatfs64 buf_uaddr, fd, sz .P .TP .B syscall.fsync fd .P .TP .B syscall.ftruncate fd, length .P .TP .B syscall.ftruncate64 $id, $regs, fd, int, length, pt_regs* .P .TP .B syscall.futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.futimesat dirfd, dirfd_str, filename, filename_uaddr, tvp_str, tvp_uaddr .P .TP .B syscall.get_mempolicy addr, flags, flags_str, maxnode, nmask_uaddr, policy_uaddr .P .TP .B syscall.get_robust_list len_uaddr, list_head_uaddr, pid .P .TP .B syscall.get_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.getcpu cpu_uaddr, node_uaddr, tcache_uaddr .P .TP .B syscall.getcwd buf_uaddr, size .P .TP .B syscall.getdents count, dirp_uaddr, fd .P .TP .B syscall.getegid .P .TP .B syscall.geteuid .P .TP .B syscall.getgid .P .TP .B syscall.getgroups list_uaddr, size .P .TP .B syscall.getitimer value_uaddr, which .P .TP .B syscall.getpeername name_uaddr, namelen_uaddr, s .P .TP .B syscall.getpgid pid .P .TP .B syscall.getpgrp .P .TP .B syscall.getpid .P .TP .B syscall.getppid .P .TP .B syscall.getpriority which, who .P .TP .B syscall.getrandom buf, count, flags, flags_str .P .TP .B syscall.getresgid egid_uaddr, rgid_uaddr, sgid_uaddr .P .TP .B syscall.getresuid euid_uaddr, ruid_uaddr, suid_uaddr .P .TP .B syscall.getrlimit resource, rlim_uaddr .P .TP .B syscall.getrusage usage_uaddr, who, who_str .P .TP .B syscall.getsid pid .P .TP .B syscall.getsockname name_uaddr, namelen_uaddr, s .P .TP .B syscall.getsockopt fd, level, level_str, optlen_uaddr, optname, optname_str, optval_uaddr .P .TP .B syscall.gettid .P .TP .B syscall.gettimeofday tv_uaddr, tz_uaddr .P .TP .B syscall.getuid .P .TP .B syscall.getxattr name_str, path, size, value_uaddr .P .TP .B syscall.init_module len, uargs, umod_uaddr .P .TP .B syscall.inotify_add_watch fd, mask, mask_str, path, path_uaddr .P .TP .B syscall.inotify_init flags .P .TP .B syscall.inotify_rm_watch fd, wd .P .TP .B syscall.io_cancel ctx_id, iocb_uaddr, result_uaddr .P .TP .B syscall.io_destroy ctx .P .TP .B syscall.io_getevents ctx_id, events_uaddr, min_nr, nr, timeout_uaddr, timestr .P .TP .B syscall.io_setup ctxp_uaddr, maxevents .P .TP .B syscall.io_submit ctx_id, iocbpp_uaddr, nr .P .TP .B syscall.ioctl argp, fd, request .P .TP .B syscall.ioperm from, num, turn_on .P .TP .B syscall.iopl level .P .TP .B syscall.ioprio_get which, which_str, who .P .TP .B syscall.ioprio_set ioprio, ioprio_str, which, which_str, who .P .TP .B syscall.kcmp idx1, idx2, pid1, pid2, type, type_str .P .TP .B syscall.kexec_file_load cmdline, cmdline_len, flags, flags_str, initrd_fd, kernel_fd .P .TP .B syscall.kexec_load entry, flags, flags_str, nr_segments, segments_uaddr .P .TP .B syscall.keyctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.kill pid, sig, sig_name .P .TP .B syscall.lchown group, owner, path .P .TP .B syscall.lchown16 group, owner, path .P .TP .B syscall.lgetxattr name_str, path, size, value_uaddr .P .TP .B syscall.link newpath, oldpath .P .TP .B syscall.linkat flags, flags_str, newdirfd, newdirfd_str, newpath, olddirfd, olddirfd_str, oldpath .P .TP .B syscall.listen backlog, sockfd .P .TP .B syscall.listxattr list_uaddr, path, path_uaddr, size .P .TP .B syscall.llistxattr list_uaddr, path, path_uaddr, size .P .TP .B syscall.llseek fd, offset_high, offset_low, result_uaddr, whence, whence_str .P .TP .B syscall.lookup_dcookie buffer_uaddr, cookie, len .P .TP .B syscall.lremovexattr name_str, name_uaddr, path, path_uaddr .P .TP .B syscall.lseek fildes, offset, whence, whence_str .P .TP .B syscall.lsetxattr flags, flags_str, name_str, name_uaddr, path, path_uaddr, size, value_str, value_uaddr .P .TP .B syscall.lstat buf_uaddr, path .P .TP .B syscall.madvise advice, advice_str, length, start .P .TP .B syscall.mbind flags, flags_str, len, maxnode, mode, mode_str, nmask_uaddr, start .P .TP .B syscall.membarrier cmd, cmd_str, flags .P .TP .B syscall.memfd_create flags, flags_str, uname .P .TP .B syscall.migrate_pages maxnode, new_nodes, old_nodes, pid .P .TP .B syscall.mincore length, start, vec_uaddr .P .TP .B syscall.mkdir mode, pathname, pathname_uaddr .P .TP .B syscall.mkdirat dirfd, dirfd_str, mode, pathname .P .TP .B syscall.mknod dev, mode, mode_str, pathname .P .TP .B syscall.mknodat dev, dirfd, dirfd_str, mode, mode_str, pathname .P .TP .B syscall.mlock addr, len .P .TP .B syscall.mlock2 addr, flags, flags_str, len .P .TP .B syscall.mlockall flags, flags_str .P .TP .B syscall.mmap2 fd, flags, flags_str, length, pgoffset, prot, prot_str, start .P .TP .B syscall.modify_ldt bytecount, func, ptr_uaddr .P .TP .B syscall.mount data, filesystemtype, mountflags, mountflags_str, source, target .P .TP .B syscall.move_pages flags, flags_str, nodes, nr_pages, pages, pid, status .P .TP .B syscall.mprotect addr, len, prot, prot_str .P .TP .B syscall.mq_getsetattr mqdes, u_mqstat_uaddr, u_omqstat_uaddr .P .TP .B syscall.mq_notify mqdes, notification_uaddr .P .TP .B syscall.mq_open filename, mode, name_uaddr, oflag, oflag_str, u_attr_uaddr .P .TP .B syscall.mq_timedreceive abs_timeout_uaddr, mqdes, msg_len, msg_prio_uaddr, msg_ptr_uaddr .P .TP .B syscall.mq_timedsend abs_timeout_uaddr, mqdes, msg_len, msg_prio, msg_ptr_uaddr .P .TP .B syscall.mq_unlink u_name, u_name_uaddr .P .TP .B syscall.mremap flags, flags_str, new_address, new_size, old_address, old_size .P .TP .B syscall.msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.msgget key, key_str, msgflg, msgflg_str .P .TP .B syscall.msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.msync flags, flags_str, length, start .P .TP .B syscall.munlock addr, len .P .TP .B syscall.munlockall .P .TP .B syscall.munmap length, start .P .TP .B syscall.name_to_handle_at dfd, dfd_str, flags, flags_str, handle_uaddr, mnt_id_uaddr, pathname .P .TP .B syscall.nanosleep rem_uaddr, req_str, req_uaddr .P .TP .B syscall.ni_syscall .P .TP .B syscall.nice inc .P .TP .B syscall.open filename, flags, flags_str, mode .P .TP .B syscall.open_by_handle_at flags, flags_str, handle_uaddr, mount_dfd, mount_dfd_str .P .TP .B syscall.openat dfd, dfd_str, filename, flags, flags_str, mode .P .TP .B syscall.pause .P .TP .B syscall.perf_event_open attr_uaddr, cpu, flags, flags_str, group_fd, pid .P .TP .B syscall.personality persona .P .TP .B syscall.pipe fildes_uaddr, flag_str, flags, pipe0, pipe1 .P .TP .B syscall.pivot_root new_root_str, old_root_str .P .TP .B syscall.pkey_alloc flags, init_val, init_val_str .P .TP .B syscall.pkey_free pkey .P .TP .B syscall.pkey_mprotect addr, len, pkey, prot, prot_str .P .TP .B syscall.poll nfds, timeout, ufds_uaddr .P .TP .B syscall.ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.prctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.pread buf_uaddr, count, fd, offset .P .TP .B syscall.preadv count, fd, offset, vector_uaddr .P .TP .B syscall.preadv2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.prlimit64 new_rlim_str, new_rlim_uaddr, old_rlim_uaddr, pid, resource, resource_str .P .TP .B syscall.process_vm_readv flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.process_vm_writev flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.ptrace addr, data, pid, request .P .TP .B syscall.pwrite buf_str, buf_uaddr, count, fd, offset .P .TP .B syscall.pwrite32 buf_str, buf_uaddr, count, fd, offset .P .TP .B syscall.pwritev count, fd, offset, vector_uaddr .P .TP .B syscall.pwritev2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.quotactl addr_uaddr, cmd, cmd_str, id, special, special_str .P .TP .B syscall.read buf_uaddr, count, fd .P .TP .B syscall.readahead count, fd, offset .P .TP .B syscall.readdir count, dirent, fd .P .TP .B syscall.readlink buf_uaddr, bufsiz, path .P .TP .B syscall.readlinkat buf_uaddr, bufsiz, dfd, dfd_str, path .P .TP .B syscall.readv count, fd, vector_uaddr .P .TP .B syscall.reboot arg_uaddr, flag, flag_str, magic2, magic2_str, magic, magic_str .P .TP .B syscall.recv buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvfrom addr_uaddr, addrlen_uaddr, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.remap_file_pages flags, flags_str, pgoff, prot, prot_str, size, start .P .TP .B syscall.removexattr name_str, path .P .TP .B syscall.rename newpath, oldpath .P .TP .B syscall.renameat newdfd, newdfd_str, newname, newname_str, olddfd, olddfd_str, oldname, oldname_str .P .TP .B syscall.renameat2 flags, flags_str, newdfd, newdfd_str, newname, newname_str, olddfd, olddfd_str, oldname, oldname_str .P .TP .B syscall.request_key callout_info_uaddr, description_str, description_uaddr, destringid, type_str, type_uaddr .P .TP .B syscall.restart_syscall .P .TP .B syscall.rmdir pathname .P .TP .B syscall.rt_sigaction act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigpending set_uaddr, sigsetsize .P .TP .B syscall.rt_sigprocmask how, how_str, oldset_uaddr, set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigqueueinfo pid, sig, sig_name, siginfo_str, uinfo_uaddr .P .TP .B syscall.rt_sigreturn .P .TP .B syscall.rt_sigsuspend set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigtimedwait sigsetsize, uinfo_str, uinfo_uaddr, uthese_str, uthese_uaddr, uts_str, uts_uaddr .P .TP .B syscall.rt_tgsigqueueinfo sig, sig_str, tgid, tid, uinfo_str, uinfo_uaddr .P .TP .B syscall.sched_get_priority_max policy, policy_str .P .TP .B syscall.sched_get_priority_min policy, policy_str .P .TP .B syscall.sched_getaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_getattr flags, pid, sched_attr_str, sched_attr_uaddr, size .P .TP .B syscall.sched_getparam p_uaddr, pid .P .TP .B syscall.sched_getscheduler pid .P .TP .B syscall.sched_rr_get_interval pid, tp_uaddr .P .TP .B syscall.sched_setaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_setattr flags, pid, sched_attr_str, sched_attr_uaddr .P .TP .B syscall.sched_setparam p_uaddr, pid .P .TP .B syscall.sched_setscheduler p_uaddr, pid, policy, policy_str .P .TP .B syscall.sched_yield .P .TP .B syscall.seccomp flags, flags_str, op, op_str, uargs_uaddr .P .TP .B syscall.select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.semget key, key_str, nsems, semflg, semflg_str .P .TP .B syscall.semop nsops, semid, sops_uaddr .P .TP .B syscall.semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.send buf, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.sendfile count, in_fd, offset_uaddr, out_fd .P .TP .B syscall.sendmmsg flags, flags_str, mmsg_uaddr, s, vlen .P .TP .B syscall.sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.sendto buf, buf_uaddr, flags, flags_str, len, s, to_str, to_uaddr, tolen .P .TP .B syscall.set_mempolicy maxnode, mode, mode_str, nmask_uaddr .P .TP .B syscall.set_robust_list len, list_head_uaddr .P .TP .B syscall.set_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.set_tid_address tidptr_uaddr .P .TP .B syscall.setdomainname domainname_str, domainname_uaddr, len .P .TP .B syscall.setfsgid fsgid .P .TP .B syscall.setfsuid fsuid .P .TP .B syscall.setgid gid .P .TP .B syscall.setgroups list_uaddr, size .P .TP .B syscall.sethostname hostname_uaddr, len, name_str .P .TP .B syscall.setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.setns fd, nstype, nstype_str .P .TP .B syscall.setpgid pgid, pid .P .TP .B syscall.setpriority prio, which, which_str, who .P .TP .B syscall.setregid egid, rgid .P .TP .B syscall.setregid16 egid, rgid .P .TP .B syscall.setresgid egid, rgid, sgid .P .TP .B syscall.setresgid16 egid, rgid, sgid .P .TP .B syscall.setresuid euid, ruid, suid .P .TP .B syscall.setresuid16 euid, ruid, suid .P .TP .B syscall.setreuid euid, ruid .P .TP .B syscall.setreuid16 euid, ruid .P .TP .B syscall.setrlimit resource, resource_str, rlim_str, rlim_uaddr .P .TP .B syscall.setsid .P .TP .B syscall.setsockopt fd, level, level_str, optlen, optname, optname_str, optval_uaddr .P .TP .B syscall.settimeofday tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.settimeofday32 tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.setuid uid .P .TP .B syscall.setxattr flags, flags_str, name_str, name_uaddr, path, path_uaddr, size, value_str, value_uaddr .P .TP .B syscall.sgetmask .P .TP .B syscall.shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.shmdt shmaddr_uaddr .P .TP .B syscall.shmget key, shmflg, shmflg_str, size .P .TP .B syscall.shutdown how, how_str, s .P .TP .B syscall.sigaction $id, $regs, act_str, act_uaddr, int, oact_uaddr, pt_regs*, sig, sig_str .P .TP .B syscall.sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str .P .TP .B syscall.sigaltstack uoss_uaddr, uss_str, uss_uaddr .P .TP .B syscall.signal handler, handler_str, sig, sig_str .P .TP .B syscall.signalfd flags .P .TP .B syscall.sigpending set .P .TP .B syscall.sigprocmask how, how_str, oldset_uaddr, set_uaddr .P .TP .B syscall.sigreturn .P .TP .B syscall.sigsuspend mask, mask_str .P .TP .B syscall.socket family, family_str, protocol, protocol_str, type, type_str .P .TP .B syscall.socketpair family, family_str, protocol, protocol_str, sv_uaddr, type, type_str .P .TP .B syscall.splice fd_in, fd_out, flags, flags_str, len, off_in, off_out .P .TP .B syscall.ssetmask newmask, newmask_str .P .TP .B syscall.stat buf_uaddr, filename, filename_uaddr .P .TP .B syscall.statfs buf_uaddr, path .P .TP .B syscall.statfs64 buf_uaddr, path, sz .P .TP .B syscall.statx buf_uaddr, dfd, dfd_str, filename, filename_uaddr, flags, flags_str, mask, mask_str .P .TP .B syscall.stime t_uaddr .P .TP .B syscall.swapoff path, path_uaddr .P .TP .B syscall.swapon path, path_uaddr, swapflags, swapflags_str .P .TP .B syscall.symlink newpath, oldpath .P .TP .B syscall.symlinkat newdfd, newdfd_str, newname, newname_str, oldname, oldname_str .P .TP .B syscall.sync .P .TP .B syscall.sync_file_range fd, flags, flags_str, nbytes, offset .P .TP .B syscall.syncfs fd .P .TP .B syscall.sysctl args .P .TP .B syscall.sysfs arg1, arg2, option .P .TP .B syscall.sysinfo info_str, info_uaddr .P .TP .B syscall.syslog bufp_uaddr, len, type .P .TP .B syscall.tee fdin, fdout, flags, len .P .TP .B syscall.tgkill pid, sig, sig_str, tgid .P .TP .B syscall.time t_uaddr .P .TP .B syscall.timer_create clockid, clockid_str, evp_uaddr, timerid_uaddr .P .TP .B syscall.timer_delete timerid .P .TP .B syscall.timer_getoverrun timerid .P .TP .B syscall.timer_gettime timerid, value_uaddr .P .TP .B syscall.timer_settime flags, ovalue_uaddr, timerid, value_str, value_uaddr .P .TP .B syscall.timerfd_create clockid, clockid_str, flags, flags_str .P .TP .B syscall.timerfd_gettime fd, value_uaddr .P .TP .B syscall.timerfd_settime fd, flags, flags_str, ovalue_uaddr, value_str, value_uaddr .P .TP .B syscall.times buf_str, buf_uaddr .P .TP .B syscall.tkill pid, sig, sig_str .P .TP .B syscall.truncate length, path, path_uaddr .P .TP .B syscall.umask mask .P .TP .B syscall.umount flags, flags_str, target .P .TP .B syscall.uname name_uaddr .P .TP .B syscall.unlink pathname, pathname_uaddr .P .TP .B syscall.unlinkat dfd, dfd_str, flag, flag_str, pathname, pathname_str .P .TP .B syscall.unshare unshare_flags, unshare_flags_str .P .TP .B syscall.uselib $id, $regs, int, library, library_uaddr, pt_regs* .P .TP .B syscall.userfaultfd flags, flags_str .P .TP .B syscall.ustat dev, ubuf_uaddr .P .TP .B syscall.ustat32 dev, ubuf_uaddr .P .TP .B syscall.utime actime, buf_uaddr, filename, filename_uaddr, modtime .P .TP .B syscall.utimensat dfd, dfd_str, filename, filename_uaddr, flags, flags_str, tsp_str, tsp_uaddr .P .TP .B syscall.utimes filename, filename_uaddr, tvp_uaddr, tvp_uaddr_str .P .TP .B syscall.vfork .P .TP .B syscall.vhangup .P .TP .B syscall.vmsplice fd, flags, flags_str, iov, nr_segs .P .TP .B syscall.wait4 options, options_str, pid, rusage_uaddr, status_uaddr .P .TP .B syscall.waitid infop_uaddr, options, options_str, pid, rusage_uaddr, which, which_str .P .TP .B syscall.waitpid options, options_str, pid, status_uaddr .P .TP .B syscall.write buf_str, buf_uaddr, count, fd .P .TP .B syscall.writev count, fd, vector_uaddr .SH SEE ALSO .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.2/doc/SystemTap_Tapset_Reference/syscalls.xmlpart000066400000000000000000001100141356460210500246510ustar00rootroot00000000000000 syscalls Following is an overview of available syscall probes and convenience variables they offer. By default, each syscall probe has name and argstr convenience variables, which are not included in the overview in order to keep it short. Non dwarf-based nd_syscall probes are supposed to have the same convenience variables. Syscalls list syscall params accept addr_uaddr, addrlen_uaddr, sockfd accept4 addr_uaddr, addrlen_uaddr, flags, flags_str, sockfd access mode, mode_str, pathname acct filename add_key description_uaddr, payload_uaddr, plen, ringid, type_uaddr adjtimex buf_str, buf_uaddr alarm seconds arch_prctl addr, code, code_str bdflush data, data_str, func bind addrlen, my_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id bpf attr_uaddr, cmd, cmd_str, size brk brk capget data_uaddr, header_uaddr capset data_uaddr, header_uaddr chdir path chmod mode, path chown group, owner, path chown16 group, owner, path chroot path clock_adjtime clk_id, clk_id_str, tx_uaddr, tx_uaddr_str clock_getres clk_id, clk_id_str, res_uaddr clock_gettime clk_id, clk_id_str, tp_uaddr clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr clock_settime clk_id, clk_id_str, tp_uaddr, tp_uaddr_str clone child_tid_uaddr, clone_flags, parent_tid_uaddr, stack_start close fd compat_adjtimex buf_str, buf_uaddr compat_clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr compat_execve args, env_str, filename compat_execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str compat_fadvise64 advice, advice_str, fd, len, offset compat_fadvise64_64 advice, advice_str, fd, len, offset compat_fallocate fd, len, mode, mode_str, offset compat_ftruncate64 fd, length compat_futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val compat_futimesat dirfd, dirfd_str, filename, filename_uaddr, tvp_str, tvp_uaddr compat_getitimer value_uaddr, which compat_lookup_dcookie buffer_uaddr, cookie, len compat_nanosleep rem_uaddr, req_str, req_uaddr compat_ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str compat_pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds compat_readahead count, fd, offset compat_recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen compat_select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr compat_setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str compat_signalfd flags compat_sys_msgctl buf_uaddr, cmd, cmd_str, msqid compat_sys_msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid compat_sys_msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid compat_sys_recvmsg flags, flags_str, msg_uaddr, s compat_sys_semctl arg, cmd, cmdstr, semid, semnum compat_sys_semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr compat_sys_sendmsg flags, flags_str, msg_uaddr, s compat_sys_shmat shmaddr_uaddr, shmflg, shmflg_str, shmid compat_sys_shmctl buf_uaddr, cmd, cmd_str, shmid compat_sys_utimes filename, timeval, tvp_uaddr_str compat_truncate64 length, path, path_uaddr compat_utime actime, buf_uaddr, filename, filename_uaddr, modtime compat_utimensat dfd, dfd_str, filename, filename_uaddr, flags, flags_str, tsp_str, tsp_uaddr compat_vmsplice fd, flags, flags_str, iov, nr_segs connect addrlen, serv_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id copy_file_range fd_in, fd_out, flags, len, off_in, off_out creat mode, pathname delete_module flags, flags_str, name_user dup oldfd dup2 flags, flags_str, newfd, oldfd dup3 flags, flags_str, newfd, oldfd epoll_create flags, size epoll_ctl epfd, event_uaddr, fd, op, op_str epoll_pwait epfd, events_uaddr, maxevents, sigmask_uaddr, sigsetsize, timeout epoll_wait epfd, events_uaddr, maxevents, timeout eventfd count, flags, flags_str execve args, env_str, filename execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str exit status exit_group status faccessat dirfd, dirfd_str, mode, mode_str, pathname fadvise64 advice, advice_str, fd, len, offset fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* fallocate fd, len, mode, mode_str, offset fanotify_init event_f_flags, event_f_flags_str, flags, flags_str fanotify_mark dirfd, dirfd_str, fanotify_fd, flags, flags_str, mask, mask_str, pathname fchdir fd fchmod fildes, mode fchmodat dirfd, dirfd_str, mode, pathname fchown fd, group, owner fchown16 fd, group, owner fchownat dirfd, dirfd_str, flags, flags_str, group, owner, pathname fcntl arg, cmd, cmd_str, fd fdatasync fd fgetxattr filedes, name_str, size, value_uaddr finit_module fd, flags, flags_str, uargs flistxattr filedes, list_uaddr, size flock fd, operation fork fremovexattr filedes, name_str, name_uaddr fsetxattr filedes, flags, flags_str, name_str, name_uaddr, size, value_str, value_uaddr fstat buf_uaddr, filedes fstatat buf_uaddr, dirfd, dirfd_str, flags, flags_str, path fstatfs buf_uaddr, fd fstatfs64 buf_uaddr, fd, sz fsync fd ftruncate fd, length ftruncate64 $id, $regs, fd, int, length, pt_regs* futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val futimesat dirfd, dirfd_str, filename, filename_uaddr, tvp_str, tvp_uaddr get_mempolicy addr, flags, flags_str, maxnode, nmask_uaddr, policy_uaddr get_robust_list len_uaddr, list_head_uaddr, pid get_thread_area u_info_str, u_info_uaddr getcpu cpu_uaddr, node_uaddr, tcache_uaddr getcwd buf_uaddr, size getdents count, dirp_uaddr, fd getegid geteuid getgid getgroups list_uaddr, size getitimer value_uaddr, which getpeername name_uaddr, namelen_uaddr, s getpgid pid getpgrp getpid getppid getpriority which, who getrandom buf, count, flags, flags_str getresgid egid_uaddr, rgid_uaddr, sgid_uaddr getresuid euid_uaddr, ruid_uaddr, suid_uaddr getrlimit resource, rlim_uaddr getrusage usage_uaddr, who, who_str getsid pid getsockname name_uaddr, namelen_uaddr, s getsockopt fd, level, level_str, optlen_uaddr, optname, optname_str, optval_uaddr gettid gettimeofday tv_uaddr, tz_uaddr getuid getxattr name_str, path, size, value_uaddr init_module len, uargs, umod_uaddr inotify_add_watch fd, mask, mask_str, path, path_uaddr inotify_init flags inotify_rm_watch fd, wd io_cancel ctx_id, iocb_uaddr, result_uaddr io_destroy ctx io_getevents ctx_id, events_uaddr, min_nr, nr, timeout_uaddr, timestr io_setup ctxp_uaddr, maxevents io_submit ctx_id, iocbpp_uaddr, nr ioctl argp, fd, request ioperm from, num, turn_on iopl level ioprio_get which, which_str, who ioprio_set ioprio, ioprio_str, which, which_str, who kcmp idx1, idx2, pid1, pid2, type, type_str kexec_file_load cmdline, cmdline_len, flags, flags_str, initrd_fd, kernel_fd kexec_load entry, flags, flags_str, nr_segments, segments_uaddr keyctl arg2, arg3, arg4, arg5, option kill pid, sig, sig_name lchown group, owner, path lchown16 group, owner, path lgetxattr name_str, path, size, value_uaddr link newpath, oldpath linkat flags, flags_str, newdirfd, newdirfd_str, newpath, olddirfd, olddirfd_str, oldpath listen backlog, sockfd listxattr list_uaddr, path, path_uaddr, size llistxattr list_uaddr, path, path_uaddr, size llseek fd, offset_high, offset_low, result_uaddr, whence, whence_str lookup_dcookie buffer_uaddr, cookie, len lremovexattr name_str, name_uaddr, path, path_uaddr lseek fildes, offset, whence, whence_str lsetxattr flags, flags_str, name_str, name_uaddr, path, path_uaddr, size, value_str, value_uaddr lstat buf_uaddr, path madvise advice, advice_str, length, start mbind flags, flags_str, len, maxnode, mode, mode_str, nmask_uaddr, start membarrier cmd, cmd_str, flags memfd_create flags, flags_str, uname migrate_pages maxnode, new_nodes, old_nodes, pid mincore length, start, vec_uaddr mkdir mode, pathname, pathname_uaddr mkdirat dirfd, dirfd_str, mode, pathname mknod dev, mode, mode_str, pathname mknodat dev, dirfd, dirfd_str, mode, mode_str, pathname mlock addr, len mlock2 addr, flags, flags_str, len mlockall flags, flags_str mmap2 fd, flags, flags_str, length, pgoffset, prot, prot_str, start modify_ldt bytecount, func, ptr_uaddr mount data, filesystemtype, mountflags, mountflags_str, source, target move_pages flags, flags_str, nodes, nr_pages, pages, pid, status mprotect addr, len, prot, prot_str mq_getsetattr mqdes, u_mqstat_uaddr, u_omqstat_uaddr mq_notify mqdes, notification_uaddr mq_open filename, mode, name_uaddr, oflag, oflag_str, u_attr_uaddr mq_timedreceive abs_timeout_uaddr, mqdes, msg_len, msg_prio_uaddr, msg_ptr_uaddr mq_timedsend abs_timeout_uaddr, mqdes, msg_len, msg_prio, msg_ptr_uaddr mq_unlink u_name, u_name_uaddr mremap flags, flags_str, new_address, new_size, old_address, old_size msgctl buf_uaddr, cmd, cmd_str, msqid msgget key, key_str, msgflg, msgflg_str msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid msync flags, flags_str, length, start munlock addr, len munlockall munmap length, start name_to_handle_at dfd, dfd_str, flags, flags_str, handle_uaddr, mnt_id_uaddr, pathname nanosleep rem_uaddr, req_str, req_uaddr ni_syscall nice inc open filename, flags, flags_str, mode open_by_handle_at flags, flags_str, handle_uaddr, mount_dfd, mount_dfd_str openat dfd, dfd_str, filename, flags, flags_str, mode pause perf_event_open attr_uaddr, cpu, flags, flags_str, group_fd, pid personality persona pipe fildes_uaddr, flag_str, flags, pipe0, pipe1 pivot_root new_root_str, old_root_str pkey_alloc flags, init_val, init_val_str pkey_free pkey pkey_mprotect addr, len, pkey, prot, prot_str poll nfds, timeout, ufds_uaddr ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str prctl arg2, arg3, arg4, arg5, option pread buf_uaddr, count, fd, offset preadv count, fd, offset, vector_uaddr preadv2 count, fd, flags, flags_str, offset, vector_uaddr prlimit64 new_rlim_str, new_rlim_uaddr, old_rlim_uaddr, pid, resource, resource_str process_vm_readv flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt process_vm_writev flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds ptrace addr, data, pid, request pwrite buf_str, buf_uaddr, count, fd, offset pwrite32 buf_str, buf_uaddr, count, fd, offset pwritev count, fd, offset, vector_uaddr pwritev2 count, fd, flags, flags_str, offset, vector_uaddr quotactl addr_uaddr, cmd, cmd_str, id, special, special_str read buf_uaddr, count, fd readahead count, fd, offset readdir count, dirent, fd readlink buf_uaddr, bufsiz, path readlinkat buf_uaddr, bufsiz, dfd, dfd_str, path readv count, fd, vector_uaddr reboot arg_uaddr, flag, flag_str, magic2, magic2_str, magic, magic_str recv buf_uaddr, flags, flags_str, len, s recvfrom addr_uaddr, addrlen_uaddr, buf_uaddr, flags, flags_str, len, s recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen recvmsg flags, flags_str, msg_uaddr, s remap_file_pages flags, flags_str, pgoff, prot, prot_str, size, start removexattr name_str, path rename newpath, oldpath renameat newdfd, newdfd_str, newname, newname_str, olddfd, olddfd_str, oldname, oldname_str renameat2 flags, flags_str, newdfd, newdfd_str, newname, newname_str, olddfd, olddfd_str, oldname, oldname_str request_key callout_info_uaddr, description_str, description_uaddr, destringid, type_str, type_uaddr restart_syscall rmdir pathname rt_sigaction act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize rt_sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize rt_sigpending set_uaddr, sigsetsize rt_sigprocmask how, how_str, oldset_uaddr, set_str, set_uaddr, sigsetsize rt_sigqueueinfo pid, sig, sig_name, siginfo_str, uinfo_uaddr rt_sigreturn rt_sigsuspend set_str, set_uaddr, sigsetsize rt_sigtimedwait sigsetsize, uinfo_str, uinfo_uaddr, uthese_str, uthese_uaddr, uts_str, uts_uaddr rt_tgsigqueueinfo sig, sig_str, tgid, tid, uinfo_str, uinfo_uaddr sched_get_priority_max policy, policy_str sched_get_priority_min policy, policy_str sched_getaffinity len, mask_uaddr, pid sched_getattr flags, pid, sched_attr_str, sched_attr_uaddr, size sched_getparam p_uaddr, pid sched_getscheduler pid sched_rr_get_interval pid, tp_uaddr sched_setaffinity len, mask_uaddr, pid sched_setattr flags, pid, sched_attr_str, sched_attr_uaddr sched_setparam p_uaddr, pid sched_setscheduler p_uaddr, pid, policy, policy_str sched_yield seccomp flags, flags_str, op, op_str, uargs_uaddr select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr semctl arg, cmd, cmdstr, semid, semnum semget key, key_str, nsems, semflg, semflg_str semop nsops, semid, sops_uaddr semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr send buf, buf_uaddr, flags, flags_str, len, s sendfile count, in_fd, offset_uaddr, out_fd sendmmsg flags, flags_str, mmsg_uaddr, s, vlen sendmsg flags, flags_str, msg_uaddr, s sendto buf, buf_uaddr, flags, flags_str, len, s, to_str, to_uaddr, tolen set_mempolicy maxnode, mode, mode_str, nmask_uaddr set_robust_list len, list_head_uaddr set_thread_area u_info_str, u_info_uaddr set_tid_address tidptr_uaddr setdomainname domainname_str, domainname_uaddr, len setfsgid fsgid setfsuid fsuid setgid gid setgroups list_uaddr, size sethostname hostname_uaddr, len, name_str setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str setns fd, nstype, nstype_str setpgid pgid, pid setpriority prio, which, which_str, who setregid egid, rgid setregid16 egid, rgid setresgid egid, rgid, sgid setresgid16 egid, rgid, sgid setresuid euid, ruid, suid setresuid16 euid, ruid, suid setreuid euid, ruid setreuid16 euid, ruid setrlimit resource, resource_str, rlim_str, rlim_uaddr setsid setsockopt fd, level, level_str, optlen, optname, optname_str, optval_uaddr settimeofday tv_str, tv_uaddr, tz_str, tz_uaddr settimeofday32 tv_str, tv_uaddr, tz_str, tz_uaddr setuid uid setxattr flags, flags_str, name_str, name_uaddr, path, path_uaddr, size, value_str, value_uaddr sgetmask shmat shmaddr_uaddr, shmflg, shmflg_str, shmid shmctl buf_uaddr, cmd, cmd_str, shmid shmdt shmaddr_uaddr shmget key, shmflg, shmflg_str, size shutdown how, how_str, s sigaction $id, $regs, act_str, act_uaddr, int, oact_uaddr, pt_regs*, sig, sig_str sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str sigaltstack uoss_uaddr, uss_str, uss_uaddr signal handler, handler_str, sig, sig_str signalfd flags sigpending set sigprocmask how, how_str, oldset_uaddr, set_uaddr sigreturn sigsuspend mask, mask_str socket family, family_str, protocol, protocol_str, type, type_str socketpair family, family_str, protocol, protocol_str, sv_uaddr, type, type_str splice fd_in, fd_out, flags, flags_str, len, off_in, off_out ssetmask newmask, newmask_str stat buf_uaddr, filename, filename_uaddr statfs buf_uaddr, path statfs64 buf_uaddr, path, sz statx buf_uaddr, dfd, dfd_str, filename, filename_uaddr, flags, flags_str, mask, mask_str stime t_uaddr swapoff path, path_uaddr swapon path, path_uaddr, swapflags, swapflags_str symlink newpath, oldpath symlinkat newdfd, newdfd_str, newname, newname_str, oldname, oldname_str sync sync_file_range fd, flags, flags_str, nbytes, offset syncfs fd sysctl args sysfs arg1, arg2, option sysinfo info_str, info_uaddr syslog bufp_uaddr, len, type tee fdin, fdout, flags, len tgkill pid, sig, sig_str, tgid time t_uaddr timer_create clockid, clockid_str, evp_uaddr, timerid_uaddr timer_delete timerid timer_getoverrun timerid timer_gettime timerid, value_uaddr timer_settime flags, ovalue_uaddr, timerid, value_str, value_uaddr timerfd_create clockid, clockid_str, flags, flags_str timerfd_gettime fd, value_uaddr timerfd_settime fd, flags, flags_str, ovalue_uaddr, value_str, value_uaddr times buf_str, buf_uaddr tkill pid, sig, sig_str truncate length, path, path_uaddr umask mask umount flags, flags_str, target uname name_uaddr unlink pathname, pathname_uaddr unlinkat dfd, dfd_str, flag, flag_str, pathname, pathname_str unshare unshare_flags, unshare_flags_str uselib $id, $regs, int, library, library_uaddr, pt_regs* userfaultfd flags, flags_str ustat dev, ubuf_uaddr ustat32 dev, ubuf_uaddr utime actime, buf_uaddr, filename, filename_uaddr, modtime utimensat dfd, dfd_str, filename, filename_uaddr, flags, flags_str, tsp_str, tsp_uaddr utimes filename, filename_uaddr, tvp_uaddr, tvp_uaddr_str vfork vhangup vmsplice fd, flags, flags_str, iov, nr_segs wait4 options, options_str, pid, rusage_uaddr, status_uaddr waitid infop_uaddr, options, options_str, pid, rusage_uaddr, which, which_str waitpid options, options_str, pid, status_uaddr write buf_str, buf_uaddr, count, fd writev count, fd, vector_uaddr
systemtap-4.2/doc/SystemTap_Tapset_Reference/tapcheck.sh000077500000000000000000000035241356460210500235330ustar00rootroot00000000000000#!/bin/sh #check to make sure a tapsets.tmpl file exists if [ ! -f tapsets.tmpl ]; then echo "Error: tapsets.tmpl doesn't exist in the current directory!" exit 1 fi # list the tapsets in the tapsets.tmpl file and properly format the # file names grep "\.stp" tapsets.tmpl | grep ! | sed 's/!Itapset\///g' > checkfile2 # change to the tapset directory and check the tapsets there # check to see if directory is present first if [ ! -d ../../tapset/ ]; then echo "Error: tapsets directory doesn't exist!" exit 1 fi (cd ../../tapset/; find -path "*.stp") | sed 's/\.\///g' > checkfile1 #might as well check for the functions that are documented in #langref now too (cd ../../tapset/; find -path "*.stp" -exec grep -H sfunction {} \; ) \ | sed 's/\.\///g' | cut -d : -f 1 | sort -d | uniq > tap1 # order the tapset names then diff the files to examine the differences sort -d checkfile1 | uniq > checkfile1s sort -d checkfile2 | uniq > checkfile2s comm -23 checkfile1s checkfile2s > missingdoc comm -12 missingdoc tap1 > commondoc comm -23 missingdoc tap1 > missingdoc1 comm -13 checkfile1s checkfile2s > missingtap zero='0' one='1' Missingdoc=`cat missingdoc1 |wc -l ` Missingtap=`cat missingtap | wc -l ` Commondoc=`cat commondoc | wc -l ` if [ "$Missingdoc" -gt "$zero" ] then echo "You have missing documentation from tapsets in use, specifically:" cat missingdoc1 fi if [ "$Missingtap" -gt "$zero" ] then echo "You have documentation for the following tapsets that don't exist!" cat missingtap fi if [ "$Commondoc" -gt "$zero" ] then echo "The following tapsets did not appear in tapset.tmpl, but have references in the langref file." cat commondoc fi rm checkfile2 checkfile2s checkfile1 checkfile1s missingtap missingdoc missingdoc1 commondoc tap1 # at the end we need to make sure we remove any files that we created # change to proper directory first systemtap-4.2/doc/SystemTap_Tapset_Reference/tapsets.pdf000066400000000000000000054677641356460210500236210ustar00rootroot00000000000000%PDF-1.4 % 1 0 obj << /Title (SystemTap Tapset Reference Manual) /Author (SystemTap) /Creator (DocBook XSL Stylesheets with Apache FOP) /Producer (Apache FOP Version 2.2) /CreationDate (D:20191118154612-05'00') >> endobj 2 0 obj << /N 3 /Length 3 0 R /Filter /FlateDecode >> stream x;mtTd4Z=~mZtI:"@ZcAf>31,ͱV]kuk=e5*mtaΝX~>}yg8R[XNc{*&K#|mɒNU7T׺UON_ }PY(_:_ĠA>sqy*\eP^e#)yс\ Y27T `]R7RBTD ktV2P{\3SF>(|R5]1n85oL*(e& Ϛ<B}9* w<TB@i.ZbŨ h:딚l*eqLMd R0yykNMiO2\v2s񇹂qJ.p>ϸݭԧEߵa`ղBB=22C%5߆B)aⰎ m8:%l_ ƤMQCX&`XR[0.Gc]bYQh--_PoØ`8: 8n>4&RP:GNZv G|ʺ^"q0N8=(^^9E`-ށ,`}D]NxPA9gg '.~ h@I[(i^! :c5>|9xH wwwgpsp;7C sSгKe>*솕Clg'탖0~{k,2#B|+T%މeHeҘ1}F&j{N=ҳa W$ap<Njz]jF`Ń"yej&p]f <@((V;5s ;gq=gQEPJc9h) ZC ͅҼPsP'B PPSZxܬP>͡F6hm̈́M0= zq0`5t3 C9C[&%rI{|E.#Ū>U<`(j+BMe/@y&45WN} wOd.|RSI dqhFA:#R}LZEJ"TdߕBI>Q,;z8;}4L}z,ҧr6i$Kxx#%|7FQZ`l^);3B3ͮKozo?:^-wJ>{|UsJJ-R*+uLo̊O^oR>?_'|gu)|WntYnSa3dwEEgE3vj#96Ԣ1U'2!i~=[c:ZӒtcIgwMtf1wqB\$w:OQy%~yͣʳ_^e{/~ k˃_nC;G9!5?ֱo-})g?b:ctQ/\57^~s _o`9r;7i7`履5=EoH~S~gpF*O7p5ja^!,,/HddHa,c{-/kӭfHg^gF4!X9q7r&)ŭ@e4ۉ*[Vg+[59'EKGբWȆыARᮇ2R~&*M+/؂M<4K4[uK#YR[-0siUMC"$Qߠ[֏q$f ʥPF*]DW6Q!Ȯ2HRy}7OI})ywKFDNNic 1[`J)} (Au9eEMMZȂfʦ-jud{ȑ,E2핽yrW&EWЕ ()1V }ґc;!~/m\5+|ޢ.wD]ZL ҆G^^"P- oG§=#VePՒ5L /4Cadhk<2tƱ`bĉOGN>Xʟ!=Wcԑ2ٞui)6so;a-h9RUY;_wB^"m&dʋ߰"G'3JZ${Yӣ'x%z&5k6ћn >GPJ9M99|H5W@g>Xy#p~P^w{}*gP8oaa]D+ ɫfΆ4AD|y޼44{u M |nNor/K^W{^Fcm+B  v9joqSWT~cb=<`s!*8;-^0,aȔE2J~U{{f|~Yg# 9V/V4|qaZI9oY)qd䏉'0&'K"ro)#34&K1p6˜1 ܣIB)Pv7>):X InF_9;67Gm(7vٷC}1pr[Cضk/?62i87t`{¦k8zq8bHF[ Rڹv >煴6k+p Pvs1-՞q˻pCr/ N"T>R26OK/] yKN,ܯtg!͕ hZDV$ݏ08ǻA\aWӤ' {h%7B#0XE Q93K5JT"%1;_x(7)᜜Sub_\ PV*ʡ5hy_\a >R:Dk HkU[0.끄)=Qz+ c8vETu'J{vj,9(^Q,VӍ6wQ y0$Y{e9x } S4&)oLYS&FmhE^4V7^n|pU:׹/ E6},}<;f6d9c87];*'ҲH^ϓw[_ 5nB̷;-nlԋߘ׎xas$3o1fM|>hL&70q6J>kLZໝr$WrdE6P+j﹔*z46_צ K R;ɜKMЇ+4Q歡Ц1\@ij5sZnvBeFbLvvD0Qn,`f+R0nr.`vpUFs\6m&‡m#N(js ;I4ĎP&SEوkk '/4 Wn*" GƵHN*NY "?4;v6Y6(?Dv1w.@i*ɈMD^#v92(r-ByDKdҶVP ů?i6z xum>\)i 1i=>y ""M3MDR'о5>^Njq&,cg3d9ͭ -2;jhw/c7#@/n:"3ֲwf6%2緪y7+&BUW7}G{4蝾m4i'1.JGh?y?&6:""QKǿKggl+1Ό29._,8]rrc$ ٮ%}H*IDRUj!bú,/iieKiIV;p4}#KNb򾫣5j9_ޑ `JrzF~TY'%o"'k@_QcŢ|.>ؙ%q]𲈣q3D~{Un)Ñ0{xUn2k53-bJq+YhUJ#Z}Vi[=erZE> stream SystemTap application/pdf SystemTap Tapset Reference Manual en 2019-11-18T15:46:12-05:00 Apache FOP Version 2.2 1.4 DocBook XSL Stylesheets with Apache FOP 2019-11-18T15:46:12-05:00 2019-11-18T15:46:12-05:00 endstream endobj 6 0 obj 965 endobj 7 0 obj << /Length 8 0 R /Filter /FlateDecode >> stream x}0 E|G&C!bT'--׶m'e͓)(p 2n%j;@X81_iPo8&C$MPI2v> 1ZWæiz*Ɍi L&1gclHǛ)@ endstream endobj 8 0 obj 174 endobj 9 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 7 0 R >> endobj 12 0 obj << /Length 13 0 R /Filter /FlateDecode >> stream xVMs8+ TN$'J5嚝GdWB|(n$t?_e~YLcq@[ wv< ]}H@=)RYmmʨ}j[S=xvc`}AΧc!v®#_ :\lyB"8atW;NcTTQ'H_ؗl׹T?v|ΟgX22^Μ lg]wxx`!{)Kol/YAؓ%p ؆H#刪78 /0.W9)D$(+Z_N9!\TE\UGfNZ N+m$ϯZVUHfՉ7~`qw")oܨ|>Ƕzh 4&EIUQÁZ+ֲTHДVLRkg,;/ 0&AMZ91"al27elJVX}>s0V߄+382y%ɏ槌L.dyTs^`^^mӮW^p}~} n th94}(D=hTrϙ쳄fɰ;C=SȒN=FS8 }%jI:uZ 6ίӛ,Zͦ T)J3!W@{*w/؇7^b'a9QW&1ҝfP> c4.°m>VR6J aZa%R u_ɃzEw6|Eп|6xCkӼ|2&>ؗ endstream endobj 13 0 obj 878 endobj 14 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 12 0 R >> endobj 15 0 obj << /Length 16 0 R /Filter /FlateDecode >> stream xVKo0 W' [ CۃbˉP[J$9i$%9َk#&?S"zݙ*@C`xC(]Qn^0/Em]@pfw׵ĥ  1_/(* @/ȫ{ zgN"7 endstream endobj 16 0 obj 821 endobj 17 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 15 0 R >> endobj 18 0 obj << /Length 19 0 R /Filter /FlateDecode >> stream xU;O0+n6HlH 8.hpN)P}# <+$'o ᰎb`#VjPF:{Rkhѝ3#GD_q ٭w,ȡܼ  ~,y2<'gWk<2ȷapFy bCRvJpԝયeW5u{qÅMj^Q^*849yr8#9TEQY 6z/,՞޻}/\x5uPWkVõU?c#(b*hzx^~'@ⓐ/2p5^vOeqN[lpL]|c:hZ=W9]&ILmSLvjF2_vsy=vNt+yο fQa30/*wS|'} endstream endobj 19 0 obj 448 endobj 20 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 18 0 R >> endobj 21 0 obj << /Length 22 0 R /Filter /FlateDecode >> stream xUn0+hXnZ[@!AiK-:$4-/d,CS@0O F ]h~ؿq;n'EkpЅCxjs-&TlVY2aDD Ĩ>_.bnsU̾_f;2BXU|˪vŨ*+S(vu5TȽ;P`Y#̲d:M ]rH8E0jn 8F$h{Oi<&Sp>1`3 RkYXj(a¢6zӤ3EFEQ#޼jkrRŁ ]eE4iqyV~wτc qWe`NiNB hW-Ia 54so~rH EVҖ00sμ"/eU=X=js@=o軁?-W1glj%WjO둱痭XҟrߏեW*6S*{$!^n[S#oUO1TWY&v@LqݓJwrsn ۓY?3AY4Rļlt#H 8`8wEL9?qGStOlol(݁14Zs5!Jv2;ڄ_YS$ endstream endobj 22 0 obj 666 endobj 23 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 21 0 R >> endobj 24 0 obj << /Length 25 0 R /Filter /FlateDecode >> stream xT[o0~WfR mI6)j=4DH1Q?0Ie{Z <nA;dCPAXhᖅ~ݎٽ?G?~E%xx!9Oƃ@Mņ>Nw!P|'J8ΔLpu[UݶH,&_ϓl9eo,q_㲩fIl^ u*-w;Annγb,t)c0h-<QzeB[2&qߒj1$f:͓J8 rfEZH$Q9-dkwQnLfİk> |!q8_YSwsp endstream endobj 25 0 obj 546 endobj 26 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 24 0 R >> endobj 27 0 obj << /Length 28 0 R /Filter /FlateDecode >> stream xUR0+,P-+;m3 aa1`'Hɯ(&IYL$龎\=}Oi<4NŻb !k+p?n}۟v!N;( EgoPk ~WaXEC:RD!D3H=O> # \Ԭօ@-8OwejGU~UJ;84ڕ#nu3dr 1k7 Ψl*kj@H% cb8dΌ،cw^:P| ôTJ*=hc"+&bңcDZ׎OzW5{'8F[4iұOP* ՙZ-D; 'ʤ2ZђVBQ}zVwzRBQH Q{ra`#B$AJR̛$y=g7)}ef-JIr,Z~fS'^ {aZUșeH}*/s{Y,&'?__._M[K?bgUk=h//RMzZm@;-kQߢu{ps~yd_ endstream endobj 28 0 obj 651 endobj 29 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 27 0 R >> endobj 30 0 obj << /Length 31 0 R /Filter /FlateDecode >> stream xUKo@Wr)ή/n}Rh, I$iɿ5`lZFx1o} RWZB'*A | .WP7qZG{j#θanqɮm:+4C5erƲ.Ѭlq l A W &"bX f**^5 &x)Ne9 &ҧ!t[ASIRHy9lXCy.ea(cޢB#SJ9*te%<ܫ 8*f5u*Q^dd0;%Svgu pi2zTIf %ާ$e˧C .X$8E9 A(¦ ++(ռS,rv9> endobj 33 0 obj << /Length 34 0 R /Filter /FlateDecode >> stream xTn0+19}Iڤ)C7r"e[M%_Zb9SI012! E0ߒc`8=$*mC/0ؤ؏-n'_}@W2=hUo+)#0l,dY,ŋC7w~!J>g#wvK%wxx M-d8##5W &E'̲d2?l6yaZq^؂3M12!a=TE0@ y<!Vo[D쀾AM/bu0f3Yۮ|N6_fo E%.j澩OiΔJLF VYKH]*z*3D+*_C{\ϨKW\:iVg&v?l'5s4Fguoi endstream endobj 34 0 obj 481 endobj 35 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 33 0 R >> endobj 36 0 obj << /Length 37 0 R /Filter /FlateDecode >> stream xUMS0W4$F[`tϴ3qă-Ynwr*K~֮>=,C[-`{s=`.M`SjVdvcn(Y7.wդ"]q>ESh9H0‚0 φ<4?Q7G ţJ&:-d9umUk3ΪՏ@kWN+K}CJ l͒8˄j'o'ٔ2,b44}c.q̦<|ι_ ++%aR\H]B{Ƞqrwx*NDWmJVv$), Um 0q†ҍK3J)L`>Ui$ רN?7U ikk8JX(QbLHu_AzQMw^1wv'=UT6<~L*VLȕ^/ξ\oӾ]}_Ri]?gm.1 >pkjSJ endstream endobj 37 0 obj 673 endobj 38 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 36 0 R >> endobj 39 0 obj << /Length 40 0 R /Filter /FlateDecode >> stream xUMs0+-pgzKLbf-b=5%ZVp ,B$Fn,ݎ}:~l!'ɢKGCp?"7 srsBFiq[Umrc$& FjiQDP]gby 'Jc.Ytn4Z%䦖t$ "y6GYg:ߺʸVNPRq4{jۄ&X/emJWl`U@/rke{F]6h8ʆ3Μۢ?W[{ۙ1EoHJQ/ Vw0> endobj 42 0 obj << /Length 43 0 R /Filter /FlateDecode >> stream xVMs Wљq(oҏt%gzH2Uƶf rn,έ1>ˊGK){ F G # n _b3bWqZ-wѕCxtw3 7 {w\w$M$!A>M͇’C) rUxWh>ol75:d;TbT'q 5b+L1~#̺djW3F)(ǘ蕜Γ>x<=!<L[K3tgBU% `/˜UnM&zb2'("#Nl>r_5λ& 5+,~&Rl6++xevQN&UW(J4uZ~Sï Y)-6L/%Rl{eF8buij g&x!:)zɑ ^ G?Vo9czw CLS}&3է-Ko3a8< R#rYAMav'JeRZPQ wƙs= 8r/>c(%%2i=ήƴFsJTʞtH Q*gJf+4v|r0{,[w&TI@uUTa+ZfLiڍ=u9) 4awBMȓұ> endobj 45 0 obj << /Length 46 0 R /Filter /FlateDecode >> stream xUKs0+$o}3=tƍgz3d#M+48v{ji?k_.ңG=uT {l0 COX`Z np)j۱g%4TJCH8SbLcfJDebr˯ [NvQWzGرÁ!NK"MCl>1gQ59/QD.[DH Z(蹉cr_S.{4]gXcMY&Ryn%8YM;Xhm=#kG&;I^` J,l³ 3Kvu=#{t*4PDR6O-3!Z.<9^s(#> ښ|17L`DN/t頪DTt/뀦=}&{ṟ]Oz,?S^f9jVG|Gkc4ZֿtLO}>^GmM|a[l|`. Ҷ?ppPzxeJ! endstream endobj 46 0 obj 575 endobj 47 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 45 0 R >> endobj 48 0 obj << /Length 49 0 R /Filter /FlateDecode >> stream xTn0+ %.uK CKU6SZNԞH(뛀x ?EHˣDU冰22BnMHuYJ.^ ޗ)~5pٖ>MUįe_@˩LQ(McT@jvdm/SZHX2)D 2J0ɪSh_| ͦ7vƼUm\nRk6W}HuOL3RGB]׫Je8,Z~='6Nj8g:ڗZI*I\PyǍ 2aBLGɳͶq_N41CV;KS΄Gi' K?O endstream endobj 49 0 obj 464 endobj 50 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 48 0 R >> endobj 51 0 obj << /Length 52 0 R /Filter /FlateDecode >> stream xTKs0+J !ڦLqLq.Vlf8c;2w{gэz⵷*6)>\@(OBu(Lp.Q 2*JAe+lM|˦w)4TȔCQeAduie9%n>g"Nq%"b/\M ~.. U`CV?MG.\zѣ]R Bڦ >"EWp6}Fkشuc#piוٌXrL#D7lsYzҤܟh@,`Gb|>&b 0K 1lc# 7KZd. endstream endobj 52 0 obj 538 endobj 53 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 51 0 R >> endobj 54 0 obj << /Length 55 0 R /Filter /FlateDecode >> stream xUKO0W 8GbJ{@ !m#Ҹ$.׎ PTug>y "b`snXs(U$ǡ”Uv1"}˛.v6͇.!Gɦh$`s֕ȦS i4!ឆ_6 cx%2yTOU%3rb$49h#DzjElg+-[ZyRI*t[ڥM3qTC ,w:)_2Z-ÚU&aQߣ6p?Kx6ϙק0-x2Ix~gJ!g:A endstream endobj 55 0 obj 662 endobj 56 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 54 0 R >> endobj 57 0 obj << /Length 58 0 R /Filter /FlateDecode >> stream xTn0+5iSn8l IÉm/M$AF> +0`V6(*eg80>8㾛DZpX7Q O;S!F╘%o*7Bge &$yV>^ \\Te~p)*>Nvׅ켣3tBhP(-B<2Q I(w*u(H#Wp =w 4GBCϹ3>kh7u@> endobj 60 0 obj << /Length 61 0 R /Filter /FlateDecode >> stream xUM0+=TJ7vWUJLLH󕄐mO݅(g1-ΪjU~U;T[HV`ND_*S%R*aFÏ2W gRE w$ >(_^9}`$h.̔0Vg65,n yBs,2E"\\᪬$ ]> endobj 63 0 obj << /Length 64 0 R /Filter /FlateDecode >> stream xTMS0W N{Lg8LPBfl+lBSXg='= $+cX !J P"Up~` }qC37c aqW" wSK1%*78ć![ej5wVɯ xGcecBwhP(-B<2Qw,:A&]ݵA"H\*HC Δc"PoaGX-Է2԰)y U1&`/ŦZ~$obF.+b"_ΎfL: ;[cܮC^WħK-}+ќķP&6P@EJ&ۑhP;P.>.۹8M; ŸnO-4xd^?,zd_=Xx endstream endobj 64 0 obj 484 endobj 65 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 63 0 R >> endobj 66 0 obj << /Length 67 0 R /Filter /FlateDecode >> stream xTn0+iSn `b QFӿ/9@J!G`|Sb{@ j Q2.w,.}1kW?w[/Їy?\}>f%4˺t lp!bRPn{ԅٰA&A*iJ^6@/hCрJ>؆׾\L^d3Orq Cdhь$Lf;gzM=P |οy'(3+18.K'EIƒ/ endstream endobj 67 0 obj 485 endobj 68 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 66 0 R >> endobj 69 0 obj << /Length 70 0 R /Filter /FlateDecode >> stream xT]o0}WtRkcѷ['MڤT%N@ـiB>>Eݗ~A:d}&(',qp08U{wal! %KtwЙx67"8$@&i9%TiAi1nt]UͶ,=LF'{ƔjM~M;$i 4޷l^|*1w\]S[gj*sL_FcD8A߳(U &)crH` ]C|KGa!03* ľZItD"*E T}vh &rqW:M/ H-#>T=:M4k-30M)Bcج7^se3ٯ7>+z0_D~02af6/= vi~ =+l[=0Si>v:_5リy>-Uf^?҄㙯_P%bصa%sKgs$jS}]F endstream endobj 70 0 obj 549 endobj 71 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 69 0 R >> endobj 72 0 obj << /Length 73 0 R /Filter /FlateDecode >> stream xTMS0W+[0Йp 8!vi+#'Xg=iv:+cA1D$X8t]`q~:ơ K@87x D@ӝ@Sņor!$Gi#dsV+R CeѤ8&/G2Vlm|햭wؿF-dZpFi*:DT0^$:QBĒI!O` uK dI:>ulv tfS54ܬBs[ei몜u=dBl}A nE-=> endobj 75 0 obj << /Length 76 0 R /Filter /FlateDecode >> stream xTMs0WfZٖŭ_Lo4!d: ȉmwhNMly֓޾]c A&xl1 @}HF1PPpn`=B?c]>nl >G- #4u`r$ߔ6U1 _E P cXA"|]e*ںyB-UXZ_e];ďuM%kpB⩚A5f2g9+V1M $AR!J4$BS"}LKnmxƺ f%.įvFDZA7+_qC՜_b,)iF>^n5f[TQr}hci`'DDFIh2ylʢS3O/U9/$B*'4rm9/KCDH1r٦kڞ$:;H)LFwYAE=ggr\ K/C;CxE1mKY3z=1盯A.ɳ]-_ծ% endstream endobj 76 0 obj 528 endobj 77 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 75 0 R >> endobj 78 0 obj << /Length 79 0 R /Filter /FlateDecode >> stream xTMo0 WPlm[; (j6WI 4rj9G#m&0`D3)Kߓ+\&wF`$( QR!3{/O0ZvO8=fO$W׌0}7:^$; a|,gB1{6%A6 rb WGjߺ_-}VP|M>[*o..d?#:oKta]=eM @l d2ê˞!BB$.c?lH1QR]5ʻ څr4η:X?e*٭k1|iBkUsHa̠ZGL׫Pm\ 4ja Q|Ț CϧG?'<\l8&ʬyja-unj"Z RKj{SʦZ (ITrϲMŢ 0׮X25R<0bj0a]1+հTP[W{W4B_ endstream endobj 79 0 obj 511 endobj 80 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 78 0 R >> endobj 81 0 obj << /Length 82 0 R /Filter /FlateDecode >> stream xT]o0}z0)+Rj2 5bn~`Ғ6c߯s}+0X`# t:(IT ýa3 +nq{\J |W׌`<;ѻ /t/|Q!,\>O=$eι,ՐI\k:yWWmm5o˺אQ vׅ촣t,!ہ;v4(u!^jt#1HdRMn)30J*҈eΌpLec3쾁>f] ۦ)6MbK & %@5cQi}_ULlY\_;"&7uNt" 5:z,k%Nqβd:uRIaƸ}M <PFb2tKWg ȫwyWBvN#=a} [|>--e6:%>x,>3 n endstream endobj 82 0 obj 493 endobj 83 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 81 0 R >> endobj 84 0 obj << /Length 85 0 R /Filter /FlateDecode >> stream xUKs0Wfzزr+CLICAg@NlӤ+M3HЮv~8 =?h#` j !b"$f w~Ƕݟc3V6 \.@$<Ǡr^"!eaUGb&܌>O\ݢHR`-2D+xcNK~ejVtXB[u$dꪯmD0Zm?ٺR显1(8a}kŅbFщBBCy~b9h:ryyvv J!)4(r}ǥy7#f4UY$}KnGer*ۇ:Q8"4,1Js'۞}tթWʾt3.?T>|%>Gpa:chA7`Tll={Kb[-sBͻi]u}bvAlfo[%=gWR^lS& !MYJҧ0RavPQC ^Z߳.zdNu4]dm#+KꟿD endstream endobj 85 0 obj 581 endobj 86 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 84 0 R >> endobj 87 0 obj << /Length 88 0 R /Filter /FlateDecode >> stream xTMo0 WQ۾:`vh"K@"u~-'qd;xGROL{q%{JC J8w^؛D#+omaߙg_m@WlG79w B>J .sj Kr"ȗp}MO-_|Ʋ-ޡ6xB7H &ծBa CD%A..d598 (B&'B@c)!~2 wP[ѬW!l^I :(9Y>s'ibk&}WuY 5w&&kWV3R E}JiC$8D9m }Sxj`B2ׅTUrHH CUn@ǺN̈Đ$|boa0/Κ#sl5J!ʒߤ endstream endobj 88 0 obj 496 endobj 89 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 87 0 R >> endobj 90 0 obj << /Length 91 0 R /Filter /FlateDecode >> stream xUKS0Wf@ö(X li}W_1gݵ>O+)`@9wL8Sc 90ĢXHxa]׸9u=ئ]C3:0/F3Gp*oMaQXiCFJD> endobj 93 0 obj << /Length 94 0 R /Filter /FlateDecode >> stream xTK0WqQ;v8FU>v+P m=ZQ08lbkI ,K{ny~3{!,(a܇(Fq {-l Ž$Cn6[0YtiqoUg a|Nw(B:RQB)eIw1Hs|)Q d3Hi/ې7vY u-$jc'Dؾ:eȊ JD bV !Q^,[\8FCDjyx"bEĔ1q)@QAXb_Je3mK%=C yA*ZUy1vZ̒&{$?Lf:{4$Bj;1\sDu K'6K% IUyl9dQD d g"k(ٗ(}4[K2ﺃt̊q*F-zYCLkp5{wܵ5%ˢd*e9|8)G'#6E7is fͳz> endobj 96 0 obj << /Length 97 0 R /Filter /FlateDecode >> stream xTKO0WxǏvo=TiPIH4)q_8)M]N@o ga1N|zL1$2!8Z>ð۽!>V ]zGxXt7^^"rCXOp@juTJpIp}*wm9o7}e٨Z%;vׅ#1t,!Ӂ[vHtm5:DT=1d]ݵ_#9QlAK.BTa]l ri+~b&7 [AZ@Cмlb ePLai0՟RZ*m];O|Srv2; B%\ >vMEc]Kg*D h,ీRH@Ld|Ku!pCK~EzyM nh<D1̨ǰW'%s4 vt0J{$|cJ/ endstream endobj 97 0 obj 501 endobj 98 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 96 0 R >> endobj 99 0 obj << /Length 100 0 R /Filter /FlateDecode >> stream xUo ~_qlc_I]-&+~ivw|kdF=FA01DhLXb Cc׸Kt#CCA |t9 Mt=I_Un}J"HmL ͤY!#I0ȷp{֭^/۪fvS~ZN+[χa'v80$!;TXP""){Bsm~u9Eo1#rDjq:2'~ t$?9vhF*Ke=*p hfZ5RJo{V]Taaܑ2#i]ߺޙWy).eY}z:^/.*l湀23 hJ8 /_2{,g@zۖ7ޕ;tCهe:>d6t3NR}Vjf"bG'ՍiݠӉ*shIg6z(#O1OpH=9/_.a^`ً)u#Y endstream endobj 100 0 obj 577 endobj 101 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 99 0 R >> endobj 102 0 obj << /Length 103 0 R /Filter /FlateDecode >> stream xUMo0 WFIe嶭d5CS F"'9nn"除g!AHma!@C" ^po؏-d7w]Y<_AwDM冰>(B )29$3.n/>Vke]L |N唽Λ-0|(!р :fȚ JD1yGlO/V-1M dQH!N{C(s'{`L-IK} *ϕQި ^BCuVU \*c 3`Ph1V]T#%:"H $rg ӻPV{1KQ2/zq{s#"|ҵ9WI' q^& = ew̲*v6dQĨR) L`*(T]=z)_B( y#* c:db.cRwPVM~}X2hR D!~@/>ưki=ia$ٯ+Sdk endstream endobj 103 0 obj 581 endobj 104 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 102 0 R >> endobj 105 0 obj << /Length 106 0 R /Filter /FlateDecode >> stream xU]o } ۶0)>4d%ı`8M={'wn 3Xァ p ea_c{XǾl!+;ɻ0z⭷*6{xoo(O 8B,dW U_5Ժ g|>&r^jM|͔w h9h@D_ 2]cD0NBYiu9n>#rDjp -q( & ,{Ř%|RꝄ*%|b )iʪXK!ՠT+e*K]k/[-Xd0 F*JІbHba<,BesSm7ʻ*;쥪 &a䷲5("/~^WyiziBFE $\ q8cKl]MkIzp3;7^p\b:fcr#͛Z̟UTuγn|2:|;=$׳39g9Dӳ Kj?E_ endstream endobj 106 0 obj 580 endobj 107 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 105 0 R >> endobj 108 0 obj << /Length 109 0 R /Filter /FlateDecode >> stream xU]o0}WFZk0۶0+RjB!HCf{Z Q|}ǀ{!cB4EY84p{{iCC8 t) Mp=I_UnE> ^E@^ڐH)CB8bnC[۲fvczZN+[u_7eft>Q z}UXP""¬ 6뢩{aNɛ@EfCOIQS;dLL vhFAT2u绦QgRJ  tUr5;]Xb'8^淮jS*OD1&RX+,y+xtX>9 Za5nkfFI(>h_+KIB(wOB.ɛv>7!,ʔnJ3GF Ww]|8wlCOQ@mj?5GόĹN N(Wj3izt8(98xf{|;Cx|dL$Ξi֛ endstream endobj 109 0 obj 584 endobj 110 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 108 0 R >> endobj 111 0 obj << /Length 112 0 R /Filter /FlateDecode >> stream xTn0+)6M CBbJez8 %Đ#.B4b=  DŌ'Y8v]^`Xq߭5|l1 |U!wY*BȖ(ZR@סq6psmYYw~ C6Veλ-;p*h>:82}_<Q ,Af3]1uS9$p ={! _Sz^p vXKC7+BTqr s!$oŒ Ot B& ~_]F>" dZyIa1jq8$#yy۬c[w"h&Ӹ׫}_dJiHXK㊦C5Omȉb2%[F#@O Rܹ?pp!YG-r<k*d% oj[x endstream endobj 112 0 obj 499 endobj 113 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 111 0 R >> endobj 114 0 obj << /Length 115 0 R /Filter /FlateDecode >> stream xUˎ0wDj\8өEt*8 0@ڀ !vbS@wf!)SXt 0 Za6f]Buv-Agкswb~QamCXJG bĨdկnzUg|>$Ge.v hq,!р#at5dLcu(uK9zcQ0&fa \&oLL6aLALqN,)cvC+?w2_w尿mZnU=6;(R [) g ^UER{fDcS&2("[?2q[EUT)l*6v9YNqL̦ܼ-&J\Jatݘ}?,1"~ᲵQժ +k)Sq2[3T6:ܨ/C1A#^TCW^Wtʺ0:}av9nQF2I6`5%XUrSѡ+V(-c;É{r?_2/;a6F%[)LH endstream endobj 115 0 obj 605 endobj 116 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 114 0 R >> endobj 117 0 obj << /Length 118 0 R /Filter /FlateDecode >> stream xUMo0 WF߽m:lt C[ٕu,ˎ4iD3)4p@gvIs&x10BԪZتjeNoa%8drʲ\v#藲.-vNYJ},{BΔ3r "9p`É<*$yFt@3je`1>CrT-4.%JA E4MQJdhxJ%IbyJߪnLei~ SjDd}t9jֵZݜܜ7c!wyW ef9K2.̾2YxhD;Uc {̡E#ƾ>s*)b8/{9焢_}Sv~yvj~-޳tWԸ^Sٷ^ (F9@ǀTQQ?\Zb}'hv<Sl|gǍsovvCaJ;m`#L0tJKFZᑙ#v?'GQ,a” endstream endobj 118 0 obj 657 endobj 119 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 117 0 R >> endobj 120 0 obj << /Length 121 0 R /Filter /FlateDecode >> stream xUMs W1iMiILGcc[31R܏_dxyy (}/]#$.x0 b!a[+ ^[جo[ | ,x?v6*6M> ^G@ڐH)CB8aCk^y/ttZN+;M_A݌%$гÁ!VWCRaA#f2kW-/M dQHCkm($6 1[/Svz_iVo|b YQ5UT@f(!vlL-U@`N8H8vo]&7< ŘHa>--Bo}Sm˻j)]s$qJ)t$!PvW,tI=QFBF>76706iq@.up9 dͪ~60i}kF ~SaL1y 6ZWjfy5c\J]/Qg@PtO1J`ϊs_$]<>yK0}b endstream endobj 121 0 obj 582 endobj 122 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 120 0 R >> endobj 123 0 obj << /Length 124 0 R /Filter /FlateDecode >> stream xU]o } [0)=4d%$`8lM>{wj 2X x(ea_ǽ}\Ǿl!+[sp{gЕ#ě`> TlC"d냴!%4I49$> ^|,U#4pW˦(A5 V){cܔ;q-$cLWay'̺d6SXR7F9"5k8I9#a`L f_+ V^\A\J!נTP(uTN*_~}JI$ql%7UYB4c 㾘%]iUݗjXL?7 v\֛NF R'a}+3VJPni˻zY e$d1Sm F1y7\|$MvOSvzGug*3-t4zb%WFrp$WY;&idp6xfwE{l1Iף3yfw IwO^,}'ԥ endstream endobj 124 0 obj 573 endobj 125 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 123 0 R >> endobj 126 0 obj << /Length 127 0 R /Filter /FlateDecode >> stream xTn0+voRn`-QFӿ/-EM$A83oyG`/Ҡ-ՎA)2LREc0D }iƏvoc 6#O-7 |U!l̀!i%Xk`6]ܜ}(}US>B|' _Y66dM[ͧ-8##WSu-"^u/lV{˝yN`S"eCHcBRb/(C@u0,װfYo\U]\oT In @T)]_B1R30T*uT@8!fCWm`0Ԣɾ}I> endobj 129 0 obj << /Length 130 0 R /Filter /FlateDecode >> stream xTMs0W=Tl}2p`&3d] iBk{,ϳv" 1;q?bA9D$X8 Cx_`q~8@8}l(Gqsbyr.ob d mDsjV*vbHvps,g W]۲ho!,>$j+vׇ17rn!Ӄ{u0J}X!?x!Y,U^W*ǴdR+8BgPa>?官!Nkvu@ɠ4k벫%OΊv?UBlrZ \*ʪZ:㝦َ+h+|u:sdRA5y7z@F,f$Dn]fMZoпSXFLԈdm`j=9z{k?v:pܨa_>9"^.D-ΎB=^Xp`1 endstream endobj 130 0 obj 477 endobj 131 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 129 0 R >> endobj 132 0 obj << /Length 133 0 R /Filter /FlateDecode >> stream xTMS0WR:3)@80I> endobj 135 0 obj << /Length 136 0 R /Filter /FlateDecode >> stream xTMo0 WlYm:`vh{%5ةlݿ4NaD3IzEXSSX:C@F pj5wVͯ=Վ⟕c ܱA}2Q,{BfMPgŏ9qFIEy wD!ф=S%4_?}|]CE/s_ PJp:`Ģ80b7rSp@KgYlJ/V7U^=;{.#iX}ԏjZvp*GʲrZ?>d Q`D_\:MÔ)i!FC?f[m'*GSX a!~u]2oSˍGnQC'74'5 endstream endobj 136 0 obj 495 endobj 137 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 135 0 R >> endobj 138 0 obj << /Length 139 0 R /Filter /FlateDecode >> stream xTn0+.%͍(lK$]D=4 sY>(" 3,6,I P9c0}a}pgU(VХ1PvJZIի!]=J&w 0>{[M]ho!ާl vzcukB`V|T!YjhzaV 6_r)35A$:El4P;as]/uS +hZ߳UeV4*Ϫ!Rg'Ӂ$u$Aq(u^T?!a%4ݗL~vGA&um$}D׉b'$f&|˻^T6xᔁXGLPOY}NUvq'Q -m1?4s>RntF||fI> endstream endobj 139 0 obj 495 endobj 140 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 138 0 R >> endobj 141 0 obj << /Length 142 0 R /Filter /FlateDecode >> stream xUKs0+J|+3n!΁l3' 0H~Z hd p%3p`;DJ8d v;wM o|W!lϡԺ@J™pwW_r]i=?oIw53 m-OKH 0u5fȈ JD=1랐Ţ'/1䳠w\^Tuj5e="5U4;ԓ\))Vg!NrŕWUeZ4]2(#.@yM+ςAe#bs\uzT6Z穮G먪8j}Zo2yܔ3{hmRt6I2T0wBEI~4KqT&HW^ f6Frps‰#)}{139#H_oL͵ endstream endobj 142 0 obj 586 endobj 143 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 141 0 R >> endobj 144 0 obj << /Length 145 0 R /Filter /FlateDecode >> stream xUKs0W-p@]IJgz gr9ੑmW >yW߷^=x;p`gG #ak+lOо؎5n=!| 2x^5f@]ņ>އ(B>RPBRD>3i/Fs]?\Js]!}O){g\|nKW;8q4;-!nϐyP"nN:K*9GF}Dj8o ygD X s9c|h.OU ]BUPo}Rj"߹}/[jmLXJ8(,%I2-[Sy T[DeUz3ǯoOHM6>N骼 %D %7~Bە@v_T,ҽU҆20Z۴1L" ݤv4fIϪ;EÞdwuq"im49u[ˋ_YT%I|ViqU"_=Ac)Z1G)QtI&*c,dD[A߻,焆|d2hU<)~Pgv=) BSj#C v|q#2qrSjW endstream endobj 145 0 obj 635 endobj 146 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 144 0 R >> endobj 147 0 obj << /Length 148 0 R /Filter /FlateDecode >> stream xTMo0 WFIeuݲ-/qcm(YN4vZk,RH5J 'qPdDNڐ3hXB¤4MMk&MQte;vܖw=[H9pLQ_+DKfeAU?jމsLB9[G.#}P :t9i+@[4il}*Ҧ. $Q8.Ɣ뺨{W}D1ӊ-DמeiBN~)my#D"$ZQ8?szѱ兙/Pv6%TN $K}IUmQuSy6ZSsO PgܖZ\g~_M>El٬/ 퉊B> endobj 150 0 obj << /Length 151 0 R /Filter /FlateDecode >> stream xTKo0 WFI~):`Y 9Jb]n?ɯ$N6,)#)>9мS;Au:B|.a[-h%FxBO6p(hХ=9q3979r>z@!.%4B>p& ͗\UZ%U+=y-:a){glɦvÁ! L]GȈȻfERdCpa#R"L.#yRi6bcYBQ?OU{-9ntD:@%'U^Ta>qgayb2Ubw˔{Ejʰ;SRUZ'B`- vW2-ldQDyI5L`0d_]: ei)u=e6e":OҸ:j3.Kl?xP+erp&VLF%fY2w2UIV/Iq*l9Mr 򥈕j%J "CsI[{mc &zY{;g^oH“67}M~ endstream endobj 151 0 obj 588 endobj 152 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 150 0 R >> endobj 153 0 obj << /Length 154 0 R /Filter /FlateDecode >> stream xUKo0 W=%QlY;j` qκQ~&ceX'}" ̷SI Iy W,l`#+6wl e ?A<<2`܃gڮ!;#|CX9C!\v*)d` |ᒱA]RD '"%oΗ(ZWvRW,kEY@%ت\W R͠ADfY 2}t9nIQr gP[dsҷ|=%}]#gI:6$m,ˣ,L? I.t4mvC(|OW.MM/)RlY֥ @χlFI_˚e*iw$z5VKvF9YZկ$IBDiuFD\惬b tڼHnLY|eF\ξSR896^ϙǤOEpt<*}<|eI  endstream endobj 154 0 obj 606 endobj 155 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 153 0 R >> endobj 156 0 obj << /Length 157 0 R /Filter /FlateDecode >> stream xTn0+vm=p# 8Ñm1H2}Ib9SQG;;##@?.¤Վ=v XE\nYOSx^`XЬ>|~n!_pCn> endobj 159 0 obj << /Length 160 0 R /Filter /FlateDecode >> stream xUn0+h5;\DuKCMBlJ&_Rmvzj"&ތ;w@1o]Qpy Q_n,?AwbS>c76v5ջ>u78o71_@ZA RΔ{D[}JMK̼LRS }唽hɺv.q 5سÁ! l]2dT[b-!WWY}<(xN`QHm0@>%K⹚cP@^< 5 6],Q)#h<4+U'( O>/ۧ'-VӇ|Um)KS_ [)C4 nGF.y]2(#QD#>Z'a$>=pwU;ؐzLiCZ,猅Qr//, %񻽿s֙eSnL̪_o~~U8ebFQeYzAF붠Ls O- vIX `49x}G^h)-G5C>İ>̯( ʔ/ endstream endobj 160 0 obj 607 endobj 161 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 159 0 R >> endobj 162 0 obj << /Length 163 0 R /Filter /FlateDecode >> stream xUn0+5;uKCLBd6_R%+S0'͛pP@sO%x[ga+OѮH9vca7OG;_{. oq:|SyEW%TH)E .bnSKJebr7KxKvV󫷬k'u͎KAnjY (mY\_D(~,(V$UiU)x0"R A HjFss@^2v_xTV), YtV&t$G7ot+3'dML4uN|o"&|]m.K $䦈j~ATB]ƓgUyɼ!x"]MRL[_Qj2gE4gfۀ0l̿]dQ (fU>|Soiѧ^eZ&z=ljfTVt捘h oLWۅ F!̬Y *\CFJ^x5M(61l;hz9Fq "GggWh; endstream endobj 163 0 obj 609 endobj 164 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 162 0 R >> endobj 165 0 obj << /Length 166 0 R /Filter /FlateDecode >> stream xTn0+19}\$MSFжr$Q#%vsJ" "1[f4tX {h1Fbˈ& 0z9vca7Y5 +%~&]x&F]dR2.jEbMb W҆KBϹܟ .w~^e/Oo!ƾJwvRW#16dh!S: $rCz-5ZDT0Vmgᖭ6)\ (dㄴj*~a*c#TP\ͶZ2`1"oqț&_oˬ'l!,0֐bsLO_Zk6b8_[Dlj֐%w/$\E&•"ۆuk)Ntv9VEJyMp05ֳE^@r*wN `3f4q{Q T1l+'5s4p% ?Y endstream endobj 166 0 obj 502 endobj 167 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 165 0 R >> endobj 168 0 obj << /Type /Action /S /GoTo /D [17 0 R /XYZ 72.0 720.0 null] >> endobj 169 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 680.124 180.554 689.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 168 0 R /H /I >> endobj 170 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.998 680.124 539.998 689.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 168 0 R /H /I >> endobj 171 0 obj << /Type /Action /S /GoTo /D [20 0 R /XYZ 72.0 720.0 null] >> endobj 172 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 668.124 205.685 677.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 171 0 R /H /I >> endobj 173 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.998 668.124 539.998 677.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 171 0 R /H /I >> endobj 174 0 obj << /Type /Action /S /GoTo /D [23 0 R /XYZ 72.0 720.0 null] >> endobj 175 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 656.124 200.66 665.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 174 0 R /H /I >> endobj 176 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 656.124 540.0 665.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 174 0 R /H /I >> endobj 177 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 72.0 720.0 null] >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 644.124 228.44 653.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 177 0 R /H /I >> endobj 179 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 644.124 539.999 653.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 177 0 R /H /I >> endobj 180 0 obj << /Type /Action /S /GoTo /D [29 0 R /XYZ 72.0 720.0 null] >> endobj 181 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 632.124 221.2 641.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 182 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 632.124 539.999 641.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 183 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 72.0 720.0 null] >> endobj 184 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 620.124 205.1 629.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 183 0 R /H /I >> endobj 185 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 620.124 540.0 629.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 183 0 R /H /I >> endobj 186 0 obj << /Type /Action /S /GoTo /D [35 0 R /XYZ 72.0 720.0 null] >> endobj 187 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 608.124 227.87 617.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 188 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 608.124 540.0 617.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 189 0 obj << /Type /Action /S /GoTo /D [38 0 R /XYZ 72.0 720.0 null] >> endobj 190 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 596.124 208.99 605.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 189 0 R /H /I >> endobj 191 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 596.124 539.999 605.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 189 0 R /H /I >> endobj 192 0 obj << /Type /Action /S /GoTo /D [41 0 R /XYZ 72.0 720.0 null] >> endobj 193 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 584.124 232.88 593.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 194 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 584.124 540.0 593.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 195 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 720.0 null] >> endobj 196 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 572.124 236.77 581.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 195 0 R /H /I >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 572.124 540.0 581.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 195 0 R /H /I >> endobj 198 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 72.0 720.0 null] >> endobj 199 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 560.124 230.11 569.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 200 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 560.124 539.999 569.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 201 0 obj << /Type /Action /S /GoTo /D [50 0 R /XYZ 72.0 720.0 null] >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 548.124 197.33 557.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 201 0 R /H /I >> endobj 203 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 548.124 540.0 557.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 201 0 R /H /I >> endobj 204 0 obj << /Type /Action /S /GoTo /D [53 0 R /XYZ 72.0 720.0 null] >> endobj 205 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 536.124 205.11 545.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 204 0 R /H /I >> endobj 206 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 536.124 539.999 545.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 204 0 R /H /I >> endobj 207 0 obj << /Type /Action /S /GoTo /D [56 0 R /XYZ 72.0 720.0 null] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 524.124 248.42 533.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 207 0 R /H /I >> endobj 209 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 524.124 539.999 533.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 207 0 R /H /I >> endobj 210 0 obj << /Type /Action /S /GoTo /D [59 0 R /XYZ 72.0 720.0 null] >> endobj 211 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 512.124 200.11 521.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 210 0 R /H /I >> endobj 212 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 512.124 539.999 521.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 210 0 R /H /I >> endobj 213 0 obj << /Type /Action /S /GoTo /D [62 0 R /XYZ 72.0 720.0 null] >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 500.124 215.1 509.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 215 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 500.124 539.999 509.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 216 0 obj << /Type /Action /S /GoTo /D [65 0 R /XYZ 72.0 720.0 null] >> endobj 217 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 488.124 200.11 497.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 216 0 R /H /I >> endobj 218 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 488.124 539.999 497.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 216 0 R /H /I >> endobj 219 0 obj << /Type /Action /S /GoTo /D [68 0 R /XYZ 72.0 720.0 null] >> endobj 220 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 476.124 222.87 485.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 219 0 R /H /I >> endobj 221 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 476.124 540.0 485.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 219 0 R /H /I >> endobj 222 0 obj << /Type /Action /S /GoTo /D [71 0 R /XYZ 72.0 720.0 null] >> endobj 223 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 464.124 211.77 473.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 222 0 R /H /I >> endobj 224 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 464.124 539.999 473.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 222 0 R /H /I >> endobj 225 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 72.0 720.0 null] >> endobj 226 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 452.124 195.67 461.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 227 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 452.124 540.0 461.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 228 0 obj << /Type /Action /S /GoTo /D [77 0 R /XYZ 72.0 720.0 null] >> endobj 229 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 440.124 211.22 449.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 230 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 440.124 539.999 449.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 231 0 obj << /Type /Action /S /GoTo /D [80 0 R /XYZ 72.0 720.0 null] >> endobj 232 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 428.124 225.11 437.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 231 0 R /H /I >> endobj 233 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 428.124 539.999 437.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 231 0 R /H /I >> endobj 234 0 obj << /Type /Action /S /GoTo /D [83 0 R /XYZ 72.0 720.0 null] >> endobj 235 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 416.124 218.44 425.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 234 0 R /H /I >> endobj 236 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 416.124 540.0 425.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 234 0 R /H /I >> endobj 237 0 obj << /Type /Action /S /GoTo /D [86 0 R /XYZ 72.0 720.0 null] >> endobj 238 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 404.124 218.44 413.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 237 0 R /H /I >> endobj 239 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 404.124 540.0 413.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 237 0 R /H /I >> endobj 240 0 obj << /Type /Action /S /GoTo /D [89 0 R /XYZ 72.0 720.0 null] >> endobj 241 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 392.124 236.22 401.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 240 0 R /H /I >> endobj 242 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 392.124 540.0 401.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 240 0 R /H /I >> endobj 243 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 72.0 720.0 null] >> endobj 244 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 380.124 222.33 389.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 243 0 R /H /I >> endobj 245 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 380.124 540.0 389.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 243 0 R /H /I >> endobj 246 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 720.0 null] >> endobj 247 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 368.124 239.55 377.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 248 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 368.124 540.0 377.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 249 0 obj << /Type /Action /S /GoTo /D [98 0 R /XYZ 72.0 720.0 null] >> endobj 250 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 356.124 233.44 365.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 249 0 R /H /I >> endobj 251 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 356.124 539.999 365.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 249 0 R /H /I >> endobj 252 0 obj << /Type /Action /S /GoTo /D [101 0 R /XYZ 72.0 720.0 null] >> endobj 253 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 344.124 214.0 353.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 252 0 R /H /I >> endobj 254 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 344.124 539.999 353.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 252 0 R /H /I >> endobj 255 0 obj << /Type /Action /S /GoTo /D [104 0 R /XYZ 72.0 720.0 null] >> endobj 256 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 332.124 214.0 341.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 255 0 R /H /I >> endobj 257 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 332.124 539.999 341.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 255 0 R /H /I >> endobj 258 0 obj << /Type /Action /S /GoTo /D [107 0 R /XYZ 72.0 720.0 null] >> endobj 259 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 320.124 209.56 329.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 260 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 320.124 539.999 329.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 261 0 obj << /Type /Action /S /GoTo /D [110 0 R /XYZ 72.0 720.0 null] >> endobj 262 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 308.124 215.11 317.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 263 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 308.124 540.0 317.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 264 0 obj << /Type /Action /S /GoTo /D [113 0 R /XYZ 72.0 720.0 null] >> endobj 265 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 296.124 209.56 305.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 264 0 R /H /I >> endobj 266 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 296.124 539.999 305.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 264 0 R /H /I >> endobj 267 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 72.0 720.0 null] >> endobj 268 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 284.124 214.56 293.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 267 0 R /H /I >> endobj 269 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 284.124 540.0 293.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 267 0 R /H /I >> endobj 270 0 obj << /Type /Action /S /GoTo /D [119 0 R /XYZ 72.0 720.0 null] >> endobj 271 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 272.124 208.45 281.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 270 0 R /H /I >> endobj 272 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 272.124 540.0 281.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 270 0 R /H /I >> endobj 273 0 obj << /Type /Action /S /GoTo /D [122 0 R /XYZ 72.0 720.0 null] >> endobj 274 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 260.124 207.34 269.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 273 0 R /H /I >> endobj 275 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 260.124 540.0 269.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 273 0 R /H /I >> endobj 276 0 obj << /Type /Action /S /GoTo /D [125 0 R /XYZ 72.0 720.0 null] >> endobj 277 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 248.124 209.56 257.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 276 0 R /H /I >> endobj 278 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 248.124 539.999 257.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 276 0 R /H /I >> endobj 279 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 720.0 null] >> endobj 280 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 236.124 227.87 245.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 279 0 R /H /I >> endobj 281 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 236.124 540.0 245.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 279 0 R /H /I >> endobj 282 0 obj << /Type /Action /S /GoTo /D [131 0 R /XYZ 72.0 720.0 null] >> endobj 283 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 224.124 201.22 233.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 282 0 R /H /I >> endobj 284 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 224.124 539.999 233.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 282 0 R /H /I >> endobj 285 0 obj << /Type /Action /S /GoTo /D [134 0 R /XYZ 72.0 720.0 null] >> endobj 286 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 212.124 195.67 221.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 285 0 R /H /I >> endobj 287 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 212.124 540.0 221.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 285 0 R /H /I >> endobj 288 0 obj << /Type /Action /S /GoTo /D [137 0 R /XYZ 72.0 720.0 null] >> endobj 289 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 200.124 240.65 209.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 290 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 200.124 540.0 209.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 291 0 obj << /Type /Action /S /GoTo /D [140 0 R /XYZ 72.0 720.0 null] >> endobj 292 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 188.124 216.78 197.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 293 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 188.124 540.0 197.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 294 0 obj << /Type /Action /S /GoTo /D [143 0 R /XYZ 72.0 720.0 null] >> endobj 295 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 176.124 192.89 185.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 296 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 176.124 539.999 185.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 297 0 obj << /Type /Action /S /GoTo /D [146 0 R /XYZ 72.0 720.0 null] >> endobj 298 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 164.124 212.33 173.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 299 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 164.124 540.0 173.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 300 0 obj << /Type /Action /S /GoTo /D [149 0 R /XYZ 72.0 720.0 null] >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 152.124 228.99 161.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 300 0 R /H /I >> endobj 302 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 152.124 540.0 161.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 300 0 R /H /I >> endobj 303 0 obj << /Type /Action /S /GoTo /D [152 0 R /XYZ 72.0 720.0 null] >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 140.124 192.89 149.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 303 0 R /H /I >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 140.124 539.999 149.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 303 0 R /H /I >> endobj 306 0 obj << /Type /Action /S /GoTo /D [155 0 R /XYZ 72.0 720.0 null] >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 128.124 210.66 137.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 306 0 R /H /I >> endobj 308 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 128.124 540.0 137.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 306 0 R /H /I >> endobj 309 0 obj << /Type /Action /S /GoTo /D [158 0 R /XYZ 72.0 720.0 null] >> endobj 310 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 116.124 200.67 125.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 309 0 R /H /I >> endobj 311 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 116.124 540.0 125.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 309 0 R /H /I >> endobj 312 0 obj << /Type /Action /S /GoTo /D [161 0 R /XYZ 72.0 720.0 null] >> endobj 313 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 104.124 245.09 113.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 312 0 R /H /I >> endobj 314 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.998 104.124 539.998 113.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 312 0 R /H /I >> endobj 315 0 obj << /Type /Action /S /GoTo /D [164 0 R /XYZ 72.0 720.0 null] >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 92.124 278.42 101.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 315 0 R /H /I >> endobj 317 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 92.124 540.0 101.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 315 0 R /H /I >> endobj 318 0 obj << /Type /Action /S /GoTo /D [167 0 R /XYZ 72.0 720.0 null] >> endobj 319 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 80.124 223.44 89.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 320 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 80.124 540.0 89.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 321 0 obj << /Length 322 0 R /Filter /FlateDecode >> stream xOeEv9@x\+yh;S#,}w{[>𿿓/ow漺qO>\z훟?~?רooُv}2Ϳwe_~/OUԚ74WN:nTOP]R'Y&Y&YVdYɲe#F,;Yvd9r A,'YN,XC,!re9ŲbYX"eeeeeeee%JuY>S┸CC&x"8Ep8@0kO%1 Q@0 F*U6l"D`.]"8Ep y`  y` `"!!!)))UVl9|1o Ƚ)ǟʛy P~1 i־l#|ӹ)ZJ-uRݥ~jKTe#N,;Yd9r$IS,!re9ŲbYN,E,KRIJ LLLdYɲe%F,Yvdr A,'YNbX!qebX)qe"Q2222222ɲe%J,Y6dɲe'A,YNd92C,<2OS,,bE,ee%}>IsO'i4qս~oיܿw_/O[#Z{`.RPՍ)QuzHȲe#N,;Yvd9r$IS,!re9IJbYN,X"e)ddddddddYɲe%F,Y6dɲ A,'YNd92C,82NS,e"Q222222ɲe%J,Y6ldɲe'A,Yd9rebX!yebX)Y2Xf!K$}>IsO'i4Id(g}=>=_i4O|sBuzH}$:R_?Id9rb܄b܄zpSj LLLLdYɲe#F,;Yvdr A,'YN\qJ-ANr=)X9.b甚,,,,,,,,+YVdȲe#F,;Yvd9r$I,X='ԧX=b,,,,,,,+YVd8H6,(KM?5\~R\7Y?43v2RIuHT7ԃ,Yd9r: %XPR: %XPP\g& $$$J,+(F}dSk'#uzH}dNr$IS,Y(ruJj\guJj LLLdYɲe%F,Yvdr A,'YNbBI-,ԧXPR: uuJj LLLLdYùS]V{ꛯ#fvv>i^jڪUڧ)qڤA`.]"8Dp)-d຃l?>Ap@1 u"""""""XE`*M6"E!CN"8Ap]21+c^l?. .XCCCSSSSV"D`.]v"8Dp)bA b\A ; b  LL&e&2IɤdRf2=>}꾰GhszÖS~Ƞ<,oOʯWMu4IL夺NeQN\夺NfI^Hu͢TTTTTTTTVSLj3fTvS:Lu4iT'S[:%I夺nQNZMj5jT6SM0aTNS:Iu뢜T.OR]G('uKBxZMjU1*99_|ijQwʯayTvS:Lu0iTNR]('uKTA/IuTׁ/M5L5L5L5M5M5Mj5k[ϣV>)_g%ʯiyQ0iT'#b:&&I夺I^HuTTTTTTTTVSLj3nTvS:Lu4iT!3Iu4Ta3Iu8:tFVSᣛx1ًu1Y3Z}߿{׿|b4Ƶ1^|WS&'뜀A:' yZ)_$7iTהrR]S&OR]S&IuM('5eTTTTTTTVSZMj3fTvS:Lu0iT')夺LL2I^HuM(70004444jT6SmLj7nTS:Mu$5eTהrR]S&IuM$/Ljjjjjjjj5jS5_ Ύ]}};Y>)Oy|P~TSzʐrR]ORN)C )70000444jT?I8ΝIy/W<-7iTNR]ORN)COR]ORN)CIu=eHVSZMj3fTvS:Lu0aTNR]ORN)COR]ORN)C )70004444:^Tb6VzOuuay|R3Z>(:MuEUeuR}0PrS S S S SMSMSMSZMVM?KyX,?Oy|PxKiNS:MujAqj'F!(Tjjjjjjj5jT6SmLj7nTS:Mu$NrS:Mu$54TPTАrR]CCIu )7000444jTVSmLj7nTS:Lu4IkhH9'!夺R]CCM5L5L5L5M5M5M5Mu1{bVotx)ȫ1<-ߎqlaS:MujAqj'IQH5 F10004444jT6SmLj7nTS:Mu$ug夺 Tםa3LB0M5L5L5L5L5M5M5MS~Ƌ/o}՟De~ <(oLj7nTS:Lu4IvrR]ToץmToץZMץm^IץAץiNS:MuToץm'ޮKIv]NNvrS S S SMSMSMSZMj5fTvSMu0aTNSz.m''uiIvrR]R]jjjjjjjc/ƀ积߿~b_w O~9ۯJqJxNԏ#uPM,Yd9r0 j|  j|"!ddddddddYɲe%F,Y6dɲ A,'YNd9kcZ,k|?گ222222ɲe%J,Y6ldɲe'A,Yd9rI~-X)XXamE,Ok LLO>zbpU>}WWw}ٟ>_;kyX,ίmAy3fTvSMu0aTNR_I~~m#'T>R_M5L5L5L5L5M5M5Mj5kyX,ίmAF4iT'ϯmz?$T6rR_M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuFNkOR_I~~y!TTTTTTTToc/ƀ+o} _|T|R~СZ>(~Pwʯ:0aTNR-TA$rj9IZ Bjjjjjjjj5jT6SmMj7nTS:MujAqj'IQH5 F10000444jT6SmLj7nTS:Mu4IyjIyjTjRbaaaiiiTxQ~?o|ǑӘ9I9IyZ)~NR7'TvS:Lu4iT'DRN^I9DRNjjjjjjj5jRm V>)ojqX0iT'DRN^I9DJ^Hu rS S S SMSMSMSMSZMj3fTvSMu0aTNR]/T ")'HIu RBjjjjjjjj5۱/oo?xkS__ѧQTR^-_JN<,7jT6SM0aTNS:Iu죜T>OR]('uOB`ZM굩lohȯM%iyTR7'צjNS:Iu죜T>Iu죜T> }jjjjjjjj5jT6SmLj7nTS:Mu$urR]$?Iu죜T>IuTTTTTTT}OU9^ߨ߾bR{)>Iu$urR]$/QnaaaiiiiTVSmLj7nTS:Lu4I\夺QN\夺I^HuTTTTTm6[J-͖rO_yI}x[xaM[Z>(iy|:Lu4I夺΁I~:F9s`R](70004444jTw~>oiyI(WMu4IqjAqj'F!(TTTTTTTTVSLj3fTvS:Lu4iT'Ayj'IyjRBYH5VSͤRgR?>=okyAJ/<*WS~mq(˛:Lu0iT'rRN륜z)'夺^)y!RNM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muz)'夺^)I륜z)'夺^IVSZMj3fTvS:Lu0aTNR]/夜TK9%?IurR]/唼z)'jsUŠ+ ~w/}{yϹ6j6NmεrS:Lu4iTsTsTsTsTsTTTTTTTTVSLj3fTvS:Lu4iT'\9\ORϹ6rRϹ6rRϹ6rS S S SMSMSMSZMj5fTvSMu0aTNSzsmzs}>?I>I>|^H>M5L5L5L5M5M5MfK9SUŜ|kYׇO?Wf'wj'wTA rj9HZNR-'Bj)ZMj5fT6SM0aTNS:I5RT 8I5NRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujAyj'IYH5 f100044445yJ}1щOO߾Ƿo5[OSG G AS~TS:MucrR]wLI~crR]wLI^Hu1EVSZ/2h<-Y>)jNS:Iu1E9;('u夺crS S S S SMSMSMSZMj3fTvSMu0aTNSTSTScrS S S SMSMSMSVOUi/VۿW^8/(~KNyZnTNSNQNd'E:YD9Ejjjjjjj5jT6SmLj7nTS:Mu$urR]'$?Iu,T" Ejjjjjjj>>>>>־n}Zukڷo[k߷־o}Zckڏ[k?~};kDZq};kǹQv>GZZZZZZZZukڷo[k߶־o}Z}kڏ[k?~nYkU};k繳y};keg}ϭ־6S^kOܮV[Uߩv}mUszirQmZckϭ[k?w]ߨv]|ucQcQcQm}l}l}l}n}n}n}Zukڷo[k߶־o}Zckڏ[k?~nYv}YvչF竲Fuk׭o[k߶־m}Z}kڏ[k?~nZFFF竲F[־]x]ڮ9g_q|=,oOkZ>(oiyj7nTS:Mu$7@No6Tl9d?/fM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MufIq '>n6T7HNM$7000444jTVSmLj7nTS:Lu4IM$'&DrR}ly!&jjj͖fKi}<{ӗо<_$j~Xj7aTNS:Iu('5TxrR]1 ZM<5Nf˫qZ4iT'夺ccQNk)DN^-x"m'O;TvS:Lu0iT'Nz;DNNiy!ۉTTTTTTTTVSLj3fTvS:Lu4iT'Nz;z;DNNi;VSZMj3fTvS:Lu0aTNRHIv"m#?Iv"m''ۉDNnaaa6[J-͖fKiyċ[]?}ǟc~h#O;F7'FnTS:Mu4I rj9HZNR-'Bj)ZVSZMj3fTvS:Lu0aTNRT 8H5NRT$8I5 F!(ZMj5fTvSM0aTNSAyj'IyjRBYL5L5L5L5L5MfKiSbx3ۡ3by|Px;4iyvhfvSMu0aTNSZR-TI$rj)Z Bjjjjjjj5j8Rέ|R-y|P-yZ)_o<,7aTNR]:IuM$?IuM('5QnaaaiiiiTVSmLj7nTS:Lu4IkBG9 夺&tI^HuM(70000444jkBTE}1҃^LƗk3S~m(˛kKFyTvS:Lu0aTNR-TA$rj9IZ Bjjjjjjjj5jT6SmMj7nTS:MujAqj'IQH5 F10000444jT6SmLj7nTS:Mu4IyjIyjTjRbaa6[J-͖fKiDŽbB%pO~I`F^-oiyj7nTS:Mu$%p9/I~ FNK>R_jjjjjjjj5jT6SmLj7nTS:Mu$%p9/|~Tmzn#7000444jTVSmLj7nTS:Lu4IK6rR_$%p9/|^H~ Fnaaa6[J-͖fKK/fo/`?}1d 2QwayX,byTNSL2QNkD9!TאrS S S S SMSMSMSZMj3fTvSMu0aTNSL2I~2QNkD9!ZMj5jT6SM0aTNS:Iu ('5d$5dTאIBkDs]OU /?~`k'}٧AS~<,oOʛ6SmMj7aTS:MuzrR]OuJ~zrR]OuJ^Hu=IVSZMj3fTvS:Lu0iT':)'T'夺ꤜTSR]OuRnaaaaiiiTVSmLj3nTS:Lu4iTSzSTSzrR]OuRn6[J-͖fKiRl~)<ǧ__mM#_|iTpu AiyT6SmLj7nTS:Mu$5cT׌QT׌rR]3F #ZMjT[iyZ)ay|R>rS:Mu1RNkH9#夺fR]3FM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu1RNk(IkH9#夺fjjjjjjj5:^Ty-~[>Ѭ7|%^NhR AuzJf3PWԏ bקX>2Pc$_| d& $$$$J,+Y6ldȲe'N,Yd9rj|L]j|L\"y ddddddddYɲe%F,Y6dɲ A,'YNd91UZ,3Dj|S4j LLLd(OU/(!o_oѯooxS7'X^-TS:Lu4IkE9!'1夺YR],M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu͸('5墜TלrR]. YZMj5fT6SM0aTNS:IuM('5$5 T,rR]0M5L5L5L5M5MfKiXb,p3w1:{Ӏ`|*||*y|Pn><-O%7jT6SmMj7aTS:MuDRNk)IkI9AT rS S S SMSMSMSMSZMuUgǙWHw[u$˛Vɫ:Mu$5T rR]HIu "%/jjjjjjjj5jT6SmLj7nTS:Mu$5T RT rR]HIu ")7000444j^gH?x»?QnTS:Lu4I륤z))夺^JJ9J^HurS S S S SMSMSMSZMjɯay|R~m(ʯiNS:Muz))夺^J*I륤z))夺^JJVSZMj3fTvS:Lu0aTNR]/%TKI%?IurR]/%z))=U/hF~{W_ti~99_|OZ>(~ PwʯrS:Mu:E9ZjQN묖TY-M5L5L5L5M5M5M5Mj5z]G~X7'X^-7iT'Z:E9Z:%y!uVrS S S S SMSMSMSZMj3fTvSMu0aTNSjQN묖'Z:E9Zjjjjjjj55]z.?wF>4 =4OonAэ<-Mj5fTvSMu0aTNSzht#'COR?4TnZM緇F7S~{ht#˛CyTNSzht#'C9IBF7rS S S S SMSMSMSZMj3fTvSMu0aTNSzht#'COR?4эTnZMSDr~^bq߿_|Nzay|RފAy7nTS:Lu4IJNןB~R}UrS S S SMSMSMSMSZMj3fTvSMu0aTNR}UrR}UrR}!UrR}#BJnaaaaiiiTVSmLj3nTS:Lu4iTOToP$;T%'[T%'{T%7000U-͖fKi!*ȭ戟=c7g٧cy݃<,oO=ȫfTvSM0aTNSZR-TA$rj9IR-TK10000444jTv8vݓ<,oOvOj|m$OMu4iTs`NTs`rR]QnaaaiiiTVSLj3nTS:Lu4iTs`NTs`NB9M5L5L5L5M5M5M5MUӿ~ꟾo޾ٟ˼H>A<-O˻kByXNk"IkB99 夺(VSZMj3fTvS:Lu0iTNR]sIuQ$?IuQ('5GTrS S S SMSMSMSZMj5fTvSMu0aTNS(ꚣH~ꚣPNk"y!5GTTTTTTTTO09x|1P)pc}՟߿x6_~gO_զjTSwʯM5ayTTTTVSSkSMyX,_jʫkSMyZnTNS6ՔTK~TSNkSM9M5ZMj5jT6SM0aTNS:Ium)'յ$յTצZBkSM OU=^'yݯ}\> endobj 325 0 obj << /Length 326 0 R /Filter /FlateDecode >> stream xVKo8W̱Z.z1ݾvP$&"QH7ͿPo;ӽl*9 g᷀$C^zE,G(AW(6-(> Ց#&k.Fa a2Dp >x]~8x7ӵ_`!x:V0E{.r/!-)y5G&(R5ڸe])p&(ei Й$E-R ɱBxN>;SQ%t&n %q{,wVAU.hLd4y,]v>\< )Cl6J7N,I eO-YRn}{Pjpa~duEUHS„ egyw'!gFCjW[ma!1;լ릚fdc>TuQP~7v1j20D9JY4%ؿ|;9h-LcV:6Q\@%x8.\0xuMIbR' ^Ѥn^ !&¨Sy;u̼$E]Nj Z>,MX=2m™)aW&e;|zn;I鶙97L7MӘxK>TſY=;Ò%xʰۍ Ϩy[u%8 'CeO:\:gNecƏ54 "')_h#."W$=sE%!O, endstream endobj 326 0 obj 837 endobj 327 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 325 0 R >> endobj 328 0 obj << /Length 329 0 R /Filter /FlateDecode >> stream xVn0+ EknR1CL[D84ߡv˒SɰF#qyP/ 8Dx{b &AumE*_R3"Fe>km~YEuw5xjwu3J(lO õbCk3 |WOa<+YTYeyL .]z{MYV“*cHFX7˿ZF* X/!\ ԯ( qHjgr_qbsFv{+$\HG^&/)> endobj 331 0 obj << /Length 332 0 R /Filter /FlateDecode >> stream xVK6W"[In@qPh%VKi%m˶^؆If831͒r1H89E1V b}j8tOՒGOy~>}Fj^={(O ?mvko!Fa=B2R!D ~O_j囆uYnֿ{g` *K@! DN!dM((-'f]9Jzk;=Γ@<'}iF)Xۺo[N~κ'2z8xh L %qዪFQq1O,a fYNDQ,*wUvƮ[WιˆaF4g]:bA4"fd}zU.oGYl"5.>vV%M}0fy {ɯ|cRh.8Bȩ0b2xNL8- /}OVIvC Y܌waQ+꾡p>wfY$rٜغώBFhxRӥڹsQoղ };6SdL,Uޣruࢦ_J[:$[%+p|C ;-A%XyEh%C$Db'oTX=Muv[S4UgC>Uqdgy6k>TnG+mJ0$t^KUJ+&Q Q S2*꬀@IYaz-"9X@tf"8ЏTH0x?L33 `P Qxsbΐ&ܴ endstream endobj 332 0 obj 873 endobj 333 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 331 0 R >> endobj 334 0 obj << /Length 335 0 R /Filter /FlateDecode >> stream xVn0+h5MR+s4 %:R#D5wͱc95 igH; (^3xBywZtx `>vF~.AtR5 ><8Aҹ (:bcEB(p!".ag]h[S&E=b'[wE_벭t[Ba ) 3SCYUVf%;SXݬL; g. sz1謍6XDRk&M-q@N"R]9\yz*L>N*NC<ӪpQ0A nn w\a kZp(*HRU֥%B= 6NPNtfEYgu/*#}"dȣNaq)`,)J)/M]v{kA2? >Ed{ST挀 QbaP0\,&Mxuѩ*۫\wݞd3\wa~n-fN|ik$ySi[uyţhf0 ޾4?qneb1,|nQ=OEQjMϛљ}3hL9]Z*NNvqnDM$3MD3ٸYMciEusޫykKޟff+{GX 'J/2|:}ò۾9,ٯ̳$nבӑWjqg*]]~'4zqiwvA3Hb(53'pSؔ9mLQ_[1QAԖnoS@^)yZkkѦb8Hxs\E%9|X7DW \`H/˅ endstream endobj 338 0 obj 851 endobj 339 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 337 0 R >> endobj 340 0 obj << /Length 341 0 R /Filter /FlateDecode >> stream xVIS0W#Uwn]3=P20c+/K}ۥ'$=X ('zhe |/b!EqE P3#gimDkl[>[׷(MP£՘˃@蛊ޝ(,W#,0lCpXfp}ȵc-\-na:[ek3Ʋ]IM} GNE( )v ̪t[\1p8̦a&3&k2; Qmp*8s pa|AQihܭF@\)E8uMlp|J<3*:pF=;mh"qsia0%er]eSF1/pGzvr!1:FxzT 6wXfQ QB)F~,GqI[ß9qƉnG Qb,6q-{AZնbR]Ӥ$20Ҭqx3EJ*&ɢoމQGN걸dhEyP9/Gi }pn֌(dx;ca3{;Rץq8C.N*w{[QvAJ {Qpe;z9Ʀu d/< ͉$*T uzi#]!/KGx$#ݩljmG#!Bѐ$Jh RRb̥1'[sFH8L̕QbpC,Ԁ%?]Μ­|RseRij3}yw{6ן2< endstream endobj 341 0 obj 843 endobj 342 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 340 0 R >> endobj 343 0 obj << /Length 344 0 R /Filter /FlateDecode >> stream xVn0+ EknR1CDD84ߡvےSɰF#qyP/ 8Dxb &AucE*_R3"Ge=-271xwus}WQXևkzfA"yVʿ%\WYTZ٣#S!PT[@vߕ~N[p 3A)B=@7d'~>v;4O JtF.E*bc u ^9wZ3Co3kT, Dcyr&L8Ħ XlTfe &2׷Cvm16eu[' OB42Ri@<0 ԯ( AQv('6g:][lK6hvXE:"d'*4I?Tr+G^jfn9ִbP> endobj 346 0 obj << /Length 347 0 R /Filter /FlateDecode >> stream xVKs0WJ73ph:(Xr-a IDth߮-?DN%/7у(] f)֋  EbcVm2\-Ec~D""St{=Ev{tySOQ mB1-ʲ,8f04m)zܣ뭘MD;ƔjoL~&96t;B!:1b0Wc`idI0K'e{iJf4&BG7@vGDM;Shh#І? 2qѺ /5mqx(+*0;S''82Nn#}U\P2XOR]-V3qBan^նԩдYecܾJ!ZQ`ju.WnuCOdQBҡ'xBhb*j-~/LNwL=p-ew$0*6ne-zt]co`,ҕ80ۮ+OHy]񖋅Ujݛk[ɜs\],^%wBXf 9=j!͖̥X/#ivbتjw1c-2ZRVу\<1 P/Mi=B;LVz/iBN,g}wKV' VZ}zeI7X6 endstream endobj 347 0 obj 843 endobj 348 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 346 0 R >> endobj 349 0 obj << /Length 350 0 R /Filter /FlateDecode >> stream xVKs8 Wx&!Rnvgz4gz{-:ĦT=_P/R|!|("]ڟ"c >f[0M̎S]٪H8/ zw|#{x J`)aE(ĜE挾J[Wi7E)͢okljMݏKH6ʁeJPFsˋlR3Ep|PcZG&LL2&| >.4 5g*Ȩ\i|S:vp 4rqP'Uhujov_oL8 =뺟N R z_ok㍣۩c#ªpPhOKY&έabX'VPqqJc7TlU4svT;,'' 8M^^j>i^dPnh^EVlVnKnb׳pxUPA %ҟ4g\B:njǫ6vӗWCTNx'&f2M!uQEAPNXBTU< -„魖ْ_H7nA93?Kh^ SjZ$b endstream endobj 350 0 obj 946 endobj 351 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 349 0 R >> endobj 352 0 obj << /Length 353 0 R /Filter /FlateDecode >> stream xTn0+h]EJ CCжr$i$%9=5 qC1Y0߰#d:(I[0XՏ؏-d?c_Go<=kl:J_UnK!g | "N1&K%d\ .O>8߹yS>+$^YӘ_ #OhB:{u$B~AD LUnʛV@ .H"ZEp|DSL=&cn]YY!a[ySí]Oa7DE淤yAnەۺ{yF”흖K?} NdijXǺ@i)tP-e'(>z^c !&}UQC|bOؔ <8du8bw|p.O1~?c؝ph/R{ dJ/4L endstream endobj 353 0 obj 512 endobj 354 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 352 0 R >> endobj 355 0 obj << /Length 356 0 R /Filter /FlateDecode >> stream xUMs0W1PW򧸵iәʄB1 woɩ fݕH p!DŽOpf wvǡݟc3V6=ryx$tC/Nu\Cw#GCsOw>pնGR(p!b#`u\Y%&˕=m5E,+M# KU,+D[C%"0ZM'i%̔x "r b %qkm"p"5LAS'֩Xmm4'09d*356lQ|$G,+GXtC*p nѧ`ACv!6]>/*ݰYW.P׭;ưÅ~\~ׅԍȢ;._j,}:[ endstream endobj 356 0 obj 626 endobj 357 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 355 0 R >> endobj 358 0 obj << /Length 359 0 R /Filter /FlateDecode >> stream xWMs6WhH ~;'7;S7g2 ɘHP_M=5<" } |V gk(e(L.M4N0l{A?~&iL5_zAϋZ=F煙9[Ka^@J{N)g` !%fk |'T˥af E 3B!+^8L)b,:0p (YۓQ̑W؟8j.`zhOgzb:!%%8IMJjynJ(PAĬnѻ}Snt4wBGjrw:"8fBsdP WyámmM=05e͌?rUJqe8bؕV ! {8jA MۢgC/g~-$%m4e,Z<_.&  6߈V-$P (oxf(HK g됮"̒x U+foΰ-FgK^6Z+<f^0u%ʢjr!-TW3C_H'ҫP8}mp/e҃mZ4 Mmz[gErc9z 6^o+Tƒ]Py}SLp ^f܏\".Źy FGhv J*TUs~*Ylʹ,up*ЌU0Uv7ؒh7J#d6,sMkFBM47O<8HB'8HB'mCfy2>M{1r/@\4uؼ꿄kYY\"lne)P5("p\{pqphO7.uě]R`m :(類Ql{Q`βsj-VJUoNw @){h`˴Li&L[#fL`v=ҟVlGuƇB}ɕy6/xͦ_:C^D;Ewc&kP v!-TnqMEoH:/Mý$W.&>ZRSR~킹~M6=6 ^\1 endstream endobj 359 0 obj 1251 endobj 360 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 358 0 R >> endobj 361 0 obj << /Length 362 0 R /Filter /FlateDecode >> stream xVKo0 WF,m]0hHS%1ةg$NOk RH~p@z`*xen+&4+-l_,Wc3V"l& $$Tś?6ym|F.3YkPBĤ0Z4)KWdZiWcE{]+]1$6L)l#A 3īeYpY~wKsJ0%"`@eU*b%̮ґUJq ^hI ^(w5.3k$]K_כΣ!'0dK Vlo,I_vy 0HSYyMus 5ij Ld|z)ԫ|8!rmY)k K;M;Elwi= .Q7)-N!4B s&Kųvz0\ ,Sw]% zHPRbFMP1 -(cL']\;䮃wKE!jVf;!Ȟܱ+.Tp/zw:GdBdP1ލ[m}f!QOK,KW0rK^gC`}GV8pN4}8ws*bhAm]ABu)?[ endstream endobj 362 0 obj 706 endobj 363 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 361 0 R >> endobj 364 0 obj << /Length 365 0 R /Filter /FlateDecode >> stream xVKo@+hWv@ڴKR!^۫b lwSjɪ9s\ouc&o<}REl(\pƉͱNWɋ0a g! N+_tgaR ޫM(REs;ئ |C AIA=p_x u&6l}i-8qkˉ`j{n -<~FJ7zΓ//,vs endstream endobj 365 0 obj 792 endobj 366 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 364 0 R >> endobj 367 0 obj << /Length 368 0 R /Filter /FlateDecode >> stream xV[o0~W7l[PZ= rYc!$^B9>~ ("pC -(R qyhDT`"3bG2Do <jQf ֩2,%$s1蟣 QnJӿN`.F06W5L4ֱ)@~I:[4ص굞%}eh[gbz,9"n2ԮNE% %pf{71pbbH' TtvCi4O"CXJDſa1۔z&`Rmfc.G.235G ĘC[ buBrB;Գ6.uSC:u>;\$C5Q|mM иT< t"΅ PǛYvI<h܎R%pN~겲R&o 'vAg|l#nK;s` 8:84IyƐ7r endstream endobj 368 0 obj 810 endobj 369 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 367 0 R >> endobj 370 0 obj << /Length 371 0 R /Filter /FlateDecode >> stream xUKs0+J=t&frH26 u!lBܞ}EzP|nP e<AD #`Ίnp Vܷe:DaW (| oC<]й /I"MFa|Hw!0 jV2$IH@LO!-ci~pޘKSB-V0v{׆l{O.[HgGDa_3K TĬzB*]Vhf$' JEyvLF\=pùcn4PnrS,5 AGl\jdؐp1e^%Q9^Tɔ:d F#(l}f4ն0Ivl}n ml},LH$Q4DŽ 7#Uu| '3Já+)`[JJۦ2: ꦬWZߍFsf͗}VyۓW}K WeleՈc QD4t 7;s;B],:>FNU8c-Dgcjⵯ֋EeSOͨfEi^-3ctoj}BqJ[;&}(^Wbp) % S`'ryv*I<ъFjG )'h2K2%=rRw)F;?\AnK_aGI|pGk)u h?# endstream endobj 371 0 obj 713 endobj 372 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 370 0 R >> endobj 373 0 obj << /Length 374 0 R /Filter /FlateDecode >> stream xTMo0 WFQ%嶯-bH'5mlݿdI:YOkm4E-l"&@ȴ H8)^# +V~0=7k/)nK1c/l6\kI%.Ɇ [٧c [7U7}c_^RvkB6CѼiItԑ@ȵ﫧 ڃef+I?e+̐$$I {Cs$8sk"} O9ntqܮsWôX|FE m%#Cd@Ĥv<$j/;Z;5p^ĺM# HÅ n9f>T @T]QcM|=Tu]:{I08aʟ8G}; 755GOW4Y endstream endobj 374 0 obj 508 endobj 375 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 373 0 R >> endobj 376 0 obj << /Length 377 0 R /Filter /FlateDecode >> stream xTMo0 WF}Kvj`I $r;['rRNZ1Q||$@`Ga& c`8݇$*v&U7v&+M:K29 o’|  ![쥕2뜳ZxqpuuX dȗ`e;i5!1iILWO KM"$" 2WZn0CZr&YHbZ㌢P=w:S=]\!0*>ۢ_61qnö@Tk6_WEչjL5m"$xUo)0Dz5m!% Pj+3_?vjhy#u F2s^6},˩SꊚjZC%XnEiowӢ$Q.1LF٩zd&R;];z æ endstream endobj 377 0 obj 508 endobj 378 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 376 0 R >> endobj 379 0 obj << /Length 380 0 R /Filter /FlateDecode >> stream xUo0~篸 yu&Mʂ"HI1h3? mڧ?q@ܠb{h1J B> 7+t;vOx;Bׄk^|)އ{wGH6'i}xqJ${|MpSrcw|>%h%o,y_mA?KHQ +D[1"VM+lfu#cF &D93 HEQB1_"]VPkZ _!HZ6%<. EG2(da:Tc`# p YBnEv.' }b[w{I{,F=7֢qV]kAG $$VѧJt)8!Poyuxwwz!! e^u m)*6ۚ-*-L.ށ`!C6hQx E׽öuJ_ϙEhpd(|xeI# endstream endobj 380 0 obj 565 endobj 381 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 379 0 R >> endobj 382 0 obj << /Length 383 0 R /Filter /FlateDecode >> stream xW[o6~lHꞷnK[4Z.Yb!T^$QiD|}7?.}qJQ^/-FPLM!F 6VkFTz+i {q[|]ox%0_^6Du1R$i&ϧP Do;˲b\\'dtH=w(Ş@)kp`G{1+!b}KLa m?6˙a G1j^pЙ0P K]ˑȄ`}_ Nf؋HwO9R 4ĦyW&rz9Cߴ]͸zAԋ Mc7;%G|&HLmyP}R`M0=h# #>T6rVmV8P9?ܵʉz`qk{WݎyɽA<ۦrD7Ğ}{p6[?~0,U jE:Ж9 Dilg2`wV7rmBP4wM2PϕњͱhhXXO`-f{L-"jx5 xm`#ԧQ:#lxixtHO'$o1-L&E ڕt0zp8COLمF}dYaeiM.y&- &y9;Nm}i,4Ϥ9Z]l:duj"v>cdˁstT t_7/Nn墫*(,=%e`J硒Ξ!>,.)I|*>E7M+fJ :3癮ms }F '/ABJu'V 洛eVdEQ)-ֳ7VLw] .LTa+Q&dLsXyp |vg^1l%%sGa$19{A endstream endobj 383 0 obj 1001 endobj 384 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 382 0 R >> endobj 385 0 obj << /Length 386 0 R /Filter /FlateDecode >> stream xWYo8~:@%;o=Ңtꢐ%:);OA43fYPD{QPV-2"XDQF EԊRdxgQ/z 9tXs$KFjQV[O1$Cc0嫦Do:ESOhfu[_lw:>R;.H -:bGPWc`i„l{@ž-jY4{4La#aF=B( dlXMkF{ncXtS@_ۦEyt 'HpIA i=p;hJ^Ljܡ5[ҜgEh48/a?q󚋬-n  ](NXOզ)IʦyXZȊ-+*ꙵW>zgz]FvF6S! p quEz6 4柀 eùN"Luᄑ Գlӌ&<,2} SǮIDQKnYԹÖ_;1{޺L8wuVv9MQZN+nl P@! (} Nw[K:W͚ߤ3$hʯ<>Uw[=j0`Xhnw {VN10Ƕe 3\JNR/߀n{(fCQیVBvL{V_of6P\ @~*rPkrEZU7n>4۪Sm>YkQX'ۥ4Mhm#]*'m>Ѱr@y-ԅ2׋WݾR ō]YBvh RaJ0޾_ݜ˝;~ g fNuGp|;'b?l~2[ endstream endobj 386 0 obj 1109 endobj 387 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 385 0 R >> endobj 388 0 obj << /Length 389 0 R /Filter /FlateDecode >> stream xWo6_9Ñw޺-:l؀dw")v$7Ok ;wyAu% eⳑQ1䅧" VdA&F] ZDb^ .>~i`x;KPeM(AO1$CcIah]_ZLM->j=~jT~*V twBZt<\@5aB 0;͍8E-Og  3ByHԃņd>pٵ52Ѯi#ok^4[.h6<r|C 0 {X"nH$HP$ Yl҂fe[q\};'|>tM%HpIA(;zv))Wc!,D4YQ%,5Лǘz?q~"kC7Q}F B!-ӑ̷MYdl0P;^lXQQ>_LjEw\n!`5ss3[>RJ9]Fz68=j?C zfo s]M $nԸwwxu!^f+Gi#QTEhخl>"gMP8M3G6!˙5Ռ"9UKQv,umX˹Bi'p b$˦`H]&q5]?ɁW(n/Ձ8vMW:4[v֟YEõws<vSmS%g5nM7Ҳz0t&qbSHF` _ձ(KlG5A3K/P1{և*_/f\1l>r)6Wּ;%騨GԲ%OզY3'oN۸~}ZlBt'H3,n&xPI*]yԪ[HK9ʲf u/AԌ_xw׷iu<]#}H^CNK4gKɔ!>/x r#Jx2bneٽ%3?%8>E;Cͫ endstream endobj 389 0 obj 1117 endobj 390 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 388 0 R >> endobj 391 0 obj << /Length 392 0 R /Filter /FlateDecode >> stream xWo6_9@̐V޺--:l)؀dȔ#Ru(R"nƁ}w$4g~Cfdd} #D ֫Dh.M_-"#F/_AZ(DN4[}S_$Xm$y9ћ;۸5Y=%x8hCmU fvstN:IG0 *)L/-߂nW fEfwuXn̄a=qYVLsYA?2)4Fhx!4ҺX>X[~<-<mlIvkun1AzJW:. uCa]'v6ձDR>RdN0(~?on/mo]B)$uu=G1~ACу7O}-o,!P}L!0`v: JC; Xi05െze6m,Ǫ.jsUhQ6ND\М+EKGspJpLǨ9wfϯ.Ыp&sv0~* )? QِýbZӪz\65?Ո[ဒ%d eW;vykT (v|"ueѴi^>$AP4TEZѢDW\d{Ş٢E7Z,\jڼD9T)eXw5D[2{r7r+%ʈyW"(0N0о endstream endobj 392 0 obj 1217 endobj 393 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 391 0 R >> endobj 394 0 obj << /Length 395 0 R /Filter /FlateDecode >> stream xWmo6_os|붴谥Kc`b%:WHl^?Ļ{>y>"?IFQxFG1CL#0k/b~ "GjT&Woz}{:q| AO/K Zn4˲4PE}Xڵ}Z~- |AS)UPK*JѲ Jpu5e&`!Hf$\ųgS? ć\tcBtAV&%oεz$ C߳V s0]63 $4QIXr /m7 >q@4q瀇[`W "Jx hfE0(#i.g20}%@mٗdE5˲g3>70)$t/j'RQD b=h d_,r+fUa u=;¤(`K|>3D۪غ.Z9bBvV\Dgn7Y?j *F2繚N"LMϝk(h;Ln/DT3SdRnzZUU-FkQQ4Z65(rSoV:(;;Hx۶B{Z̮g)$ǜ&efzKԢIX*=-BՕ ܖVnrhZ)iM7[Ô ePrp;;j/f&7qS`Ti,dB}|}ٙh﫺vz2VGҝh E|k&M&f34&TZ.R܎ҽaՂjS:뛪ͅbeO!)xQN\̠<\-怀,<"@-.TX?_|wҠs]C;* G30p˨޿[]:0~ڣN]RcX~}"gP@~!Z.X^[>pmQH.\jGA62 ɻs](#8=xJ/=ߙR x_ endstream endobj 395 0 obj 1109 endobj 396 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 394 0 R >> endobj 397 0 obj << /Length 398 0 R /Filter /FlateDecode >> stream xW[o6~Hݕnk[46.Yb!"U7~"EҎi.e5JdsTP`v d2L( 4v:٥t~L*CuJc_Uh8o,/()I0 UQ~c<﫽d%yÁG e BA)ZfvoʭaoeŌŎ9^ mj}0ZٕUvUs\na- sg[v&"6bk$j^pPD#) H8f> endobj 400 0 obj << /Length 401 0 R /Filter /FlateDecode >> stream xUKs WўI(·ҙ3=9(25@8i}Ao;S#Oca=>n`BZx-FQC /[׫2_0|n,x^cS*6 [p sG>ȧ(, }V҈25z~A>,:e]; X @1b ٥̂clZB me(1&6)]h{9ERv@)Oad֐fOBZfj"&{2U.%%Ock0ȑW7/R:ӝ*`qf-qվL6?D&Z[SX!Eq9SɓN.rIlT5dN4 H!ݗ7ƿXCUV9WUPPqmQmTUh%bΊ2t5k|5~/uM'Wu ],r82]4db0Z*4Q,Gms3lG sr!Ff" }Lt' ]W7MIUQM9׃\6հ2_(=)9-GQ1N=O0GG|Bɳ#}>aGYeLI;U̳cWUkQa\->5m?U'|`Nw~f%⃎Ɣ$E: endstream endobj 401 0 obj 726 endobj 402 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 400 0 R >> endobj 403 0 obj << /Length 404 0 R /Filter /FlateDecode >> stream xTn0+o]=p#8( WT"Hۯȉ՞H3;*!XӘ_ #5< h:!]=e"EGdR7wwrR(DAuup&=017C!+q}W>_C̣A%W > endobj 406 0 obj << /Length 407 0 R /Filter /FlateDecode >> stream xTMs0W19D]IoJgzfz3b6 pО C}Vq'8, c $!FCwV8L^_q;- |!7]9i{_ҩ 94 1jl3 `k]#viO2Vtԧ>hBѷ8ưΓ S: GT/LΣ endstream endobj 407 0 obj 523 endobj 408 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 406 0 R >> endobj 409 0 obj << /Length 410 0 R /Filter /FlateDecode >> stream xTn0+oRn+ӶJ ߗ$rb& JO## ƕfcQ x2hp'BbV0w/kKt{Ѕcx:wM4=JTnC"=*g_ n/>1nm䥭/ }NGrXӐ_-It,!;tuȐ[*,{B&g?,:n^bX`QH]'@agG9'Lfcql ([@{SY}L9w$IO\lmP`_bBtJKr׾ɦ)@d{z_ئ>k(tJ fJk!RrG*;QFЂt01U[Sú|bnk۸ye kʕن@nCEFqXEQ1[٩zɜ>%5:<_R? endstream endobj 410 0 obj 512 endobj 411 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 409 0 R >> endobj 412 0 obj << /Length 413 0 R /Filter /FlateDecode >> stream xUK0Wq9Iz6R˪ 88q^,О |fl?ީob#`ZC,@F#]Co]={Ǯm :[KH~r>7&B(kc$h&d7s[+;eM!|NN\hgɺvbV촄Ց TWChjLAD nuUV0ՠ\"r <zO\3-)T/s!1A\#@M(e| !ZY tH,#ȫ7?ۼpYO5g1SEB}f~38!Sȩ4eޗ>&= 2&ir5~D)u2+|ڮ\0%8b؉l3*?"eZJ;StY_,]xf*vQv jCz*a7  W9*V/P#]E5 hTxe߷Eb1!ά9si 'ׄWԿGN endstream endobj 413 0 obj 576 endobj 414 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 412 0 R >> endobj 415 0 obj << /Length 416 0 R /Filter /FlateDecode >> stream xVr0wi$$NK.,6 uү]5ѽёēCR=˜¦t@H UxRp PXYpVnw0|s6z9:7B t>\@0,Z q.Dȥ(,K}`|#7{X~w.u }g޴)[P QKc Ң("$MC1Ʈ&3,K&"LG%.D61 :JQHrWc`b_s;x]* ,k[$Mk4]_€F* 6v«&$(%eX4v5S5,J>05?}ɸ2&*cD^?zr:)e DHWb k6uqSPQM"C3\Y­̿xRZiM.O;!˴o> endobj 418 0 obj << /Length 419 0 R /Filter /FlateDecode >> stream xUMs0+J$֯tڛfzHrl3\'6nOMbyey(=nb=6 B>ak~Hϱ]kۓ Ż{zxBMiCX{"M!ZP!I8S ̔YIfD߼I7WݲfT 4?m!Q;a!{BDj ͊*Ium̘|F&1Άޑ(U(^CDʍv&jV: eYp16a:pB 9!oM+(D +/dQd?Mr"fifO'Ay@|SVbe(  R]O1"bcyl4.?G$|UoI<ٹnB235KZW]P7UU"[qR ]x#s^>yfy}fӍ~ꃺO3r). (yHV/ɴIq=n!lT~=1B>4HG򳯛W9 endstream endobj 419 0 obj 600 endobj 420 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 418 0 R >> endobj 421 0 obj << /Length 422 0 R /Filter /FlateDecode >> stream xUKs0WfU?$n}h!Omئߕ_DƇر#S AE) 1Ѩ|I蚜sK9LPp#=@3d'&G ubytl_3$89&{ ]ݔ$p#r"J0D2&_Iٚ3|0a!MpUt`9v&ӦPD(J_E)YLԆ4rؔi\`II_|U;Y@3N|( .a3"a`s \һ~728o9X|dpl箖O7FL~k[&f$=_&toGg#g1yxF߸ +ZP5Ƌmzqz&ijm ='%+IOԤߣVSqѦzzR.WYGypIƔ' endstream endobj 422 0 obj 640 endobj 423 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 421 0 R >> endobj 424 0 obj << /Length 425 0 R /Filter /FlateDecode >> stream xUKs0W1$JCW:39ੑm ]8f]~zv8 7vB`?wA#vϱk  |s ΩݵwΤΧpGj]θ P"h W3S} [3+G~8_l%,I_udAUJ( Y@:f(b !qNkbU &Dİ5Gu(WS!d?u + qf~9d y)HP- }Ԏ^L)5 0 B5$>.<1 bf4=.="'6?Z  ܚΞzrj""  ̠cSq=↵/J~k Z׳H5\¶srɳ}u,Ke[nդ}vu.0ntظȶf~E=ZY+ZT L-VQvIW\9;m]\<m{a C{Ճ.wN@dQ)+B endstream endobj 425 0 obj 609 endobj 426 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 424 0 R >> endobj 427 0 obj << /Length 428 0 R /Filter /FlateDecode >> stream xUr01>D$N{sLqԖm&X8 W nOMcIVZQ@s_B [a!@}7,l _׽Oؖ mewy]< o@+mkS} "$>%48 9D^ -_}.njBUH~x_j9elZ_=ef~#$jsC"LN2]cDΘ3d:^*Ƙ1{#a#Rq64DZRk11$K)T7edf_EiU,r LoT.v]z";$ Chf}QŮ:jf/ZReg1h7 &#ne[wO:Em69t\PtLCV]QEU~#]ȏjz/VF>C*(3HP#;8/?h<>{ua^$QCg,olM, endstream endobj 428 0 obj 605 endobj 429 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 427 0 R >> endobj 430 0 obj << /Length 431 0 R /Filter /FlateDecode >> stream xVo0篸6jR׮&mZH{hI_GIp>w!hu/U #huC+Xj롌g­N`=h\xrZs3 0,O3u, "\C80N.LɭM4Ϫ}s>v}g.ޡP@7-jeǎ#jȐ6eZ)0ƞ%&\H2."Jtoe]nĊmPJtm/`Q;FKJ&Ub(̧T-'V95!#RXۻ\~q^G]y{+T˕ /^h] %Oq)#5k:bhT?Jҕ hJ!4I ޼p[[ @O0۹x E:N{ +ޮt6M9?n'2xA !dAA1N,Z>CHVwN4 ||8^Au؞(;._1L~1~"p endstream endobj 431 0 obj 747 endobj 432 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 430 0 R >> endobj 433 0 obj << /Length 434 0 R /Filter /FlateDecode >> stream xUn0+ ;\$Z[ F@q`l EG;ҞXH=qC6&8h2ڇxWL7V /ѯX֫w؍ dA | cи o^"rCU!=S81&$L  >e\mmQ]C-U+xe^!kkV z_BH4j!Z 4([bf-!áK㴘d+zLpȩs>q5JXPlM}$ =_Y>k1y=.4(<xTuW9R<LjM2DAtˋh7[]ߓ2d 9 oVYQnG be&v\<f`ms:91y{>]9pMtYYXʥ%ȧui*`4h< it)J6mQFF&Y5) b1d=sS>-Nț3[۞E^Qt$9/bNKRĸ%fBU/MGl=nOLig}} fzAdN4~) endstream endobj 434 0 obj 627 endobj 435 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 433 0 R >> endobj 436 0 obj << /Length 437 0 R /Filter /FlateDecode >> stream xUKs0W1JK6M;t0 @QA\ًC"7jgy5y%>eU;kklF@S 8$D]3!YuLFVϿ2y6Z&> endobj 439 0 obj << /Length 440 0 R /Filter /FlateDecode >> stream xTn0+oC,Bm;$֞HI?o @z`t͞{L1$2"c0}~*ޝ0v%|gC/m7otO+m 1an"Z-9+\I .>En-&/oK2V ΢}P;>KpP]:DK Uo̼7d2i9- QP',!5wNZ4u2:]fvXΡ! +3 ` oꎄ-0Pm2"bqv*guhYlu#B"c3T#A)cTm̩/k-]N|b\K Ly C@5mU!*gViMi<=gaۉ9}vt:> endobj 442 0 obj << /Length 443 0 R /Filter /FlateDecode >> stream xUn0+0;uK C,BcI!.ߡkID2D=>HR HCq` q?1Za?`\]q߬c?/G->tZw፳%/*76r^_@RaB\% :ջ"_\yReEnw}r>Dj].^X&&dA? xbL RIBD#fZU5Ne)CET8Yr7dȒB?B KRC5qM뤂blƵ勐\-YٺLo c$"쒢kpgrlGa. BO)Ii>yцЌZItV}Pp<~#Cf`K&अiU|gs#RjzEdXݒģ$\1v0SDx3N~:+jjXu"SB͢)$e l*ft:N(ھ1Z\%s! B_g|L endstream endobj 443 0 obj 583 endobj 444 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 442 0 R >> endobj 445 0 obj << /Length 446 0 R /Filter /FlateDecode >> stream xTn0+vIJ|Mތ! Ce!H4}z8k&ah/L{$kcǐ5˘. + '8fX~GBǰc]!M←}A $7i#uYr%]x$$kV>v[{2V ɺڒw$ o 4[ȴ^!_W"^e/d,-f_uB$ QP+r@d*"Ǖڑ=AJs XE" endstream endobj 446 0 obj 473 endobj 447 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 445 0 R >> endobj 448 0 obj << /Length 449 0 R /Filter /FlateDecode >> stream xTn0+II$}kCMBc;[{j" &y|W&kcM!F .C(/ЯxiWoq; !ܲGBu;6!BʾM!Nޤ Zk"+i%!^eW 7M"!ʮIJV~G@t (5j[!Z za^٬~?4[v@  QPK0 b% AJN@rw8Hˢ@ty%+HPuK3衑GQ]yjDqj4='g/E>nzwB<@A~3~.fM5D& 6n 4"l5lp?\jQfSB@ pxU0JW7e^[|cCŰo{9~jr39X:z @ endstream endobj 449 0 obj 512 endobj 450 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 448 0 R >> endobj 451 0 obj << /Length 452 0 R /Filter /FlateDecode >> stream xTn0+II$}CMBc;D֞HI=sFo @ņ=-A%SH ˘> @O90L 'tIx ?Y.ް|SVC] EHpa&Q`_ ^|,j-M^=_tRU;u#Ѽ3|j!݁: $rMUj-"Ald6k͗46I.BTƩxak>H&Rs,sU/]YN2x6˖'ܓC#Oˡ7r[uG4pi4%gOe> endobj 454 0 obj << /Length 455 0 R /Filter /FlateDecode >> stream xTn0+f_ES7#zHueǨ-%ߥN(Ā;Q 4`Fh;XL*p@ӎU_wQ џ-t}w a!>!gi3CjRn>We,"\mY\Ve}~7%Vzg7wN6-pұ^*[u'̼d4פx*&h9$LIE(r@dJk[G*̩X}M:nՒ| ͶqcϦs~Sɡ&\[OY=˺ d!286Uc@Ѫ*g kB eYlEwd6&HKUV,b2VfK cv3>]zoG}( ƒ"EP endstream endobj 455 0 obj 463 endobj 456 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 454 0 R >> endobj 457 0 obj << /Length 458 0 R /Filter /FlateDecode >> stream xTMO0Wc; -z@%*,Ic'Y6EO8͛?1H,LI J!j )a 3 ;5sx3/u+6"œge !H.sj+#![E⹅˕۲-d_lE;⑱v$KDpP]m*D[ U/̬d2iwsEɳOd R(DAH'rFJm@P@JG=4#M/(Ux.y;2Nj0܎L^o,i# endstream endobj 458 0 obj 497 endobj 459 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 457 0 R >> endobj 460 0 obj << /Length 461 0 R /Filter /FlateDecode >> stream xTn0+h]R"EJ! Ԗ#H}zؖ證dĈ;% @~`:xi1#A>D nBbUޟc76v' [p~M.&↰>M$IZkPGd w%\W-|뤷[Ev\Kޑ36иo!S[uH}/5 ZDT0i+hi:4S9P I x/g@eK M\5f X$Sr@j x] ۇ[1g$Kb7|S..P kmZ-~lqz>7IDm,:ܖs:B+Bǡ=T'2>1mK78_4AGK7OY8>ZܫzZ&I(H/mR}iYXPQg> endobj 463 0 obj << /Length 464 0 R /Filter /FlateDecode >> stream xTMO0Wxv۽H{PҤc?4-?͛?1H0[%d 8qܳ0 ?ЯxVo1=a`scMw҆)r@HF c5Õ,oWm1k\Yԧw`QJO}I?ͻKHwvj-"`d<Կs7篁Hr)(СoXB*.OÿR1 lYѸ*(5* *v<ȓ$~E]vOn5W"͠,.CG(D ϫ]QHbDj*CYQkTok ʿleV*?V4RHI$KWC(`lh~gEg3u#Ā?Yb8;>I5Ur3:A9xd~]V endstream endobj 464 0 obj 506 endobj 465 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 463 0 R >> endobj 466 0 obj << /Length 467 0 R /Filter /FlateDecode >> stream xTn0+.II$}kӦ@oFHrhӿR/[~5&ar8;{e,28(2C<LpBnw؏-d?=!|}"<^_xM↰Dާ8Bl9C Ia# :UZMmU޷htZ;lxGO@ӱTHjW! UD0I'dRY6%:iw2[/ӑޒ dC 9 0׽j?ޜhMl(! ($BS>'Bn'l)A sD !3 Qun[;7'.#'Cw?:m5"JGX7FuTUZ1+^TSHj͸t_|Ӧ"8s#}iUJE\Յ-riVg;5w2C+s-2EVp`{?ܫ3÷( 1h ȜNJ܁L1';K޿ͳd endstream endobj 467 0 obj 534 endobj 468 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 466 0 R >> endobj 469 0 obj << /Length 470 0 R /Filter /FlateDecode >> stream xTn0+IoR7#zH Pe[M9Z;XSI'ᛍO 6SqB0> YXxpEw9``KDNnCg`qR̕SCwB}> endobj 472 0 obj << /Length 473 0 R /Filter /FlateDecode >> stream xTn0+ΐ%z3"$0[ƒ#]C-=%x ߼s@!N_ IuY %$+TM򻁛M1o/ |G*,i˯=ɯmM%dZpp]*[ U/L 24YQϒ,_tB($HZG}Ki s/H4&Uf ")<͓  (T1(^yS:SwDB-ٕ`T忩Dą;͊ra&GDNh:gxZhOYX97L|un>'׾"Ε$)B˼JMUm<7chEvL♖}} v?yގxBaGw,!UXU?& endstream endobj 473 0 obj 518 endobj 474 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 472 0 R >> endobj 475 0 obj << /Length 476 0 R /Filter /FlateDecode >> stream xTn0+ΐ%z3"$0[ƒwű$ O73|Ǖ0_=F`$(=(@Ý~+;ݻkaA | ]0s7="!,q&BiCdsV+BI .>yuV߂/(ZEE;mG#5-鸄L nQ Q]xa!I{A&1˫YdNc[#9:[KhQӡ{);AtUI&|*)![$y/j (D1(^9*SwDB-zU`T uS!wz].5L6tpvdўUukK|un>'ռ6 U$)B鍆ƫL̫6iһd,o5~K♆}} f?wގ{xBaG7,> endobj 478 0 obj << /Length 479 0 R /Filter /FlateDecode >> stream xTn0+II$}C-Dc.ߡ6/ݞH(dѻ8BIsƵ1F4„K@_56nQGȾFJ.n-v;ZM-ZpTG@W TEAD L>s~Ve')5Ă .9m|R\*P^xBė [PTe]mW6\AMxs>XspME>lL!&@ YA -uە[ojNh1eFR{t1y*]pLLX,|_͆6;R!"'$:6Fڸيs3_W͢miTWke.ͧ/* (GLfkaTyTηj>Ժ?gd+'c 6‹zd7dB82}Њ9ʳU wL endstream endobj 479 0 obj 536 endobj 480 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 478 0 R >> endobj 481 0 obj << /Length 482 0 R /Filter /FlateDecode >> stream xTn0+ΐH-z3"$0Ɣ"]v{j" "yDH!_E/=F 9t$Og{ o,q˯e[;?4/!قupdծBFD 3>nRNS+9$rt.6$$4$䱋A|.s3cb^94K 2 B\@ ,MӠe 7LK_f)W=D>z.* LH$,F|_/+Ն'rKYbn7s뼁,|W)F"|uqy]T.'bNɐlY8sL6ͺM6CZc[im!3g+inkM%1^ߢ_b؏09?|e0!djog+? endstream endobj 482 0 obj 536 endobj 483 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 481 0 R >> endobj 484 0 obj << /Length 485 0 R /Filter /FlateDecode >> stream xTMo0 WQmI:`vhHDh#?i&NkmDs齊28(2߇xOpC_aޝ0v%|O|5{ tFx?`x↰HMHrƵ1F4G@Oon6~ڸʇ(%_h%,q˯=AbmKHV U* "^y/hԔqäqNckH\"r \l LI)^B XZh-gf7nl ՜@Z PzpJʆu9Cd2*!4 R< ߾ZSsD93/gHώ//"M/΄ˌȩ{fEn#\2rM).z2$4frtw52sنiֱ:Ε#fC~ 0Զ>t>${~PSWִixw*K̍c/?tWȜn*pdzsN67V5|g endstream endobj 485 0 obj 537 endobj 486 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 484 0 R >> endobj 487 0 obj << /Type /Action /S /GoTo /D [327 0 R /XYZ 72.0 720.0 null] >> endobj 488 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 227.33 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 487 0 R /H /I >> endobj 489 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 487 0 R /H /I >> endobj 490 0 obj << /Type /Action /S /GoTo /D [330 0 R /XYZ 72.0 720.0 null] >> endobj 491 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 227.34 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 490 0 R /H /I >> endobj 492 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 490 0 R /H /I >> endobj 493 0 obj << /Type /Action /S /GoTo /D [333 0 R /XYZ 72.0 720.0 null] >> endobj 494 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 250.09 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 493 0 R /H /I >> endobj 495 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 493 0 R /H /I >> endobj 496 0 obj << /Type /Action /S /GoTo /D [336 0 R /XYZ 72.0 720.0 null] >> endobj 497 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 273.97 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 496 0 R /H /I >> endobj 498 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 496 0 R /H /I >> endobj 499 0 obj << /Type /Action /S /GoTo /D [339 0 R /XYZ 72.0 720.0 null] >> endobj 500 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 283.42 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 499 0 R /H /I >> endobj 501 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 499 0 R /H /I >> endobj 502 0 obj << /Type /Action /S /GoTo /D [342 0 R /XYZ 72.0 720.0 null] >> endobj 503 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 232.33 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 504 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 505 0 obj << /Type /Action /S /GoTo /D [345 0 R /XYZ 72.0 720.0 null] >> endobj 506 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 232.34 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 507 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 508 0 obj << /Type /Action /S /GoTo /D [348 0 R /XYZ 72.0 720.0 null] >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 227.88 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 508 0 R /H /I >> endobj 510 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 508 0 R /H /I >> endobj 511 0 obj << /Type /Action /S /GoTo /D [351 0 R /XYZ 72.0 720.0 null] >> endobj 512 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 223.43 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 511 0 R /H /I >> endobj 513 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 511 0 R /H /I >> endobj 514 0 obj << /Type /Action /S /GoTo /D [354 0 R /XYZ 72.0 720.0 null] >> endobj 515 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 223.44 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 514 0 R /H /I >> endobj 516 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 514 0 R /H /I >> endobj 517 0 obj << /Type /Action /S /GoTo /D [357 0 R /XYZ 72.0 720.0 null] >> endobj 518 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 211.21 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 517 0 R /H /I >> endobj 519 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 517 0 R /H /I >> endobj 520 0 obj << /Type /Action /S /GoTo /D [360 0 R /XYZ 72.0 720.0 null] >> endobj 521 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 212.88 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 520 0 R /H /I >> endobj 522 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 520 0 R /H /I >> endobj 523 0 obj << /Type /Action /S /GoTo /D [363 0 R /XYZ 72.0 720.0 null] >> endobj 524 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 241.77 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 523 0 R /H /I >> endobj 525 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 523 0 R /H /I >> endobj 526 0 obj << /Type /Action /S /GoTo /D [366 0 R /XYZ 72.0 720.0 null] >> endobj 527 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 216.21 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 526 0 R /H /I >> endobj 528 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 526 0 R /H /I >> endobj 529 0 obj << /Type /Action /S /GoTo /D [369 0 R /XYZ 72.0 720.0 null] >> endobj 530 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 223.44 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 531 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 532 0 obj << /Type /Action /S /GoTo /D [372 0 R /XYZ 72.0 720.0 null] >> endobj 533 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 226.77 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 532 0 R /H /I >> endobj 534 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 532 0 R /H /I >> endobj 535 0 obj << /Type /Action /S /GoTo /D [375 0 R /XYZ 72.0 720.0 null] >> endobj 536 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 214.55 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 535 0 R /H /I >> endobj 537 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 535 0 R /H /I >> endobj 538 0 obj << /Type /Action /S /GoTo /D [378 0 R /XYZ 72.0 720.0 null] >> endobj 539 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 214.55 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 540 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 541 0 obj << /Type /Action /S /GoTo /D [381 0 R /XYZ 72.0 720.0 null] >> endobj 542 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 194.56 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 541 0 R /H /I >> endobj 543 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 541 0 R /H /I >> endobj 544 0 obj << /Type /Action /S /GoTo /D [384 0 R /XYZ 72.0 720.0 null] >> endobj 545 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 248.98 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 544 0 R /H /I >> endobj 546 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 544 0 R /H /I >> endobj 547 0 obj << /Type /Action /S /GoTo /D [387 0 R /XYZ 72.0 720.0 null] >> endobj 548 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 231.22 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 547 0 R /H /I >> endobj 549 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 547 0 R /H /I >> endobj 550 0 obj << /Type /Action /S /GoTo /D [390 0 R /XYZ 72.0 720.0 null] >> endobj 551 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 231.23 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 552 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 553 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 720.0 null] >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 253.98 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 553 0 R /H /I >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 553 0 R /H /I >> endobj 556 0 obj << /Type /Action /S /GoTo /D [396 0 R /XYZ 72.0 720.0 null] >> endobj 557 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 236.22 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 556 0 R /H /I >> endobj 558 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 556 0 R /H /I >> endobj 559 0 obj << /Type /Action /S /GoTo /D [399 0 R /XYZ 72.0 720.0 null] >> endobj 560 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 236.23 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 559 0 R /H /I >> endobj 561 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 559 0 R /H /I >> endobj 562 0 obj << /Type /Action /S /GoTo /D [402 0 R /XYZ 72.0 720.0 null] >> endobj 563 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 203.44 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 562 0 R /H /I >> endobj 564 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 562 0 R /H /I >> endobj 565 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 72.0 720.0 null] >> endobj 566 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 223.99 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 565 0 R /H /I >> endobj 567 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 565 0 R /H /I >> endobj 568 0 obj << /Type /Action /S /GoTo /D [408 0 R /XYZ 72.0 720.0 null] >> endobj 569 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 236.77 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 568 0 R /H /I >> endobj 570 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 568 0 R /H /I >> endobj 571 0 obj << /Type /Action /S /GoTo /D [411 0 R /XYZ 72.0 720.0 null] >> endobj 572 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 226.77 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 571 0 R /H /I >> endobj 573 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 571 0 R /H /I >> endobj 574 0 obj << /Type /Action /S /GoTo /D [414 0 R /XYZ 72.0 720.0 null] >> endobj 575 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 212.34 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 574 0 R /H /I >> endobj 576 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 574 0 R /H /I >> endobj 577 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 72.0 720.0 null] >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 216.22 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 577 0 R /H /I >> endobj 579 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 577 0 R /H /I >> endobj 580 0 obj << /Type /Action /S /GoTo /D [420 0 R /XYZ 72.0 720.0 null] >> endobj 581 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 212.89 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 580 0 R /H /I >> endobj 582 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 580 0 R /H /I >> endobj 583 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 72.0 720.0 null] >> endobj 584 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 227.89 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 583 0 R /H /I >> endobj 585 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 583 0 R /H /I >> endobj 586 0 obj << /Type /Action /S /GoTo /D [426 0 R /XYZ 72.0 720.0 null] >> endobj 587 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 214.56 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 586 0 R /H /I >> endobj 588 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 586 0 R /H /I >> endobj 589 0 obj << /Type /Action /S /GoTo /D [429 0 R /XYZ 72.0 720.0 null] >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 221.22 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 589 0 R /H /I >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 589 0 R /H /I >> endobj 592 0 obj << /Type /Action /S /GoTo /D [432 0 R /XYZ 72.0 720.0 null] >> endobj 593 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 205.66 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 592 0 R /H /I >> endobj 594 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 592 0 R /H /I >> endobj 595 0 obj << /Type /Action /S /GoTo /D [435 0 R /XYZ 72.0 720.0 null] >> endobj 596 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 237.32 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 595 0 R /H /I >> endobj 597 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 595 0 R /H /I >> endobj 598 0 obj << /Type /Action /S /GoTo /D [438 0 R /XYZ 72.0 720.0 null] >> endobj 599 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 242.31 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 598 0 R /H /I >> endobj 600 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 598 0 R /H /I >> endobj 601 0 obj << /Type /Action /S /GoTo /D [441 0 R /XYZ 72.0 720.0 null] >> endobj 602 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 218.44 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 601 0 R /H /I >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 601 0 R /H /I >> endobj 604 0 obj << /Type /Action /S /GoTo /D [444 0 R /XYZ 72.0 720.0 null] >> endobj 605 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 232.32 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 604 0 R /H /I >> endobj 606 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 604 0 R /H /I >> endobj 607 0 obj << /Type /Action /S /GoTo /D [447 0 R /XYZ 72.0 720.0 null] >> endobj 608 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 242.88 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 609 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 610 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 72.0 720.0 null] >> endobj 611 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 221.22 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 610 0 R /H /I >> endobj 612 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 610 0 R /H /I >> endobj 613 0 obj << /Type /Action /S /GoTo /D [453 0 R /XYZ 72.0 720.0 null] >> endobj 614 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 221.22 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 613 0 R /H /I >> endobj 615 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 613 0 R /H /I >> endobj 616 0 obj << /Type /Action /S /GoTo /D [456 0 R /XYZ 72.0 720.0 null] >> endobj 617 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 236.21 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 616 0 R /H /I >> endobj 618 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 616 0 R /H /I >> endobj 619 0 obj << /Type /Action /S /GoTo /D [459 0 R /XYZ 72.0 720.0 null] >> endobj 620 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 243.98 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 621 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 622 0 obj << /Type /Action /S /GoTo /D [462 0 R /XYZ 72.0 720.0 null] >> endobj 623 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 245.11 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 624 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 625 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 72.0 720.0 null] >> endobj 626 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 216.78 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 627 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 628 0 obj << /Type /Action /S /GoTo /D [468 0 R /XYZ 72.0 720.0 null] >> endobj 629 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 275.1 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 628 0 R /H /I >> endobj 630 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.998 145.5 539.998 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 628 0 R /H /I >> endobj 631 0 obj << /Type /Action /S /GoTo /D [471 0 R /XYZ 72.0 720.0 null] >> endobj 632 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 220.66 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 631 0 R /H /I >> endobj 633 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 631 0 R /H /I >> endobj 634 0 obj << /Type /Action /S /GoTo /D [474 0 R /XYZ 72.0 720.0 null] >> endobj 635 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 235.11 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 636 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 637 0 obj << /Type /Action /S /GoTo /D [477 0 R /XYZ 72.0 720.0 null] >> endobj 638 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 235.11 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 637 0 R /H /I >> endobj 639 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 637 0 R /H /I >> endobj 640 0 obj << /Type /Action /S /GoTo /D [480 0 R /XYZ 72.0 720.0 null] >> endobj 641 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 230.67 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 640 0 R /H /I >> endobj 642 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 640 0 R /H /I >> endobj 643 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 72.0 720.0 null] >> endobj 644 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 230.67 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 645 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 646 0 obj << /Type /Action /S /GoTo /D [486 0 R /XYZ 72.0 720.0 null] >> endobj 647 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 228.45 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 648 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 649 0 obj << /Length 650 0 R /Filter /FlateDecode >> stream xO$W~=_E/#wyi6` ] =1$b'k(UtdwųGfTU]'v߭볼o]/R_~;~aG?o/m~??^W/W'_mWww}72׿ʻ_>?;_?~xw||~/(*o|ivSq$Q$)e`@ Xv,;`)""""""""XE`bߎ&qH$"qx@1ܯw|L:PcԁZ,dddddddYɲe%J,Y6dɲ A,YNd9@-~cZ,c,,,,,,,,F5O߿Ͽ`z.s. AuzB]oPTw,X],KRIJ,,,,,,,,+YVdYɲe#F,;Yvd9r I,X&elbX.ebE,e LLLLdYɲe#F,;Yvdr A,'YNM,s27],s2Xf,ddddddddYɲkT:^d~}~?Ꮧ'ʓ>RdIT77YRW7YReeeeee%J,Y6ldɲe'N,Yd9r26],c2XF(ddddddddYɲe%F,Y6dɲ A,'YNd927M,s2w],e"Y222222ɲ\Zϭk$s?~Ĺޯw}ڥ>Q:nTOT&$J,qRBuzHw.بr$IS,ωsbw\?'Z,ω.b~N,5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,XK-R9b~N usb2222222ɲ'6>.OjC^]wyO?5ԽP]RꤺK=7r˲eIJlbYv,X],KRIJ,,,,,,,,+YV|}؍zJuzHuRݥ~}ٍ:&A,'YNM,c2v],c2XF(ddddddddYɲe%F,Yvdɲ A,'YNbVr:RZu˵@]r:Reeeeeeee%׫ΥܯԯQWԯQ']wݨr˲eIJlbYv,X],KRIJ,,,,,,,,+YVdYɲe#F,;Yvd9r I,X&elbX.ebE,e LLLLdYɲe#F,;Yvdr A,'YNM,s27],s2Xf,ddddddddYɲkTu˙_//rxs\ǙꤺK} uPݨRBu,'YNbވDj\oD"X7"Z,@]rddddddddYɲe%F,Y6dɲ A,'YNd9rbވ],H-HF$Reeeeeee%J,+Y6ldȲe'N,Yd9rF$Rz#w\oD"X7"z#2222222ɲ>?< ?|sƓ+I1\AcTÕ$7000444jTVSmLj7nTS:Lu4IJrR} W$'py!p%VSZMj3fTvS:Lu0iT'>+I1\INJrR} WR} Wjjjjjjjj55\]?xkO/e?>ɇ_VAByZ)oay|RMj7aTNS:Mu('յI('յQNksTTTTTTTVS6ܳ'X^-S>6rS:Mu$յQNks|'յQNks(70004444jT6SmLj7nTS:Mu$յQNksTF9MBksTTTTTTTTRds_V?}?_fW/~uEkOkZ>(}ם<-NnTS:Lu4I{zNNzF^HtםTTTTTTTTVSLj3fTvS:Lu4iT'nNۿzNNZMj5jT6SM0aTNS:It5؝TOwR=]v''a7B+jRڶ-x2ۜ./<}}n?yR-pSwʏo)˛SurR]$IuzTס'IuzTTTTTTTVS=m}I[jS~|MyXnTNS=QNГ;CO:$y!urS S S SMSMSMSMSZMj3fTvSMu0aTNR]('urR]('uIBZMuzT-4wO?O^qJpzǍ<,oO[Z>(iS:Lu4iTFe#ղjIZvR-;Bj)ZMo~N7Y>)?F^-7iT'FjlNjTjS S S S SMSMSMSZMj3fTvSMu0aTNSFj;NYH5 f!,ZMt钷d럿@?\/n?k=>"/sw,wLyZ)oay|RދMu0aTNS4Iui鷺4IuiZ(7000444jT롚ǟ[˫[wfyXnTNS4Iui鷺4IuiR]kZMj5fTvSM0aTNS4IuiZ('յI^Huijjjjjjjj5:Tm<_#ÿ)?h7rS:Lu0iTNR=h7rR=ho;G9G9GVSznӈv#O#ڍ<-FyXnTNSznzwR=h7rR=hoT#ڍTTTTTTTTVSLj3nTvS:Lu4iT#ڍT#ڍT#ڍT#y!v#70000444jkDTm>xk}P眽'zY7o$O;f|} VSmLj7nTS:Lu4IjHlLSNe'RHujjjjjjjj5jT6SmLj7nTS:Mu$H56RTc'I5vRBQH5 F1000444jTVSmLj7nTS:Lu4IjnNj;f!մm)m[JۖҶm)m[JۖҶmjk޷'c|>w?_~~''W{>~!Esiy1A7'TNR} '՗~\9EB/sZMꚋ?;^~Nv"N$˛5I^-7iT'>"I1INHrR}ER}Ejjjjjjjj5jT6SmLj7nTS:Mu$\$9>"wR}Ec.TsZMtx_'؍~k=\btfyX,)rR]W[K^Hu]mM9%S S SMSMSMSZMt)?W7S~:#Mu4iTc#H56RTc'I5vRBQH5VSZMj3fTvS:Lu0iT')'u5夺T֒R]W[SnaaaaiiiTO%dU\2ftF^-rR-TFe#ղjIZ Bjjjjjjjj5jT6SmLj7nTS:Mu$H56RTc'I5vRBQH5 F1000444jTVSmLj7nTS:Lu4IjnNj;f!,TTTTTTTT.UO&㻶7'g/zJc<_t ˛Q,nyZN/@N/ ,:jjjjjjjj5j3o37Y>)?IW37TNS:I56RTc#I5vRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MucёT;>I@^HHnaaaiiiikѹT]ggswfJl9ay|R^Ay-7fTvS:Lu0iT'=rR]{夺~]Z<Ϧ|-SWYY>)_,y|PWYrS:Mu4I$'Q8JrR}\%9>.TTTTTTTVS}\5(q+?.Z>(\yZ)\yXnTNSrqrq|'՗ '՗T_.TTTTTTTTVSLj3nTvS:Lu4iT_.T_.T_.T_.R}8 rS S S S SMSMSMSKǓ*pIc_?~e_~<[9xe<,oOʏٔWlrR]('urR]('uIB0ZMj=TQmY>)j|얧:Mu4I0夺~p'N0夺sTa$M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu:D9H鷺#QN0Ta$M5L5L5L5M5M5M5Mu-:'N~EɞS_?G)?=Wg7S~z6q#Mu4iTc#H56RTc'I5vRBQH5VSZMj3fTvS:Lu0iT'E:]D9E:]$y!urS S S S SMSMSMSm؞R w7?}wY?/#-ɇ_K'ǟWǟKMj7aTNS:Iu좜T.Iu좜T. ]jjjjjjjj5jT6SmLj7nTS:Mu$urR}\Nd8/9]jjjjjjj5jT6SmLj7nTS:Mu$urR]'$Iu좜T. ]jjjjmKiRڶ8udDk_6?//3׫S~u,˛h{'_<-7aTS:MujHlZ6R-;TNe'RHR-TTTTTTTTVSLj3nTvS:Lu4iTc#H56RTc'I5vRBQH5VSZMj3fTvS:Lu0iTNR͍Ts#H5wR͝Ts',TjS S S SMSMSm)m[zbj'}yx4eZ3dz&'dz&ʫYiyxDvS:Lu0iT'e:ZF9e:Z&y!urS S S S SMSMSMSZMx4gpz'?5Q7'dz&ʫYiNS:Mu:ZF9e鷺QNh夺QnaaaiiiTVSLj3nTS:Lu4iT2Iu-|'urR]G$/Qnaaaiiiij^Oִ_ִ^\3Ӎ<-fyX,fyTNSznznznz gVSzO3Ӎ<,oOO3ӍZ>(?L7TNS:I<3I<3znznznZMj5jT6SM0aTNS:I<3I<3znz gfK>:3=^t<xk{ᗹx>$|S~<<,oOʏCj7aTNS:Mu]rR]K]rR]SNv}M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu]rR]K]rR]K^HuݮOVSZMj3fTvS:Lu0iT')'u>夺nקTR]Snaaaai-mKizɈR^<ݪZ>(}E˝<-N7'TS:MujHlZ6R-TNe'RHR-TTTTTTTTVSLj3fTvS:Lu4iT'Fjl;NjRBQH5VSZMj3fTvS:Lu0aTNR͍Ts#H5wR͝Ts'I5 f!,vK5ړݪ|_|xJDkO>2O$?Q^-O(O;S2rSmMj7aTNS:Mu:F9h鷺QN 夺QnaaaiiiTVSLj3nTS:Lu4iTA4IuD|'urR]$/QnaaaiiiiTVSmLj7nTS:Lu4I 夺QN 夺I^HuDTTTm[JۖҶm)m[JۖN/?Yw㟿y>_/z3AnyZ)ܫyX,?^ yT+RN%Iu"夺^QB)70004444jT6SmLj7nTS:Mu$z{EIu"夺^QB)70000444jT6SmLj7nTS:Mu4I)'鷺^rR]oH9WTTTTTTTZj'NI/?Zm/r]]mA6[K^ַْz夺^"G9I^HuDrS S S S SMSMSMSZMj3fTvSMu0aTNS^"G9Iz夺^"G9QnaaaiiiTVSLj3nTS:Lu4iTK('9wR]/TK$/^"GRdui|ӯ>?>7gJ擏Ay|PvNy,˛:Lu0iT'rR];夺v.Iu\R];ZMj5fT6SM0aTNS:Iu\ڹ$Iu\ڹ('յsQnaaaiiiTVSLj3nTS:Lu4iTE9KTE9KBkTTTTTTTm[z\jnOv+_v_Ï NH/qy|P~:@z#O;7rS:IlZ6R-TNe'RHR-TK1000444jTVSmLj7nTS:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH5VS]{ѥh|z ѧ{ѿᛟϗ%x ѥY>)?R^-_V)O˻夺PN夺H^HuҡTTTTTTTTVSLj3fTvS:Lu4iT'C::#N夺PNZMj5jT6SM0aTNS:IuҡT!wR]t('uHGBzr]_>]7>e0Ay-O;}<,oOʇS:Mu$5aQNk¢TׄE9 KBk¢TTTTTTTTVSLj3fTvS:Lu4iT' rR]; rR]夺&,M5L5L5L5M5M5Mj5jT6SmMj7aTS:Muꚰ('5aIꚰ('5aI^HuMXjjjjjjjjOOu-|\ruy//W7Airu#˛aTNS:I\I\I\I\R=/W7rS S S S SMSMSMSZMj3fTvSMu0aTNSz^nz^wR=/W7rR=/W7rR=/W7rS S S SMSMSMSZMj5fTvSMu0aTNSz^nz^wR=/W7rR=/WoTՍTTTTTTTTruf>Y+\/o&Zߟ)_At$OI1HNIGrR}L:cҁcґTTTTTTTTVS]zs=۝|M:It$פ#yZnTNSt$'ǤNIGrR}L:cґTTTTTTTVSZMj3fTvS:Lu0iT'>&I1@cґTTt|'κmpv/YAsJIyX,_0)rR-O\-'ղjIR-TK10004444jT: ~'oiyoI(WMu4I_Tc#H5vRTc'(Tjjjjjjjj5jT6SmLj7nTS:Mu$H57R͍Ts'I5wRBYH5 f1000444jQG>g{;|ן.{Jz_?QˤjKNP:"N4 夺NPN4aaaaiiiT_`Qɏo)˛hʫhrS:Mu$urR]Y$IufTiIufTTTTTTTVSZMj3fTvS:Lu0iT',:"N4 夺NH^HufTTTTTTTT .Of;/(O>$G' ?(˛O2ʫO2rS:Lu0iT'cF:f$N夺I^Hu3TTTTTTTTVSLj3nTvS:Lu4iTh9cF:fD9cFR]nj(70000444jT6SmLj7nTS:Mu4I夺I:fD9cF:fDڶ-=fK5ǓYqޞo5Ǻ>KR(PW$ IuzC:& $$$J,+Y6ldȲe'N,Yd9r$)/MbrvQX4_15YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN|9Mr˗$],_Nܯ)5YYYY&Y&Y&Y&Y^s|tyq}{xIEkOj?qP)?sP7'A0aTNS:IlZ6R-TNe'RHR-TK1000444jTVSmLj7nTS:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH5xRdo\o>vN,Muh('յHh('յPNkTTTTTTTVS=]Jp#.%WK niyt)<,7aTNRTc#H5vRTc'I5 F!(ZMj5fTvSM0aTNS6I57R͍Ts'I5wRBYH5wP_ǚqk~Xs}/57c͝Z>(=NN$Xs''Xs#I4I4I4M5L5L5L5M5M5Mj5c͝|RzWǚ;yZ)=rS:Mu$Xs''Xs#I4I4 ƚ;VSZMj3fTvS:Lu0iT'ƚ;9ƚ;9ƚ;9ƚy!Xs'7000044c5߷d)og?NC;Z![MZ)<,oO!!ʧNSZ6R-TFe'ղjIR-TK10000444jT+mQ_땶IzAziNS:MurR]HrR]7PNM5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu rR]IrR]WI^Hu] DKod 77?]KЍS~Znay|R~ZnA4iTKЍTKЍTKЍTKy!t#70000444jTOKi Ii W%F4iT'9TKЍTKЍTKЍTTTTTTTVSZMj3fTvS:Lu0iT'9TKЍTKy!t#7000444t-,A_3'm'qvAS~|<,o4iTpSNm%Iu 7夺ކ[Bm)70004444jTZNvNy,˛Q,4iTh9ᦜTpSNm%/ކrS S S S SMSMSMSZMj3fTvSMu0aTNSކrR]o-Nm)'6ܔznM5L5L5L5M5MƓjK_~/_<>>w+/W>_۾.=~w{m/so_?~8>ןO_}k}o~WګAQWy$~ďoOޮh+ endstream endobj 650 0 obj 14873 endobj 651 0 obj [ 488 0 R 489 0 R 491 0 R 492 0 R 494 0 R 495 0 R 497 0 R 498 0 R 500 0 R 501 0 R 503 0 R 504 0 R 506 0 R 507 0 R 509 0 R 510 0 R 512 0 R 513 0 R 515 0 R 516 0 R 518 0 R 519 0 R 521 0 R 522 0 R 524 0 R 525 0 R 527 0 R 528 0 R 530 0 R 531 0 R 533 0 R 534 0 R 536 0 R 537 0 R 539 0 R 540 0 R 542 0 R 543 0 R 545 0 R 546 0 R 548 0 R 549 0 R 551 0 R 552 0 R 554 0 R 555 0 R 557 0 R 558 0 R 560 0 R 561 0 R 563 0 R 564 0 R 566 0 R 567 0 R 569 0 R 570 0 R 572 0 R 573 0 R 575 0 R 576 0 R 578 0 R 579 0 R 581 0 R 582 0 R 584 0 R 585 0 R 587 0 R 588 0 R 590 0 R 591 0 R 593 0 R 594 0 R 596 0 R 597 0 R 599 0 R 600 0 R 602 0 R 603 0 R 605 0 R 606 0 R 608 0 R 609 0 R 611 0 R 612 0 R 614 0 R 615 0 R 617 0 R 618 0 R 620 0 R 621 0 R 623 0 R 624 0 R 626 0 R 627 0 R 629 0 R 630 0 R 632 0 R 633 0 R 635 0 R 636 0 R 638 0 R 639 0 R 641 0 R 642 0 R 644 0 R 645 0 R 647 0 R 648 0 R ] endobj 652 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 651 0 R /Contents 649 0 R >> endobj 653 0 obj << /Length 654 0 R /Filter /FlateDecode >> stream xTn0+ΐ%z3"$0[ƒwޞHI@Eڈ$93ʇGAOE^kiiyu7%٩VzgՎ[~_Q5xB7hP(-j[!>j{a QXդf8$v)H#r:t)6$C0ŽRv? :2JKfi^gj V=!,JcLv)oźʪ!HocF?[e|qn{o&c!UYqU*LK"-ۥ.sTĤfZúxD$~|sZMlLp9!CeV(Ӻ)mbۡgB˝ FL} 1>`ގ ՆBvR޿& endstream endobj 654 0 obj 507 endobj 655 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 653 0 R >> endobj 656 0 obj << /Length 657 0 R /Filter /FlateDecode >> stream xTr0 +pLaRIߺ3y'ud[SrtEvsj"yD<0OF%x( n^߱nvα[ .@3x]oxL↰ >$!Y(a$L۝3d7_yV}@k! 48F{2#ZjNX ?2Lֹ[]vzoR""qBwzj`ŜFhEV&VsR5v]9e1+W3.|Jh[7r^d[J$ĨdЧiUls䮡ո`h6-{E?U♪g}?Pv-?tzdN7cMZw0>x_YU۹ endstream endobj 657 0 obj 527 endobj 658 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 656 0 R >> endobj 659 0 obj << /Length 660 0 R /Filter /FlateDecode >> stream xUێ0}+1wl.V[H}ج*JH,&; B3>s|HR wcq`q?1\Ga;`?C;㡚ݿv!l/=+}[g1"o:o|(WZk+=;|ʳ2S!4oΗpPvQ񫖬#'YeB;u\$MjDta֍ y_?Qde-9x "r*rStg=}b)x &P-g$Y>ikpmBQ&>B" j!묷|oRӆ3s d@ yYN,R_NϤR9vBDp5 $TqO6O]hE)%3*ŸkTi>'&.ҽ5.'8j6503 H"Mݴf@Md`v2V"1= z?IV埢"fd|F*Uu[NSh%2@պˋ}}4UTFl.{x4E1MO|xҍ_寏!|w8_WV՞o endstream endobj 660 0 obj 594 endobj 661 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 659 0 R >> endobj 662 0 obj << /Length 663 0 R /Filter /FlateDecode >> stream xTn0+HW fD@Il)Ezؖc=5q]>G0H!DF 9t QŌ'Y8C°[?q!'kKt{хۍěh~ ߔ6U!]'@rgmLZ\Cۋm_ \6oLi=d_$ZAE;ud]ͧ%$;pLw/Ԉ(c!Y?Tf;s_1g"(NСoY2Eq. uU]s`m5Khb @hҁ Yzۖ3n#LK_`)WaϞJ2H$,FE:l^VWqDHYb/Sm@U?U_bopymPʆg1'dLc6mnik r;te~3MvIgbw(=ZzbN2Pʮb endstream endobj 663 0 obj 511 endobj 664 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 662 0 R >> endobj 665 0 obj << /Length 666 0 R /Filter /FlateDecode >> stream xTKo0 WGn[-ڢ(2'1ة-w뿟WZ۰"#'FfkaZTcbq{~@ÊUz{BO ;/zk6!‚}Iا!J'c5JRp HpsvY.g.+[2V`N~͖Mht\Bu$նB~ED 3LCx)"IDa`FBqE~OTVk O@L!SfVu G ЎR*h[/y7'Tj_^J'"_ܞvzo$c!<~.:@8$\Z뤱{/i}z`Sd775 "ۺV2ۄ*AG'4s, ҁ2uuWM 'v=y65q':_Q =-w1?t~d:r3:JΪ/+z endstream endobj 666 0 obj 505 endobj 667 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 665 0 R >> endobj 668 0 obj << /Length 669 0 R /Filter /FlateDecode >> stream xUYs0~G J!dA8̴Ӑa2&`z|c ~oWnqKqpH d"8aa6@m[瘍 >pk?p ~86!!,g#x"&g\l IKuDnET .9q$r)"!WTJ=l. uZ J2۶uNh;7.'h3סJiMɴw!\ZDNՙlmDqB2[PļrG1Hv?`^ nFj\0SpD+;ԡ!l5}x<-Nr/)|fIആաMuG?vK,+f%ɤ_ucYډHػ |ݬ{uiY/=oSWxvnOvElmu`Z$ļX&^9)^b6/Z9r4#S)+gU@ endstream endobj 669 0 obj 627 endobj 670 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 668 0 R >> endobj 671 0 obj << /Length 672 0 R /Filter /FlateDecode >> stream xTn0+HW fD@Il%G.E=5q]>'0Y&F%|,J,~WW<a,[R%_{Fg3 EM2oJA#@([4ܴ:7seA"~僕c=4<Ͻ :lzWk# 0Vs} RQj~w_2He"E6|KiUY4>Ț9xhf=`U;#H/ |*IVU$)RIYbp-ځMՆ Ɣݏ};=,3M1/(vVly=1R)윢Dʮ.D endstream endobj 672 0 obj 506 endobj 673 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 671 0 R >> endobj 674 0 obj << /Length 675 0 R /Filter /FlateDecode >> stream xTn0+H>R7#zH eh,9z]Jc9SSD|_A[ u4`ZJ%)P,dp00@[;0 GE5ctx~@{B]iCXFU-I֚TJZIps,wWm1k\Yw}dhw}?-KHwuj-"`d> endobj 677 0 obj << /Length 678 0 R /Filter /FlateDecode >> stream xTMS0WR:Й@8d' G I{*Hy֓v EhW0[# BHᖅ}@hÈf>m aYo 91>dN{ OWZo˼z[9bS2aS tT9N(1AN~*Q-(ׅąrr69¤c!%)>:{i+c gstwV2ۄ-;"%#Eq~*wc[͐C3q w } #Ne~lJ7; endstream endobj 678 0 obj 481 endobj 679 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 677 0 R >> endobj 680 0 obj << /Length 681 0 R /Filter /FlateDecode >> stream xTMo@W1vfnJhzH!``M}w114&cΛ73FaіaZ@3HՇ(Q@ a # ;ح \5 :e49oJ*8_$@ژkQlÇaO+.*7/70}o,IYuM-kpF}_=uo([c!q%lj@̂I"Ob }G"fA*S9Y)|Oj렋 >dI] *Wd+.@6+l]]:2LhJuv B%ݦش5a5%LD仵=CNW0 "BZ;湣Kgn>BX氭-~hcOl>|݇œ"&1bҕjy'ѽbIg 4%ĸ0vè?u^O[V 0(9z ͘ endstream endobj 681 0 obj 509 endobj 682 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 680 0 R >> endobj 683 0 obj << /Length 684 0 R /Filter /FlateDecode >> stream xTn0+5KR|W @IP8ĒKJ9SI1;;CBA[M1A>DnY Cx0X7~c7vw#q ƣ ;i눗@)m4y!L{k%12Z& >+ݼ W[eVcN}MȦw4kho!݀;wpdSTA"ǵ?gUk̐$g"$w$✑ zN\)|Ϫz렋 >d\jW+-@m^ٺκtDH0X)Dm?/'w&JW4a.̵%HDi D)#վc;Zthz#˽U6H.9+>TqLrBLƪVwp{;(gx08묷w[&xbD|bxy=1ǏZ(Y"uX}eW͊ endstream endobj 684 0 obj 511 endobj 685 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 683 0 R >> endobj 686 0 obj << /Length 687 0 R /Filter /FlateDecode >> stream xTMs0W챙iJ-+7( !a84&$JDNm~=+1IDk{,vyHJ XlQ 5IqQ66iц#rpVX$ 9J6].eB&|]nubrLYZ+rP=yɱѪh%Ix}t> endobj 689 0 obj << /Length 690 0 R /Filter /FlateDecode >> stream xVKs0+xQڤLͤqCfb Ǹ$`NOMǬ}]Y<9N-"ESM9Mb=ccfml [c t0|q7Q~NoaX9·K%g"FPo8C@u}ˤlaO\^.DNXBRg ]U. )Q'Zt[֑ήTQ9ʖ{jڍQ/K?~-D]-z,69Թn Aj;v \ZN Zk[j:Q{4782kS,iˬ]?":NMqkE<#)IˣR1 ڨFUkWn) zR]d7}Z=g)!U{!T2ڊm@զs=D7yIx}Ǚ$QM2a#KjYm<и/>lhgc7W#uҦ%:*+Qڠ=<9fCnp ?{#x=2o@ƒwBɷWVU_uw endstream endobj 690 0 obj 772 endobj 691 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 689 0 R >> endobj 692 0 obj << /Length 693 0 R /Filter /FlateDecode >> stream xVKs8 WLԓm߳d4(&ɿ_Pˎ洭 ȟఫAE,(vVtP`^QQKёᛧ< ?P<'Ϲ ۣ@n?(lfhFX"H"sa6|z_+# |jo [?,>~ʾv8ca ŽpBNIuDUc J?0rsݧGӝt؜B8|Jq89jD"|ay|l\2/uZKek^}֠m<,1%QYXb7݋hGSq F#"b'C`Qi.~{uI@/*̩,$J!bkfK|%lwhJ^sN( WN+Fae^ !ZL˸2-V STD;=A\6ձ߱Ȃ3MTҗeh-~pѸR#3^;]EU?ARĻ]ɪ1/猟r&fN|Brbm*Ul&UNeDG=;fwr'0Q脯_0K(%@x;6)O1v58M1pfbr{= $IdϑqpҦ) 2{B9nlYTyݢ;6+t/D=衰^׆$' x*L MjYjl5`kDV%M ef%()3 SOf&% z䳔ڻ,u`_bk(Idߌ}o endstream endobj 693 0 obj 860 endobj 694 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 692 0 R >> endobj 695 0 obj << /Length 696 0 R /Filter /FlateDecode >> stream xVKo0 W"޺Wa5=%OߏCy4iwZDǏqa^ymX Q[q@}BFio8":NVݓ3 JspF+r}U(,3o1FaXS0’4Mȇyf[h/;|ݖ]pǤ+;cNIu(L)@b 䤝ge)>~8̧a̡wV q6-q=<5B |n H4 Иl nft6c4 'PSE$zn GDF#iēFN >'yI@T/.A$JdUo[d +Q6`䢙 C!( U+ =0 /0E7 P0>w#]Զƞ*L8 8â eB0v'L@wUVܬO["1v7~W~3ϵhCj;Wەe-nנadYx-Q#=9d ԸAU[E)Ҭ};8s|>yI// eē|O! C bR7ƤXyN8lhWY]`Z2-.Vgמqn0:/Vkݓ$ݡ?i'3aZgf55j*DIØ" X0x] S] X+ 6LF;a@h<|-e2:t4s{%&dKof^gT endstream endobj 696 0 obj 856 endobj 697 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 695 0 R >> endobj 698 0 obj << /Length 699 0 R /Filter /FlateDecode >> stream xTMS0Wܠ:&(g,{J8 iOcz'=3 ,v shR!JPECO8 ~!\>X6v;"ܚ-[p\_V( ({a I?v@" H!}&t-PpR3!.໫P4Ups ~MUΝC2&*LȓvȕRQM}(7>R :xK ,&)8Z6kWZLbhijpOb;ޥ*Ċ[P:$Al{ Bq)hm&x=b|r~?w_0o|:Ry$SUM endstream endobj 699 0 obj 479 endobj 700 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 698 0 R >> endobj 701 0 obj << /Length 702 0 R /Filter /FlateDecode >> stream xTn0+h5\J[_)Л9Aش#=ڴ_ߥvNOM$AFrvv{m$h! CA ?M=7vcaqW 7.W,/Ɂ|Si"0] 1&$Bt ׃O+c [i L_h7WoYE]@~ ܹPhT͠ADj ԕ?q昿 $H*DQC߱$ЄC3"}HPݖUxjk] *WkgZ0ށE ݬ}eEZtTs0,UWxlq":mWІ͵RɴEǦni![+3kkAt4}"O}BΕI!IĨKg=Itzi V9(ݦوϸЖ>8_̆ww) ij=C :zbN7a)Ek|O6WvQ endstream endobj 702 0 obj 536 endobj 703 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 701 0 R >> endobj 704 0 obj << /Length 705 0 R /Filter /FlateDecode >> stream xUn0+5;\зn)K@IP6m DK;.v{j"&y3=xB-`ujC(@CpńOpe@ݎ}?f l&;ٻ#tM^1#"!l aUHk"&vn.>$67O9\vlj&w}Z \h%ȲvBV|XBa HBB5$P#Ԃf>t[IsL`KDNaAkƅfZљBn|3yZhN:82f֚582M ҅-"rGrȂ pr_61G40R")Ն?s [g 9j]P˂8kDJꥴ'3۵yd '(b\'JW>l.%*Hp~:*pL%m-9Z=-qibkIŹY?3ir[=z8ޜw>8ՄF4RW3ȵK^f6_Q1u+Y~92?:3Ȣ yªC endstream endobj 705 0 obj 587 endobj 706 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 704 0 R >> endobj 707 0 obj << /Length 708 0 R /Filter /FlateDecode >> stream xTKs0WPWo[_Lo2l鿯dˀ О%goWDa0bC"pz1Iʕ;+!|VՇs~߉#_ͭG=32="oŠ|Hɻk !]Zh ܆Cs ׍[E骫[H Zvklkж2-SGGj|]*ZDQed2i֥[.ۮ:yN3|(|@dgʤߜc0/97|f&w5dh9Q3[7y$;R ZUL{ەUQ 5Id䯁0\7^Jdl1eNƗNk&PZ^^úm?ND#mS^-cʥBSsSZ?]\Hl6H-hmPxڋ)NP(/1?Ȝo&0ɠ2.6WV5a= endstream endobj 708 0 obj 510 endobj 709 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 707 0 R >> endobj 710 0 obj << /Length 711 0 R /Filter /FlateDecode >> stream xUr0+0ST=ҙhtpA ;ݴ_C8@jb3HHG>:z`slp cb ,>H  Xk `?vơq:w=| dSpwoЍ#x r6X .x D@0,!A$圧11EayBVW7\Wy!˓2B_nMPKPS@Jw(1u;d&cm cQ8gBH% cbvq߳c(5LR4k"ZI ^jVSh\lBQS6ijW9`DZu$qO-R纣3>#bi2Wg\W*$lPBP)vɷjWz%F)Gqrixc|5tX)"̎ܭAK[jBJ0v),f.2)?j`X[m.,2)F3ßU#o]S!l]뗙F#ۊ-0AI@&PЅ{ :[ */]MYY?Ѽ} =Cj\Τ,<߽mQˍ3xd.L)BSF!m`c g8"V'X (=9wI̮)C endstream endobj 711 0 obj 677 endobj 712 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 710 0 R >> endobj 713 0 obj << /Length 714 0 R /Filter /FlateDecode >> stream xTn0+.%Qm=p# 8(PvD}I=ˎݞH(8!tJ3dE4`AS(9g88=C?㱛C8~okS}/ʕyIBL\HJʭ:dVLc"| ۪a`[涁2ʡ|2b/$Q(8~߶y=R :B+綘!-w$?vX^}yS@M[@qjY:C$weʷdf2!Fc3kB`QդbvB> endobj 716 0 obj << /Length 717 0 R /Filter /FlateDecode >> stream xUKS0Ẁ_驔@8GI<%cP}%?dL`{ݵZ{>sK)Up7$X/"Q $D4^ ŽϰQvx\{ d[p}ck+!͍WA ]ņa|Z."  ڐ rӘA䳒F1pJ ,_{2BY]|ˮw}5~ %УÀbؾzݚX!yMqC7"J0 !9Zo4 k(M1)LHFh mq/$Emv6j@ʭ}&Řs'$q@IzGWRպУ*[L!<{8JnW'_G@XBLl>6۶l31Diyb[ӓ//V1\)E( ΅\C!D&澄7j5ȱ?DQMap.#:=~mW?VlNt}4Ru]›.\h,ͶQxWjsXj)/)ƳY3}ʳ|'֧ʓf%32䪪[&ړu_.!r(Īb2cN=̠TL>)*(u33>c#0zL,yV`ոah> endobj 719 0 obj << /Length 720 0 R /Filter /FlateDecode >> stream xVMs Wpg ۷~x8B&J@B%76ǰO ^& ؕγ0 pc$5 uT/(ZauPy? ͹h*q#:7Dл i|F`Yi= qq .Շu +&W ۉb|yߝٺ޴CC/mP؂:.  IP1B5dFժeD+3o< vr3t= |C7c{~P  ۪ KAYMAAe H$iZSa7!W͞D*H *UO<5ơ,D&7dXqQlY,VE%˿']z˲5!?L<&RcD^tZuv!)Z jN/A "]ċu/IUƹr"@`nyr`ֹ76}m5e,)jˉ;af}(9! 5x/GVQPo)nI "Z&mpOCfZ/,T4|lC[Ŗkh['G*f -xGv/r\ :{6$[3}wD2Skv4<:uo 6N޼NhE#hAKS mU,C^Rۯ\S&Ff|[îITifߒWύ`=!_|(Vw sUu{yc{mp"up2p8d|`&?h endstream endobj 720 0 obj 832 endobj 721 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 719 0 R >> endobj 722 0 obj << /Length 723 0 R /Filter /FlateDecode >> stream xUMs0+J|W: 3=$9P[b\'1nOMbyey(=nb=6C!P5 nqStWdخ5~xC=Xti^]K'BMiCX{bM!^HJ"™t>ڨ'7{0i߼ [Nv^nY_A[HT`Dؾ:v^*,(7ƬCf}]9o>#rDjCXH._~ߕFAu;l+H`VPeI4˙E6ez@B{>|WeKg)E"iHʩe=]fm|_[M8#%$|)m:Z#66.ĨFzO\å&bQĠ-j]&0Hr킺ڨwŸ'ЅM=1IEun1/Ȧu<4 M+Φd$qGfX EeZJㅉ=nS zb_DQ(h Lt^Uw endstream endobj 723 0 obj 602 endobj 724 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 722 0 R >> endobj 725 0 obj << /Length 726 0 R /Filter /FlateDecode >> stream xUKs0WfUĭt 39,S[&)w%?0ў >kWo?^["s^AA|`.µmLco>mmg v(|s`Z{g:(O3ÝlyeRy82x}umJr]`:;ڭ`vjKZp hz,;8%N RlLkLR&Z8 wr>:K&$&=RSs΃{~j[h ̒LAcm ȗADž*KJx,=%zzWoʤlMB 0RMpU|d"9v 6SX΄I⇮ڙU/f4Ԛ(Vo{ פgK;Mmp8 _8":I񍝰V{ `Ȥǜ]ƶP19]U\z,5!FJIu`.f1aG7j? endstream endobj 726 0 obj 642 endobj 727 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 725 0 R >> endobj 728 0 obj << /Length 729 0 R /Filter /FlateDecode >> stream xUKs0W1$J[_7rp@L(wS C+}7gsc/H )̈́Cp@ Ix@M6poi HpvVs\xgD]qCX[Bí!\9~+gR# LsK/ҋ2t1y5C溮k{ٶ.4I< C.iQ^ϯ itw"\:FNNmTgB9İmjoGk3!ᒟ}ż endstream endobj 729 0 obj 610 endobj 730 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 728 0 R >> endobj 731 0 obj << /Length 732 0 R /Filter /FlateDecode >> stream xUMs0W1$۲+FL! x2DI}WО zۧv̷SȰAg"p¦k5rq aYÝ=oEU5[o2 4>NZ3q"&E.-_}εM-f6N{J.Y_eA?JMReUG@W TEe-̲d<ޛNi)}#\"r *|R0%akL53B]@;7/!ѐ,Ej dճ(Rm&5)I]0 .E;PcbE ETbll1orNˀɸ~KL *AȏcE)qn׳GBLIFE-m6MA>EKďžf^d;K\0_pĠ9| '%fӟ~`fXy$rXCf'_eS!k!ql:?hwOtn:="e7".:}UP;GH;@Ye#Bݨ]]œE?ԼWȜ(ȢއO?_J endstream endobj 732 0 obj 609 endobj 733 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 731 0 R >> endobj 734 0 obj << /Length 735 0 R /Filter /FlateDecode >> stream xUMo0+JkuUު"P@aRMkGc[3|x ~fy}Ln!4`fɮ^ԍ#DQ³'< W`F:=^JZSg-m~#bMydA ޏԻ{H$I =3RYf|iUc^䪒y& !/aq`Hu%@vj&sq"UߊnguN=.Tr6+QTyoCW{U6^aAf$- YXl,y&cYFH/C:7tVY^k۰·o6[xFDy߶X:i*Mxwl7Y~ѣcyk uu T_)kLoaAlqtdOj}[_btEub&pug#(}!6Q79X/>U| endstream endobj 735 0 obj 482 endobj 736 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 734 0 R >> endobj 737 0 obj << /Length 738 0 R /Filter /FlateDecode >> stream xTMo0 WF}YVn؀A hC*XNmg$qlaI|"D1AiI<ŀ!PAtpnp{b[[?c76v 6@;fx a|(B:HL"R!"i13̔2&Urrs|/;]ܣH]B"R5Á!QkL5"VU+lvuh2@0(wO0{{(ޚ2!#7SXC'"O$aT weZvT=Őhiu鮫6bwK"kwPUyNU*5 #rg^Ӿ("/B7OLtOC"Nx0+Lua}at__͙+_#,[&E[=md-(Le>uF|6)̲jPo^ &JHWԔPFDJg?{bض=NrVBDGMrb~eU endstream endobj 738 0 obj 538 endobj 739 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 737 0 R >> endobj 740 0 obj << /Length 741 0 R /Filter /FlateDecode >> stream xUn0+hXzPE=0" 8dZ#1]aKD2Lr\g6"s1`1?#xѮA6ZumӮm u2wCqvNssDʍ;n}`Z#>)e !qydqWeY%n:#?o`.l:zZ=E$j sR,[B&t}J&` 3ƕ\M'a9^ǘq.%\תы*R/R:nEA=hk)Ձ$a> endobj 743 0 obj << /Length 744 0 R /Filter /FlateDecode >> stream xU]o0}Wܷ0mI{TMUoN4ʿ5 I{}||~P\#cY=wA B`>m\lFi߶rG 6^nGDFa}IO70 |/IJY "pBUuZfmZ[S]>BW0{kl'IcC#S"YCpD0Ny'uZ?eK~9 gƕIm]$}""ُp..;[̚Y@+Xe|!/H8FHJ0tvJﴈhhHbqȣ^C,&OgD@|н]b](S #\'7R uê*[AmTGamʯJr8g*894785z_\1L6JUK3~3Czevs2]}uנ"`Nܤ!PXckkt6 6ib,zWi>t]Cn!O_J=aj &]@:8>_z>N.AUUgNQ cdoGy%]$:8OLo' endstream endobj 744 0 obj 643 endobj 745 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 743 0 R >> endobj 746 0 obj << /Length 747 0 R /Filter /FlateDecode >> stream xUn0+hX>$QE=0" 8dZ#1]Gl&a#r8,=ȘCVx@r!ĂOxpE׸f,}ڷ-DN(|!kw}W(,/6F!> x@) DD=]NܮMVkkGH~xߒ ~ f=4H6ࠏNDgkS%1Tt;AFl~ʖ6ԉsBd?9C 1G'RL8.;Je*\B(C ~/흻HIINf C|BFC(CuS`f1B])Cv)?uL=0A'1 #?%E<p,Ui3UU쵃B?P"۔_UzqNqsFiПmkD0kJUKμw{ yQka!^7]nnXXckktcUZj82ӂGZtB9o}麆"B lz^TF׹6N-OᗞϷkrPBUJ]=Jۑ9I."&ًUu~ endstream endobj 747 0 obj 637 endobj 748 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 746 0 R >> endobj 749 0 obj << /Length 750 0 R /Filter /FlateDecode >> stream xUn0+VhXZ(֢M CL[l-ߡ6/ݞHI>qOg6"s1b~#G}m 3>}'{G;;.a;gzB+nVΗt/ҺO)]#{qsx*euZ)#?o~]~ f=4H4ࠏ : #JILMM9 g. ;C$<↸1\gef J SE FCIX|(aȵpH#( J#%vlJ5рD"1u^Fߙ0'eh.bURW$r H8\IsJ3&ei^< 2Y0$=MUi6 \'g ǙB ăq!c{]WF莮wd>uN7h 6 hSkrd7IpZ# dYAxQesYmef2!/\fcrTR{J-=JmtO1P_#s#$l$< qsƪ$1 endstream endobj 750 0 obj 641 endobj 751 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 749 0 R >> endobj 752 0 obj << /Length 753 0 R /Filter /FlateDecode >> stream xTn0+.I[6zs#8 Dc)M],+& #jvg&i\z =+AcHh"RܰS|^a\T>|nn ^V ;#p oش'?6%OBV%\K(Ǖp{fy(ybQe뢼嫄`Nk}/t[^l Q [Ch%#jyl LS}Y7jjp:qH.")7@gq'I% 'qfR>g׿ ʊ%bQ "7D?loޔYQ@ yokUO|vQ0)-i]E(TmKj' ўxonj^sCj!Ds\%M\lMBD DmbJXHÝm|i4uZRzG]QB1l;h'Ĝ6RmQʟj&u endstream endobj 753 0 obj 510 endobj 754 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 752 0 R >> endobj 755 0 obj << /Length 756 0 R /Filter /FlateDecode >> stream xU[o0~W }۴uUEC[M8 @bd{Z Qq=@ 𘢬 N !`\4`Qt=k٠}5x~{λ%*7@kS}  HPCQR$/Eݤݴ2kJ֗(}Iezo]Pk&ha溳iU@j z-_>+S4ͺPFpBH^;x3自2QוB]4UlƜ)FږJxewtնmr 8Q4Uz]TrpprQR,$qquWtf+)!Za?>:S֜չPS'\dJ4NړĬdNNh|e.͋WE=QmN"TL;ˬ !ԟѱG%T+e.H 2ۨJ/bwl{f'YÒM[_9{8ޙVsrJY5N^ ]}ibO#tpFGVTM.JmF :W+tFȖXベlg^Ù73axdNߖܘ=I|8y/1= endstream endobj 756 0 obj 661 endobj 757 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 755 0 R >> endobj 758 0 obj << /Length 759 0 R /Filter /FlateDecode >> stream xT]o }W@6mHQ=mRSMCK1NmGSI^ˠcr;}2ҜuACXDp¾@Ì]3l'q+6\O"Q"rCؐO p)!$듴"KD&h* $$mU{< W@|I.%p*Xh14j>8RP#?Uy Ywf[^bw=!t!3m#IMg"q%jL0?l l*nUA_`E7#\p#a80 }u}u0O0Ficb3`+fy<LH!},7ܺzL慳/XMkDViC%ӈ3D!f&ևUPo- "> endobj 761 0 obj << /Length 762 0 R /Filter /FlateDecode >> stream xTn0+7QE=0peQ$ߗbGJ攄D≳ya6ҜuADC\y~@Îf5s aOWr}ѵ%,F aK>%ålN IWL & IgI۪^{< W@|I Y&&d_M -" xGGrjD5lkTl֫=AO-cr&<׾i/к9(c7K 2!cK(6VlZuUR ?~鮯Ey콱/iE!n=_ݻb_eG40ѱ1|10-vy<L(*yv>Cn]= bii慳/ǔG2ۇFNSې z @iC[_,<*^I|P U1+G7%] CnI&l. endstream endobj 762 0 obj 498 endobj 763 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 761 0 R >> endobj 764 0 obj << /Length 765 0 R /Filter /FlateDecode >> stream xTn0+pEZ)ڃ#*Z TmX2}I-vjNIHA$9ۛGEX}h"Bb ɸp+⁰w{~F7]x\ߨU ^E#G]>чK. W$Lp4/lUܹKW@=YƿdS=5%4n=?82+1GADQLV=Orqe3NScU,)buTO9Lwr J]f/2[a9O&:bD#8Э֫Wn|πy˜ŏaҭg@B1qգi eXHc/FlZ:kIHiZ϶ʶ&p '$'Dg ]هw[WAN&p_JHwB1ݣ}7]3",Fd+|cVJʗ endstream endobj 765 0 obj 496 endobj 766 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 764 0 R >> endobj 767 0 obj << /Length 768 0 R /Filter /FlateDecode >> stream xTn0+7QE=0HeQZHIԞH> endobj 770 0 obj << /Length 771 0 R /Filter /FlateDecode >> stream xUn0+5;D)mZ@  4A鄭,9_R-/d#g`P@Nb2xj1 !*C0? y{w@M{P{.9h눷|U!<,i ID*9D? %]$fU\*S{Hx9e,ޛڿd]=KfT p`H]Vy+͢Y,n9"@0(w $JQ =ҧ1#Wm Cg-+7Ey}t,Q I>j՜s-GXEqU^ӋߍS.@ꊱ=},uQʘc媡}+ ֢PWD>ufʧA2%EɣqI$I}jc-գ>~f\hp5,d=Y]2EfZp)&K|;&L4\'`܁nV mԺC MfB(/vKVk8YwܵJ,]+:4rc7)LGiE ö=nxИ_ΙW$ڻ'/Vտ| endstream endobj 771 0 obj 609 endobj 772 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 770 0 R >> endobj 773 0 obj << /Length 774 0 R /Filter /FlateDecode >> stream xTMO0WUKVDEw7*q8_;fYҞ8xޛ<%08) /t QwV8LSa_0w5J\# C%I:wU2??Ulk|@勴\$"4ćAVIV7w..o~&߳_N';oklW"R-ӇCBekD4^wT]vPB`QL&\@cgI'Lhuǂ1uh r[%;WyW/\nᾪ IQ zv;{)1J2G}ʭ'G@$iyږ5 ҐT cT(r?NӚP}>MLԁ2"Eٺ0jlfm?Ɩ dtvE,NTq?İp_5 EGF[ endstream endobj 774 0 obj 491 endobj 775 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 773 0 R >> endobj 776 0 obj << /Length 777 0 R /Filter /FlateDecode >> stream xUn0+Vh!PʭE=0" 8dYJ6[D2Lq7ѳE{e0s(p7us5jah, DH_[-i!|5ָ {5+YI bCX_BӍ !LqH]|b< fȓ2ַpM;w׸l'M -Mp:Hr hwԤ!י)˯ ώ#ښjE#Ztw{ie*xWI*\d(Xu JBM]&>'|mNH<[wvA#c~~Lhbf9[] Y\l<ŚP7 Ө*7'67N}Mʸ;SKeanv"BLlu=ýLpz}t8s%U'mig$X廨r_i+ȣlV^"`T$Fl/HrNFjfAQ4S̞b 0^Է 7*?|PxcVg6 endstream endobj 777 0 obj 612 endobj 778 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 776 0 R >> endobj 779 0 obj << /Length 780 0 R /Filter /FlateDecode >> stream xUM0+D0UzX)Z6!; Q}m>ISwa<_ h;ȀA;/-FA2Tn0Ŧc76vk(dХ];M7:\az 2|Y`/a0˓-T\eZ'9_~9eol:zZ=< E$kDe92Ҁ"򖚴%vhsFjh}?eΘ;~/t *RLb%h::w% u[f;y٬pPz[fG63lPH e!Oӿ@KR6bU]-%EH#^V}BsRE弶 Fݮ:37G5уodt'W➉iH7!=`$CȵҕVY<冉7ηQU'2UGXG ,ERDY}V3B~dizOɠۄ+Jh1m=vz\>`uHB(yeV> endstream endobj 780 0 obj 612 endobj 781 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 779 0 R >> endobj 782 0 obj << /Length 783 0 R /Filter /FlateDecode >> stream xUn0+VhX[6z`D@q eHGK }ImTdp`rC )$a CD@8­ _agmO[ |w`' {m[Lo*7 kS}@0DZƑc"Q Q(UYnjToޗht^F;ɯٲjjJh1.~P[YYc:jҎIcb=gh!p(ai{K1 2 <<dIi0uWBJ0& Hv\0w~" /F;^6A] D3D#R4rψˈ^/gS L -.b]JW B"?Rj[?*"9!/mH EE/DɬPU]裁V~i짽'}6@tjVN4,GYL>>Ѧ2:KqLL'鸠|EWe+WaUWĿ,l,Tdi+UΨlULC2>Ys4RC_h~Dk`lᮧG7}d^?B0 G7śYuo2 endstream endobj 783 0 obj 608 endobj 784 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 782 0 R >> endobj 785 0 obj << /Length 786 0 R /Filter /FlateDecode >> stream xUK0+D꺶֪J=-RՊ vG<£ISwa13i澱)$b8C@b墬r54uggQ6bF`nd I;!iKd2%zr\M"΄{XU%d/ksAe XJJ~4=.hNyJhŶǹS m?t?%s>.዇+jG endstream endobj 786 0 obj 613 endobj 787 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 785 0 R >> endobj 788 0 obj << /Length 789 0 R /Filter /FlateDecode >> stream xUn0+7Q[ D@Il $G;]i/M$Co}c$yaC\@ U3{Y¯~w>%h`z ?6E%>]k|kTL ȵIa% "v| כ"qYYԗ {\|N}͒M֔tLH U֮G4hQv;C&*==֮\\|;NX"P .m[q 4yHC" a f7` n> endobj 791 0 obj << /Length 792 0 R /Filter /FlateDecode >> stream xUn0+.IQ}+zsb$EX#H]^H)hp@; }xȄ"~  U3{X¯?BW`z@?7Ee|Vf2dJ(D$L /.fy.)pK[_>g}_,ٸGGB} ir֮F4UhQv;A&*KkW_.{NH &$i;o6ΣP XЂ5e ز>/+H`oJz)DLJ4(D]Ֆ:0'1cc"w:b*&E6]ӏ˷qX\-6Ef@ Mjgn8f\Bfi7 %`M6\QΫ s'CX,T^ED[!T|,9JbK馪W~c{n$*đV[}v}?~dΟAڇpdÕ8{ڼ endstream endobj 792 0 obj 571 endobj 793 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 791 0 R >> endobj 794 0 obj << /Length 795 0 R /Filter /FlateDecode >> stream xUn0+.IQ$}+zs"$ EX#H]^H)`p@$; }xȄ"~  U3{Y¯~w>%h~(nK|VVZ2%"W K@Eif7EⲲ/ |+`6%z4k,47nA &gjDS5e'ͼd2c%NJB$64yJ 8Ͻ0@ W[ʐPIY6/+@ߏ"Cq4(8M~Z:'10%UbqQtR*˷ qX|ܥ\-6yZ9AIYZMNjgiNE a7v1KOh :wŘ,Q%Iݦ*:@ToZb|ʺ+" CmW"RX9x*JQ:H6UEXB;koCP!ߢ;<İk#s>#3{GCgwVjm` endstream endobj 795 0 obj 564 endobj 796 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 794 0 R >> endobj 797 0 obj << /Length 798 0 R /Filter /FlateDecode >> stream xUKo0+۹+-m=U Hc!ögf7q@ݠ0 !UgB\{a;mXC% ^:\x͎↰̽O7 8|K+}BJaRXw 'p?ITd74,,-a>Wr;U)ӬjٰtvH4u֡F&"lY5LyX>e{YiHtFj߀/Ԧ@;CE: >vcpK (7TgSH0ϊ(RXe9,#ԮJ:-!)FYN#]g{M]w3p @]'ZLY~$eیTGNI%"t,0:sy/՜áUcnƷuoQ5XG ./8j {Wg8 (|;˺_/ʨ' 0MP*9ۋͲ34'}S3n_;$%|GmfGY~d.~ڹpdfpq_> endobj 800 0 obj << /Length 801 0 R /Filter /FlateDecode >> stream xUn0+psC#"ّhZȲ^H)<ͼy #MXȣ#0>Hi ɸpn@X /ꯏ[5[tG+xpqMzB]iCXEÝBHkd+DRb& $$-튅6EukrR up3ni##3=ZD5֐[oP~Vn}ź1hh䌓^bƣ@fO&_03M0 `gE(ǞH= 2눦 2}-6*:P3kbk5;*y-(b5I$ߧmЏjkJ(t,5Sj^{q![?"7F&ʗZ6lXpLrBT5oz)pɥ4Z9 =eL.J~(#U8ƅl ǍRl,ve_Yɰ%qd0DvIv6TNc !ORƮ7Ɛ endstream endobj 801 0 obj 537 endobj 802 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 800 0 R >> endobj 803 0 obj << /Length 804 0 R /Filter /FlateDecode >> stream xUMo0+ꝱ{ۯ(H{h*JITH D󑄄{"~ƓK@|: ,xi1+A>DBjv~3؍ ~y#`q A#NɉPV8t!*ZjD "88͒g[*?qϯ"Nj}uHYQФ_DQ QXTˠCDզf&6GxWu<RHRj2({.ixu4te&=%1Ly!Ùh}ʈitߢ0x1}72-;KhsFF|ήy"W+!E5\vYW{),d@vDsu/V4Ĩ!gpE&ʷ\XH"۶zNkd.(c Z$*)I$|O̐Q!21.KH+xڰ|SbW\oNJԾGAP-Lbv|XO!Q`ų❳?G endstream endobj 804 0 obj 538 endobj 805 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 803 0 R >> endobj 806 0 obj << /Length 807 0 R /Filter /FlateDecode >> stream xTKO0 WȜ}"BJk:LhG'c;$ Ќ+CRcpp)<Kg OVŮx-'%W#Y45_;9>Y bG05G6f)rZ6&KÐGQf/Qebe.8/$t6T ' IYSXزtsMg]RIU"lL~S=qBZ@{`+*78z'dz\P@v(JT|$B˅ZWִ\>h9ǰ?}> endobj 809 0 obj << /Length 810 0 R /Filter /FlateDecode >> stream xXKo8WHY>d=|bn P ZcRR!)D{{6 rIی"/#JJo-FQ!: 0lH@?DMLH'ЧY1#@7qf gG_7f-g%hu8H3cr>,DMY}BۦH,/hy?}y2 LiU|E)]#BoY,౗APgqoB)!HH+ƢfޔųT5dZ UYJ$eCYQhE%ڈZ2Uʊ.6Y`1LCGDaى윏"/A PFaQ:k`BaüVO^u0 uE]AC_Kʭ7MQAFr'tX I֚r/@^Mb BKXJUv+Z0p`9ϻ-*+ur3Cpֻbiw#4t9$uwQs/ܐALp>e[<$K\csC[4Gc,ۼQb41s(NKH89 RU؁l\zBMnUfѭPNɊ DU;mB;s3cD㘑<(YA!EncV:Ytm֏Xn쵬ޕQwˈL۩zsT7&v4m;otSj8a#jsm jnNRQk0dk7MjmFA^By`zqXU F|(kOJٝߥ* W*H0Z_-w 'Y?+*-u#3iנE5[ӞgY8u}r9zZ[{;d b= :1 tq3Ow*soeʝ"/C`<<!;eɂcw(D-ZʁZCVZֵRŎo-3m3kaH{rȺ 'YM\I+od\؜yJO_v =A뵒ϙ0?ޚU=cf nG)fQ&>6<9PPԃk<(*!Q.ء@M6y'VXy_uXY{ksԁz >5_<8M3}{l2ʧwFXgφ6/g > endobj 812 0 obj << /Length 813 0 R /Filter /FlateDecode >> stream xVKo0WH+oio"TU&N+׎@- |3S+s9) endstream endobj 813 0 obj 863 endobj 814 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 812 0 R >> endobj 815 0 obj << /Type /Action /S /GoTo /D [655 0 R /XYZ 72.0 720.0 null] >> endobj 816 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 230.67 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 815 0 R /H /I >> endobj 817 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 815 0 R /H /I >> endobj 818 0 obj << /Type /Action /S /GoTo /D [658 0 R /XYZ 72.0 720.0 null] >> endobj 819 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 277.32 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 820 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 821 0 obj << /Type /Action /S /GoTo /D [661 0 R /XYZ 72.0 720.0 null] >> endobj 822 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 228.99 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 824 0 obj << /Type /Action /S /GoTo /D [664 0 R /XYZ 72.0 720.0 null] >> endobj 825 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 216.78 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 824 0 R /H /I >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 824 0 R /H /I >> endobj 827 0 obj << /Type /Action /S /GoTo /D [667 0 R /XYZ 72.0 720.0 null] >> endobj 828 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 220.11 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 830 0 obj << /Type /Action /S /GoTo /D [670 0 R /XYZ 72.0 720.0 null] >> endobj 831 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 222.33 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 832 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 833 0 obj << /Type /Action /S /GoTo /D [673 0 R /XYZ 72.0 720.0 null] >> endobj 834 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 214.56 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 833 0 R /H /I >> endobj 835 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 833 0 R /H /I >> endobj 836 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 72.0 720.0 null] >> endobj 837 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 216.78 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 838 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 839 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 72.0 720.0 null] >> endobj 840 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 193.45 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 839 0 R /H /I >> endobj 841 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 839 0 R /H /I >> endobj 842 0 obj << /Type /Action /S /GoTo /D [682 0 R /XYZ 72.0 720.0 null] >> endobj 843 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 215.66 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 842 0 R /H /I >> endobj 844 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 842 0 R /H /I >> endobj 845 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 72.0 720.0 null] >> endobj 846 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 215.66 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 847 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 848 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 72.0 720.0 null] >> endobj 849 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 222.88 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 850 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 851 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 72.0 720.0 null] >> endobj 852 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 205.66 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 851 0 R /H /I >> endobj 853 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 851 0 R /H /I >> endobj 854 0 obj << /Type /Action /S /GoTo /D [694 0 R /XYZ 72.0 720.0 null] >> endobj 855 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 226.2 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 856 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 857 0 obj << /Type /Action /S /GoTo /D [697 0 R /XYZ 72.0 720.0 null] >> endobj 858 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 213.99 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 859 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 860 0 obj << /Type /Action /S /GoTo /D [700 0 R /XYZ 72.0 720.0 null] >> endobj 861 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 195.67 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 862 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 863 0 obj << /Type /Action /S /GoTo /D [703 0 R /XYZ 72.0 720.0 null] >> endobj 864 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 216.22 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 866 0 obj << /Type /Action /S /GoTo /D [706 0 R /XYZ 72.0 720.0 null] >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 223.44 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 866 0 R /H /I >> endobj 868 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 866 0 R /H /I >> endobj 869 0 obj << /Type /Action /S /GoTo /D [709 0 R /XYZ 72.0 720.0 null] >> endobj 870 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 241.22 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 869 0 R /H /I >> endobj 871 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 869 0 R /H /I >> endobj 872 0 obj << /Type /Action /S /GoTo /D [712 0 R /XYZ 72.0 720.0 null] >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 227.33 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 872 0 R /H /I >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 872 0 R /H /I >> endobj 875 0 obj << /Type /Action /S /GoTo /D [715 0 R /XYZ 72.0 720.0 null] >> endobj 876 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 226.77 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 875 0 R /H /I >> endobj 877 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 875 0 R /H /I >> endobj 878 0 obj << /Type /Action /S /GoTo /D [718 0 R /XYZ 72.0 720.0 null] >> endobj 879 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 208.44 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 878 0 R /H /I >> endobj 880 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 878 0 R /H /I >> endobj 881 0 obj << /Type /Action /S /GoTo /D [721 0 R /XYZ 72.0 720.0 null] >> endobj 882 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 221.22 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 881 0 R /H /I >> endobj 883 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 881 0 R /H /I >> endobj 884 0 obj << /Type /Action /S /GoTo /D [724 0 R /XYZ 72.0 720.0 null] >> endobj 885 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 217.89 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 884 0 R /H /I >> endobj 886 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 884 0 R /H /I >> endobj 887 0 obj << /Type /Action /S /GoTo /D [727 0 R /XYZ 72.0 720.0 null] >> endobj 888 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 232.89 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 887 0 R /H /I >> endobj 889 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 887 0 R /H /I >> endobj 890 0 obj << /Type /Action /S /GoTo /D [730 0 R /XYZ 72.0 720.0 null] >> endobj 891 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 219.56 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 890 0 R /H /I >> endobj 892 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 890 0 R /H /I >> endobj 893 0 obj << /Type /Action /S /GoTo /D [733 0 R /XYZ 72.0 720.0 null] >> endobj 894 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 226.22 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 893 0 R /H /I >> endobj 895 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 893 0 R /H /I >> endobj 896 0 obj << /Type /Action /S /GoTo /D [736 0 R /XYZ 72.0 720.0 null] >> endobj 897 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 385.5 218.864 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 896 0 R /H /I >> endobj 898 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 385.5 539.998 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 896 0 R /H /I >> endobj 899 0 obj << /Type /Action /S /GoTo /D [739 0 R /XYZ 72.0 720.0 null] >> endobj 900 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 196.22 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 899 0 R /H /I >> endobj 901 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 899 0 R /H /I >> endobj 902 0 obj << /Type /Action /S /GoTo /D [742 0 R /XYZ 72.0 720.0 null] >> endobj 903 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 240.66 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 902 0 R /H /I >> endobj 904 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 902 0 R /H /I >> endobj 905 0 obj << /Type /Action /S /GoTo /D [745 0 R /XYZ 72.0 720.0 null] >> endobj 906 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 237.88 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 905 0 R /H /I >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 905 0 R /H /I >> endobj 908 0 obj << /Type /Action /S /GoTo /D [748 0 R /XYZ 72.0 720.0 null] >> endobj 909 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 232.88 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 908 0 R /H /I >> endobj 910 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 908 0 R /H /I >> endobj 911 0 obj << /Type /Action /S /GoTo /D [751 0 R /XYZ 72.0 720.0 null] >> endobj 912 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 237.88 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 911 0 R /H /I >> endobj 913 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 911 0 R /H /I >> endobj 914 0 obj << /Type /Action /S /GoTo /D [754 0 R /XYZ 72.0 720.0 null] >> endobj 915 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 252.32 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 914 0 R /H /I >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 313.5 539.998 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 914 0 R /H /I >> endobj 917 0 obj << /Type /Action /S /GoTo /D [757 0 R /XYZ 72.0 720.0 null] >> endobj 918 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 225.1 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 917 0 R /H /I >> endobj 919 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 917 0 R /H /I >> endobj 920 0 obj << /Type /Action /S /GoTo /D [760 0 R /XYZ 72.0 720.0 null] >> endobj 921 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 252.33 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 920 0 R /H /I >> endobj 922 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 920 0 R /H /I >> endobj 923 0 obj << /Type /Action /S /GoTo /D [763 0 R /XYZ 72.0 720.0 null] >> endobj 924 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 249.55 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 925 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 926 0 obj << /Type /Action /S /GoTo /D [766 0 R /XYZ 72.0 720.0 null] >> endobj 927 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 244.55 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 926 0 R /H /I >> endobj 928 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 926 0 R /H /I >> endobj 929 0 obj << /Type /Action /S /GoTo /D [769 0 R /XYZ 72.0 720.0 null] >> endobj 930 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 249.55 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 929 0 R /H /I >> endobj 931 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 253.5 539.998 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 929 0 R /H /I >> endobj 932 0 obj << /Type /Action /S /GoTo /D [772 0 R /XYZ 72.0 720.0 null] >> endobj 933 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 206.22 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 935 0 obj << /Type /Action /S /GoTo /D [775 0 R /XYZ 72.0 720.0 null] >> endobj 936 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 236.78 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 935 0 R /H /I >> endobj 937 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 935 0 R /H /I >> endobj 938 0 obj << /Type /Action /S /GoTo /D [778 0 R /XYZ 72.0 720.0 null] >> endobj 939 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 245.66 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 938 0 R /H /I >> endobj 940 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 938 0 R /H /I >> endobj 941 0 obj << /Type /Action /S /GoTo /D [781 0 R /XYZ 72.0 720.0 null] >> endobj 942 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 242.88 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 941 0 R /H /I >> endobj 943 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 941 0 R /H /I >> endobj 944 0 obj << /Type /Action /S /GoTo /D [784 0 R /XYZ 72.0 720.0 null] >> endobj 945 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 237.88 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 944 0 R /H /I >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 944 0 R /H /I >> endobj 947 0 obj << /Type /Action /S /GoTo /D [787 0 R /XYZ 72.0 720.0 null] >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 242.88 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 947 0 R /H /I >> endobj 949 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 947 0 R /H /I >> endobj 950 0 obj << /Type /Action /S /GoTo /D [790 0 R /XYZ 72.0 720.0 null] >> endobj 951 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 262.32 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 952 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 953 0 obj << /Type /Action /S /GoTo /D [793 0 R /XYZ 72.0 720.0 null] >> endobj 954 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 259.54 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 953 0 R /H /I >> endobj 955 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 953 0 R /H /I >> endobj 956 0 obj << /Type /Action /S /GoTo /D [796 0 R /XYZ 72.0 720.0 null] >> endobj 957 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 254.54 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 956 0 R /H /I >> endobj 958 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 145.5 539.998 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 956 0 R /H /I >> endobj 959 0 obj << /Type /Action /S /GoTo /D [799 0 R /XYZ 72.0 720.0 null] >> endobj 960 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 259.54 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 959 0 R /H /I >> endobj 961 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 959 0 R /H /I >> endobj 962 0 obj << /Type /Action /S /GoTo /D [802 0 R /XYZ 72.0 720.0 null] >> endobj 963 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 245.66 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 962 0 R /H /I >> endobj 964 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 962 0 R /H /I >> endobj 965 0 obj << /Type /Action /S /GoTo /D [805 0 R /XYZ 72.0 720.0 null] >> endobj 966 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 245.11 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 965 0 R /H /I >> endobj 967 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 965 0 R /H /I >> endobj 968 0 obj << /Type /Action /S /GoTo /D [808 0 R /XYZ 72.0 720.0 null] >> endobj 969 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 97.5 220.089 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 968 0 R /H /I >> endobj 970 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 97.5 539.998 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 968 0 R /H /I >> endobj 971 0 obj << /Type /Action /S /GoTo /D [811 0 R /XYZ 72.0 720.0 null] >> endobj 972 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 205.11 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 971 0 R /H /I >> endobj 973 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 971 0 R /H /I >> endobj 974 0 obj << /Type /Action /S /GoTo /D [814 0 R /XYZ 72.0 720.0 null] >> endobj 975 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 217.33 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 974 0 R /H /I >> endobj 976 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 974 0 R /H /I >> endobj 977 0 obj << /Length 978 0 R /Filter /FlateDecode >> stream x]\ו{ ^v_Ys1r x$ֱ>SZ\\E\%r۔7*oqj 5_(?~/o_+F}k{|ã_~x|aw.{_/?~/WWy|/>)|P>rSLu"սWF92 2IuoI^IuQnaaaiiiiT6SM0aTNS:Mu2E{rRݫg^>TTIUJ>OOuX_U_\KI㥉|Pxi<,7aTNS]Luj=HZRBj-rRTTTTTTTT6SmMj7nTS:Mu2eTAqjTjRJQI5*F5000444fT6SM0aTNS:Mu2Eyjf!,TjVRJYM5L5L5L5M5MfK\dU?=9W\4纑7'9׍<-\7TNS:Mu2E9׍Ts9\7rR=Ϲ^+\7rS S S S SMSMSMSmLj7nTS:Lu4iT.S]zsIrR'I^HuF9$TTTTTTTT6SmMj7aTS:Mu2eT?i9('}X夺 >0rS S S S SMSMSMSmLj7nTS:Lu4iT.S]TabRljQN@1Iu)F~|l5/e<3O"ho._|?QoIoiG7TS:Lu4iT.S]ZRփTk!ZHRTk%ZIVS S S SMSMSMSmLj3nTS:Lu4iT.S]AqjRBQH5 F%ըTTTTTTTT6SmMj7aTS:Mu2eT )T.S]Hu('=.QN{\D9qLjޟ#y#_jy|R>i|:Mu2E{\D9qTrR"+qLj3nTS:Lu4iT.S]EQN{\D9qTrS S S S SMSMSKUz2.qoO?ziY/W+W6Ey7'+Mu4iT.S]HuߓH9{%/IT=WR$RnaaaiiiiT>l:jW6Ǖ ay|QYnT.R}夺IT='QJDM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]Lu'rR$J^HuߓH9{)'}O"z'z<?eyhPx=<,/7'Mu2eT('}Ty`>rRQnaaaiiiT6SmMj7aTNS:Mu2eTy`>LB<0Iu&y%}Lj3nTS:Lu4iT.S]Ty`>rRI^IuFҥ*5 oK0'y6F|R~Ai~#˻Kzj=HZ BjZ+Jjjjjjjj3fTvSMu0aTNSLu"8H5RTjRBQH5*F%ըLj3nTS:Lu4iT.S]AyjTjRJYI5~|5/5S7Wo~x>%7zA8,˻Y-o2eTOiwrRփTOs;9B;6Sm۸[(f|rS]Lu"8H5RTjRBQI5*F%GJyjjjjjj3fTvSMu0aTNSLu")\'P :Mu2E{وrRFRF^6^6TTTTTTTT6SmMj7aTS:Mu2eT夺('սlD9e#+e#M5L5L5L5L5M5Mu߳uJOEeZtsїi7fAyX-7aTNS:Mu2eTI|y!G7rR=|t#'G7rS S S SMSMSMSmLj3nTS:Lu4iT.S]z>FN烏^ >ࣗJ烏nLj3nTS:Lu4iT.S]z>FN烏nz>FN烏^+>jjj͖fKi%/u<}|eyejm_LIyZ>(?}#˻iT.S]HZRփTk!ZHRTk%ZM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LujAQH5 F!ըTjTS S S SMSMSMSmLj3nTS:Lu4iT.S]AyjRBYH5 f%լTTTTTTTbץ*u>E}|ēQrRe+֓_gK|PT<,/7Mu4iT.S]('սM%y!սME9m*IuoSQnaaaiiiT>.UzNfoERfqByZ>(\P4eTm*IuoSI^HuoSQN{JJ{rS S S SMSMSMSMSmLj7nTS:Lu4iT.RTަT6夺$(7000044=T'OoLN#sHF(?tnIis#O姑΍T.R=tnz鼜R=tnzI<ҹjjjjjjj3f΍|Q~țHFO#yXnT.S]zIMu4iT.RփTAj-Z BjZ6SmLj7nTS:Mu4eTAqjF!(TjTRjaaaaiiiT6SMj7aTNS:Mu2eT &ֻ>:9,˻ϸ7'q'OMu2eTA zj-Z BjZ+jaaaiiiT6SmMj7aTNS:Mu2eT 8H5RBQH5 F!ըTjjjjjjjj3fTvS:Lu0aTNS]LujAyjRBYH5+f%լEDO(HrRII^Hu$E9$TTTTTTTT6SmMj7aTS:Mu2eTAR>HrRIQN )+(70000444fTvSM0aTNSLu2E )Iu$%y!}夺TARjjjjjꞢ\L_(;||C9縎Ei|Jw{EUf9 夺.RCIu]$.jjjjjjjj3fTvS:Lu0aTNS]LuPN{B9 夺.WRCM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LujAYH5 f!լTjVS S S SMSMSCKU?ϟ:so7E7y|R~MFO Mu"zj=HZ BjZ+Jjjjjjjj3fTvSMu0aTNSLu"8H5RTjRBQH5*F%ըLj3nTS:Lu4iT.S]AyjTjRJYI5Υ*1Lt֧=h.qA]<,/OorR=IFr^HFs#'y%͍TTTTTTTT6SmMj7aTS:Mu2eTk47rR=IFs#'y%͍TTTTTTTT6SmMj7nTS:Mu2eThnz^y9/z^yFN5˥*1C}.߼_?ۛw_4"4#=ϳiu!oO4|P^IuO#('=T4B0004444fTvSMu0aTNSLu"=T4rRIuO#$jjjjjjjj3fTvSMu0aTNS]Lu"=T4BB{A9f%=T4B00044Տ?ꚗXO߽l<'OpoK^nTOG:Rσꠚ,'Y.\dr=&I-{Du= ,,,,,,,,Y6ldɲe'A,Yd9r"EK,HjS rπ=HMAAAAIII,Y6dɲe'A,YNd9r"EK,Gj3X b;RHMAAAII-T%'Ӝrݻoy'4wL1֝A8,˻Y-o2eTrRݳ Iu.('=]PnaaaaiiiT6SMj7aTNS:Mu2eTrRݳ 夺g]Pnaaaiic.yd>Viqa/.rY,O<,/PNCd$/?DrR"C9TTTTTTT6SmTZ,byZ>(aNS]LuIuTPNCd$?DrS S S SMSMSMSMSmLj7nTS:Lu4iT.R̓T 3~i4aDX-_;n)yF ;nzx9zjjjjjjjj3f7/77|P~zz#˻ӛyT.S]zyFN9;^+;nLj3nTvS:Lu4iT.S]Hq#'vy!vǍT7rR=owM5L5L5L5M5MqK!X_ףOOuZ곇_OEfqDyZnTS:Mu4eT>JIZRTk!ZHVRTk50000444fTvSM0aTNSLu2EqjF!(TjTRJ^

yg3n|V˛U,OIuh('=TrR3+ Lj3nTvS:Lu4iT.S]Huh('=PN{FC9 Lj3fTvS:Lu4iT.S]Huh('=PN{F#y%=TTTTTTTRM;>=w?~滯~'#4]?yggY>)_|H#夺#R݃IuF('=|i ue9[Yn|V˛U,Oˇ{B9 夺*H^IuT(70000444fTvSM0aTNSLu2E{B9T@rRIuT(7000444fT6SM0aTNS:Mu2E{B9T@rR+ IUr>)ߟ/yZ>(HLj{>^eV(f|A<,Mu2eTrR 夺WRM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]Hu ('=0TrR+z:AVLOdrp̏.sU,OˇNnTIu y%}'LjE7'X2eT;('}'T 꾓rRw2PnaaaiiiT6SmMj7aTNS:Mu2eT (z^hy$rR 夺'$ꞐHLj{c[;y?,˻Q-oOg<-7eT.RIuOH$/'$ꞐPN{BB6SmLj7nTS:Mu4iT.RIuOH$/'$ꞐH^IuOH(7000444Տ'$׼^?=<#_W{?f}w_~__}ݷ~\Ky\s;zp<.S(?.S(˻e I4iT.S]HuD9[$/o}TOrS S S SMSMSMSmLmxݫV(f|A<,Mu2eTOIB'Iu$y%}Lj3nTS:Lu4iT.S]o}TOrRݷ>I^IuD~|h5/m|?o?@?\|?VnIiEFayXnTS:Mu4eT.Rݳ7Iu$/goꞽQN{F6SmzZ/O+7f"p#OyXnT.S]AqjRBQH5 F%ըTTTTTTTT6SmMj7aTS:Mu2eTrRݳ7Iu('={ꞽQnaaaaii-T'#9WOnHxg+A>Tvw;yv,7iT.S]Lu\QN =TJJ{rE9ɕaaaiiiTj}P6n^-oOG<-T.S]HuO('=\QN{r%y%=TTTTTTTT6SmMj7aTS:Mu2eTrRݓ+IuO('=\Qnaaaaiiٻև??~_|~~3ǫ?|?C{UW_`{z>$75x^ endstream endobj 978 0 obj 14701 endobj 979 0 obj [ 816 0 R 817 0 R 819 0 R 820 0 R 822 0 R 823 0 R 825 0 R 826 0 R 828 0 R 829 0 R 831 0 R 832 0 R 834 0 R 835 0 R 837 0 R 838 0 R 840 0 R 841 0 R 843 0 R 844 0 R 846 0 R 847 0 R 849 0 R 850 0 R 852 0 R 853 0 R 855 0 R 856 0 R 858 0 R 859 0 R 861 0 R 862 0 R 864 0 R 865 0 R 867 0 R 868 0 R 870 0 R 871 0 R 873 0 R 874 0 R 876 0 R 877 0 R 879 0 R 880 0 R 882 0 R 883 0 R 885 0 R 886 0 R 888 0 R 889 0 R 891 0 R 892 0 R 894 0 R 895 0 R 897 0 R 898 0 R 900 0 R 901 0 R 903 0 R 904 0 R 906 0 R 907 0 R 909 0 R 910 0 R 912 0 R 913 0 R 915 0 R 916 0 R 918 0 R 919 0 R 921 0 R 922 0 R 924 0 R 925 0 R 927 0 R 928 0 R 930 0 R 931 0 R 933 0 R 934 0 R 936 0 R 937 0 R 939 0 R 940 0 R 942 0 R 943 0 R 945 0 R 946 0 R 948 0 R 949 0 R 951 0 R 952 0 R 954 0 R 955 0 R 957 0 R 958 0 R 960 0 R 961 0 R 963 0 R 964 0 R 966 0 R 967 0 R 969 0 R 970 0 R 972 0 R 973 0 R 975 0 R 976 0 R ] endobj 980 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 979 0 R /Contents 977 0 R >> endobj 981 0 obj << /Length 982 0 R /Filter /FlateDecode >> stream xTn0w9#5 ήoJPu2WQ4<&afF8>G}w;b!@} , (ُqU7ʢkp &ⅷ:(Tm[cE6rp+%9I8Sbp2EnvuW}D9eoU__7 VsKā!\eS"QIss-M > endobj 984 0 obj << /Length 985 0 R /Filter /FlateDecode >> stream xTMO0WǎpkJ["q`Q."QX6©G."94 ܉8̆!q >}Iw KP'vM yJr~g2ąI-wkdJ)/^]˪nvF4sT,) 3&Qdyr\.B&WuEZ> endobj 987 0 obj << /Length 988 0 R /Filter /FlateDecode >> stream x͔=o0w!ΝجJݢPu2D$>JU 4Jg=_ԌXڠBq(^0G$ ipc0\ݑ5G8.Rxc%Cxf۝%|ܘa3!xSڦ<7sG:;s˕>b'ϵaBt .B !'H4sؗ8vefU z1E%ΪLNZcH^,S6$e%]-9Ekwp_hUʦrg8(3_•ߪ?D endstream endobj 988 0 obj 305 endobj 989 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 987 0 R >> endobj 990 0 obj << /Length 991 0 R /Filter /FlateDecode >> stream xV;s0*Š$w8dR.0'LxYq:;&1ܜ]iAl$>g|].O01!sG^68b0̨O hc(,G#؋;:-҅@$#]GQds/M۩RMhJ"p讈Ŷ %Nzw, ~B7mrעsF a8H1n 049IcL} 1P,;o N;Bã. oo6KSD<:u 3?$.%{BZ  {)!auW -p\PF\ŠR*'Յ2u4WB.T:J7 س dh u(eݵqfN2]3]ԋZf?p3e]:FY59do\T`#Wlt${Τ!Wq+1'{Xż1M%8>'fܿY endstream endobj 991 0 obj 725 endobj 992 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 990 0 R >> endobj 993 0 obj << /Length 994 0 R /Filter /FlateDecode >> stream xT=o0+nlٱU[RHC DJbpBv>ڎʝ|wg?db |So1PjhYիm;@9x'Ax"Fw@.NUiM:uF_e]kOφ%kaM"r8 aB3=M«ȥ:BoKQh*8@ʂ@!6i c>e0Zy\VaMeZTVM/ŲUW=Q"+;D|T eI6g|x-~>keÓ${кQ+HdQiQz%Lb њ6Ѱ \Q4<=Űmau rվ aH;G.A Y5K endstream endobj 994 0 obj 398 endobj 995 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 993 0 R >> endobj 996 0 obj << /Length 997 0 R /Filter /FlateDecode >> stream xU]o0}WFZ=|>IjmU1)vF=(>pxb YtFN!F@DC [/0fǦ=q?ZF?{xR!={\x-F7!`HVGjQl.G>E!)Vus$JfO|>%'Jm~mV7Tjų8kAnj#55dGoe5?~GjWe<].gU?WRXvPD1ѕ\8Γ3)ec|jTyFLa]4Slj-Aհ/T^v{ ("} 5Ȉ-QE-fz+ ٻ8(rאI@֜=(D;YJQ)d"0FiQ~&˧"ptIh-`mSU?7U[H.+Q07%> endobj 999 0 obj << /Length 1000 0 R /Filter /FlateDecode >> stream xVMo8WfHY~3]6m,@u6m (UPDIqA4yJQDܢ]}0"x8h"clHČcw 8>~tx=|ΈߊAGϵU(A냓1#Bcs1̋EYKoדJ9eY-vʶoEmiD-8(#8C#Їwi./Zwu1fB f$5Gi6EɅB{$&=:_B-ng1TOgDahdl(tMΨ@I(Nf\fYDŽ(O(nR9C)HpV6n"L΅[Y`kA@΄?PcLy'6_Uii䩮baQB~yITF+A0EK̾ze%kPht >T8ض,rp6%̟mV?14+zLl??IDyzr@Y~{m^\8osy 97Ǚ,o˛ňG5!|F#4J 8JyL]!SHĚ7.ͬ-x}17nnG=Mg3⩣)QܓN>Yu@3rLTwm!e~hT! pN5Qn+p#O.R%+v-2ߧY(6p$*ӲǁͲ,>S Pݹ Exw/7PJC;7^B֓ƀ#D튘ɕ}id>ys%.|dBL,t<90U5O endstream endobj 1000 0 obj 873 endobj 1001 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 999 0 R >> endobj 1002 0 obj << /Length 1003 0 R /Filter /FlateDecode >> stream xT]K0}ϯ`Iڤٛ °3 m_M?:|s&7rNN o0I[ 0C" .C/  5v[e =<Bx 9ޱV!jC^ 0"CBэKbxQkv:UBNu}uZ7>k 15fFDnHSVC%~TKtM$ԥO=ɇkɥPZ kW*1[fAse ȧ\ IcaP͓dTnR-uKʓ # +1ȵ֞Ӥ[eL@ͭ2j #bg y4;+feUDDhk Iv3דZBa{4_(zm vWgxGh90~~%*h^ endstream endobj 1003 0 obj 447 endobj 1004 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1002 0 R >> endobj 1005 0 obj << /Length 1006 0 R /Filter /FlateDecode >> stream xUn0+̒DH#zHCvh[G ;bKD2L3|f0|P|f.`>\!E퀀Q;XCᷕX~X>!vYQ8X_|wSH2?[bOߋfEUGVu'IU<~ (cDbMuA؍(2aVMn" C-И8pfS0y/P3i28s94sYCu(IB2tl# hl2!QF־Izü5U#B0*R{ #|WQ넘2,P:).%W9JI,ʮ:v2jWou龑- ɣ =0|qTwYx252WXqpFfHbKAQg=wb\a*[dn$e8.~:*(y7g> endobj 1008 0 obj << /Length 1009 0 R /Filter /FlateDecode >> stream xVn0+ViXZ(֢ P@!fPr;D2̙'pAԝ#}Ls`7؄x; @sq[ڼk t2><8u69_Um·y!&9]*R%!J|ͤ Q*L9)uzZW-YFOJ߇|qoujkDBUq^]э j98M2 xNsHY(d2hp,5`Ôk=Pb3_[@[zJnJf7==Ll(~mo?Í6JAY|S7K!uzelT+"{S•kJ{`;&e{Qc!í 2}'9- ~gO)=&}ڎtjj '{T޸EǤ(;H )JqsNuA(;xsCl<}b;( W~+0tf[9 endstream endobj 1009 0 obj 726 endobj 1010 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1008 0 R >> endobj 1011 0 obj << /Length 1012 0 R /Filter /FlateDecode >> stream xVn0 }Wm j,[V6 ENeeIqEDPN"y1Xv(,$ gM^PuΏfM lb*FB)zp1@Ҁ o4NA?$Q7Bu17ƪ9DpFi`B't5YJuZαj=RkW\lz|֘57{XN^ӯ}/a)lhSMjso׋] 7bI^A BMN`$xrvo.Pn ΩfΫFycF֬wNM~Fۍuai|XzL2X =A u c>qw^1"0J&Wf^]+ endstream endobj 1012 0 obj 716 endobj 1013 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1011 0 R >> endobj 1014 0 obj << /Length 1015 0 R /Filter /FlateDecode >> stream x͖[o0mzm.ҤI늴!HRCz٧1$D&Q9 s{a.\PXf}#)EB$@4nE;_`c_cw.o?GϦsWzÐxbxݣ |8T8EYzzwK|0O)Gx.gGךڧrBYelVby(KgoE=ə`st$ȏt 1sSZdPmJ\$dΗ-2͓j>u5I Lj1fp[9/*\A!$x$ ")CmgڷJB~0 nmzwٝT͝k,vNJ\Ħ0BkX /[R5zkuGq$}h5zm-xk9j^ҔFhE>U/{>skp{}fN3pB0''^`] endstream endobj 1015 0 obj 707 endobj 1016 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1014 0 R >> endobj 1017 0 obj << /Length 1018 0 R /Filter /FlateDecode >> stream xVn0+hXH1}zH#8qXCy}}[ݢ&aqǚԽǀ^Lc 9bP X `/;66 ~yGwy *]CG7U)>| Qo;iA8/) ">W!NNs b[rvwKt`꫃JעeTE+y A g> [9$-H{ ɦI1A#@ kH!1㴚+ `XƷ3.!EV/|[$-UBDH)3Hpɳd>udĈɪZ BP~4]mۘv„"" =Mz@#wkB9Ed/ Wa%PUϺXdku̍sptINa'?u3Y%Bmxj3qe&B{k.D+[hwyMY>q@#alh&[*{WK"{SVmA!#q@#P#qa$H\Tĭtu@*@\κ('y:`ۣFz駤(e a@5ޡc8&s!CZ $<^0>T,i endstream endobj 1018 0 obj 725 endobj 1019 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1017 0 R >> endobj 1020 0 obj << /Length 1021 0 R /Filter /FlateDecode >> stream xVMo@+Kv`YnڴC("6Q 8,`CƎ;}3;o>: (~͠4y<6>]I]t[mt?fź^ݟv.NV .“cõ+rFa|w.0 ZNGypS>y0ڔq5)[zdM̋D`RVO 1;X۶QAɊ{JG;o`9[i5ve3F_x!Bl$TDǙ'Nƿ&Cm?|ͼ|R(XL/VU WM endstream endobj 1021 0 obj 795 endobj 1022 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1020 0 R >> endobj 1023 0 obj << /Length 1024 0 R /Filter /FlateDecode >> stream xVn0+VhXH1} 4 pd%%E,+nzib&wn^GnB F@P.D"!Ygvv+n9nGvr "-8;M< NF7Uu) >|`HziGJp6rm!YnJU!|Iv: }c[־+Pm] b$إ‚6\mtq|1:U~Q=4Lcb;9@$nΆPϱTC YP)bZ̡̞dlkU]m;#ιCxBoʬKH4Inpouw1<ók1z< \ (yY =ʪV) endstream endobj 1024 0 obj 711 endobj 1025 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1023 0 R >> endobj 1026 0 obj << /Length 1027 0 R /Filter /FlateDecode >> stream xTn0+ $%R-EP1`IDwI=?skB&1f} 8 =nF,Z .#_Gb b&qC@`e$]י{5Tr2{}n43- zmG7.b8|ΧtYYtYԍEL!Lp)@s%YL\< 4B9$Ym*9]m2-zeѥ# "vȔR݄^N#NpT%VXL^_$A/ޖeBTG& k#eGE84FSMypd1}l:kϖd&Wּ9/(Ɇz+)\dzs3Be\Ugs{;xR } Aoz?1v,\G';{췘 endstream endobj 1027 0 obj 530 endobj 1028 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1026 0 R >> endobj 1029 0 obj << /Length 1030 0 R /Filter /FlateDecode >> stream xUMs0+>P4L0!ۊa— JJ7Q6{b* -Y7p{ߠw~cz~e5x|!?\O|f@Cņ>(B|VH]JBD8bxnL{K<ȔS2uu]0(lX>p`Hخʂjanod}񦜳5NEE:LS15&)g[.5%$f4Y*#@HMR.sXۣO;XdeDJQ^ᵬ&kz>DHk"O1%G'] ?f3֩Hhltܔ68m#9<δ¯Ƭ S1H=.Yt','{5Q&=K *;|y˜]N?B5ک5ckFþc2\r&C}Qt;c߼^um_0(I48wv| endstream endobj 1030 0 obj 553 endobj 1031 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1029 0 R >> endobj 1032 0 obj << /Length 1033 0 R /Filter /FlateDecode >> stream xUMo0+{`WVhЭ*8 jV;4q[b7y4F (WvQü 9 ,&a +U E>\ GQxgѷlnm, QR"/?MY7{MkE?J㟬ҙRS5}(SwpBP?`ʦߒ.c-cƦs™a c\#o2\,CUpS4+Zhvg,paK +]Q"+~_՛hUԬcU'Jȸ 1 OQm`baB+"Xk]](.4Э zXW޾nT> endobj 1035 0 obj << /Length 1036 0 R /Filter /FlateDecode >> stream xVMo0+`cJ+! =4UD w!& oOB̛#}g.(roXx"AG4f0wصϟ[oӳu<7Kgso6 ?7 !<@0IZ?D!F(9> endobj 1038 0 obj << /Length 1039 0 R /Filter /FlateDecode >> stream xVn0+ԃbz0"$ZKL}D95 SXsváW{J\0Xx8DzWD>3!b˩ߜGf!s;_nUZ?t!r=& .,qtR]>BVQV%{0p7jlOxSo4m$2uRՙY7zP\% 9NH }9S@hm^Q٢Vedfusщaj=PMWt*+x$DȢt[]<'ڪ7Aby]s7|!8:m&w;aT,ԡPp&T =TI;PL2t:o f_IZcNMjMe3tҰ2tdZ9̑fO29u`.{t|S5ZKf/1R&EQ,$f0ZEQAZʼnT=\ZydjFV> ~tТZ'?ש;>c5Jtc1ruͺǑ9F57KP.ξA| Vhe endstream endobj 1039 0 obj 632 endobj 1040 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1038 0 R >> endobj 1041 0 obj << /Length 1042 0 R /Filter /FlateDecode >> stream xVMo0+`v5=4$hGncS[b4@riy>0p=z7Tt^S3!j.) ?'.1ӧ3g6 B7 +n|QGi]pC@a/qը ? ƿJgd?I:N#AzN Qgu{/'sGIUo6e+4q.' JBL2"(e,8C@`}V^תQ鬁Zm_TӪY%`m$%kmdaWU5N($A> endobj 1044 0 obj << /Length 1045 0 R /Filter /FlateDecode >> stream xVMo0+`cJ+!*=$hG*~mS[b4FS`i!@_a3c>vB^Wy~x:^!yaXy76!_CD9xbTB\/Y餺|=>Y)#tKQoũ}x<(ÀbĵS ۋҴW,,2I7:Kz)愎1KzO.R L2HD~Z|͙q endstream endobj 1045 0 obj 639 endobj 1046 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1044 0 R >> endobj 1047 0 obj << /Length 1048 0 R /Filter /FlateDecode >> stream xU]o0}W?II]Q EHZbsǗǀ}c9ę=` !I`>3[uv7ԮX7Oԍ-D$/(|]">ךs{o>(xB pu֗S{) \ۋC7+Ѧ2_a/S;t׸lOxQ )#SN A(x62;3",V1@$3A)d@k#3Ϭ)f~q5E4sZAi;SfV96FQ"~Tk5/6UZ9>V֒-Sħl}њ1nDcWD !QvyӘ>G(VP'-McV6u9waA`pU)VJźh.CI'ޕמvlv,#rJvy\E^ d+8)CBh-uq^:̧QjbWCu ,Q-j endstream endobj 1048 0 obj 577 endobj 1049 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1047 0 R >> endobj 1050 0 obj << /Length 1051 0 R /Filter /FlateDecode >> stream xUn0+rIsl(Ѓ=96c öԦaّ,D2LyYA`60A!',f~Ff~f!?l /ѡ+'LbxOBػ|ǻAtjT3i)CVÇoj/vW}%R)]B>,01(FWv>$W, ۦ8I`ibۦnnWp)ζI,]:˲tpt"̞>'H1v8ytv4]1_StT\<߸! endstream endobj 1051 0 obj 530 endobj 1052 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1050 0 R >> endobj 1053 0 obj << /Length 1054 0 R /Filter /FlateDecode >> stream xUMs0W=DJBB9t3=x´$j+63|ِcMcg޾ݧ'W~Іú CC)@Iyb?+Ȼ_?a v7rЍ#x&!@%I"]`K>'M yrC9s=%%dΖkf 6 _(]UJytzRVu5n$5:6F8/)"T2ߕR4wL'wRSKckn6 αڝ=Lbܶe3D*k춰eI2-rAkT$|y¸[9(?҄P_ۥ֍nM4ϳr۷,m>I{2/)?Lg%s@ОƣcyxcWɓ endstream endobj 1054 0 obj 531 endobj 1055 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1053 0 R >> endobj 1056 0 obj << /Length 1057 0 R /Filter /FlateDecode >> stream xT]O0}ϯ4<%y4&MB"m#.?;n GDqt|ɽO`AH :b!f@8# wg8D,߸#ItgrsѩSxLr:?Tmɷ"zP̞8\"1*EӥM\Y>B+Qv`;)[PԚgԷh2 (F{:>TxPz}VUcF2*sL8E0 :D vK'!\TPJpFS,XT03 8ԕ.]e47>J%T1h {" , "zV#HȥhI $!w9rv)}Ü \J-Ӓ\iN`~ ,JϣFᬙ[CzfM!XJW$sDX2.hܐm)Sq٨y'Z_C57301ڮ}q)LV o|Rچ\5!>: oM9]3Ca7h5]9E^o'yzAƧ endstream endobj 1057 0 obj 564 endobj 1058 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1056 0 R >> endobj 1059 0 obj << /Length 1060 0 R /Filter /FlateDecode >> stream xU]o0}WVZ<am6i& ~!(6q}`{/ z1DB#Zc`7v+6~I?29hjܞx,'Wu>~ `W\ %DQ. qwW_MQOmc{L,ӥϻuCO"_<a@1ձKՇl극S^mziΉ1i\Cg`Fp:=1R9%9|3IU nA *Ivum}K#kLt !zTV&oTu&yőRFLsN ecgz3O)+%mYxcN4ynMװ(̴6^qG[}|g2N~s]1pjѬɼiZ?+ j>Tq~WL^Gց|ȑA;cxJ1Mr7֬b 3y X\^Hm{rsoL}=ŨXٽܓίl%u^{d{p&=>ص6paCC9m/>.`up}Uu?3 endstream endobj 1060 0 obj 651 endobj 1061 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1059 0 R >> endobj 1062 0 obj << /Length 1063 0 R /Filter /FlateDecode >> stream xUMo@+hKv?յ\G!25 Xfvͼy;fw)b#)0E,% pȇaŶZqT.\i${Exo1W3Y@0xa+i#mp(x1<&A{ xWRF'tVRV}Cŏyf+g =#> }A,ObA%ʃr'J>0)aLD5*N&G۵N,(]} d2(}P* V<u-L @Q?1m[ U>I"*j#k";u|rʐeߚLy򷻠I-&1]v@U֥ԑ^"ZF؄A X񛷜N'*LuP+Q b5$_\ir;52EG,4(iZ&9dGy8}8 MZSK;>U^2 [[H;P $)%G#骯$uJJrgCjW[ diohx^,uVvCȜ?P8/~5 endstream endobj 1063 0 obj 638 endobj 1064 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1062 0 R >> endobj 1065 0 obj << /Length 1066 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$$rW:L0!dd[+@WBئ=5%ݷ) =yc0:0D`gخȺ؏~A`?tip͈~U0IҲQl/AB*E!z^>@5d2u!'PW<7#:pP&05\TP}^.Wufjt7F%!d207_qrbl ]jP-ظi}JO#yؤMFz(zvWU6TP@2$E,eDcgt:a[,t>TSaM㸄 LJa*3Re"U[BﲘɑBzIʴhA6#7L:Wʢտ۩"F Ob.!z(WV]5fgIG,x*Ir#…)lɜuj> \ŒQntO> endobj 1068 0 obj << /Length 1069 0 R /Filter /FlateDecode >> stream xUMo0 WIlY=lXQc;Ejc \]QR&N6b#)!b@:q78amc 9鮉%)0Ax怢 ~O[1p&:Gh-ў2 Et>"B7 \}5 ۮ MgkȿDLcX瞟W<#qL =.hTOi9= ˶M7ӭ)o ۬DD@pYL)t^$%%Uɾ+M໾7B`hS҈]V=4y?8PJbx.tݳ5c*X#Akv;!U#oLk An]CUU 48WG.-- Dᒺ.u;xb^i{o]Jsܑ,v\}uo~S Ag&C!nj,/F$90?h+dI6JH|JYjVc ||]ak2]3,|Wd S"vF8LkImt=,;V^GtFIsxL={d () endstream endobj 1069 0 obj 664 endobj 1070 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1068 0 R >> endobj 1071 0 obj << /Length 1072 0 R /Filter /FlateDecode >> stream xTKO0 W$Vl}]Amifk5ݒTOwđMjk>gB; 9"B.=[aa',{ѝ8֧:vSr Ƣ}"NVM6nAE⫯kiDؓDŽ<,-(bqC BD H X=pI[m y|8qhY4j$0{-ܙY Ga;sWɭe+sSó<ĕ宧=k[)ť}[*y !\3E ]oKiHeyUOA%^{dZ[][..1l;_Ǧw> WBluhYu8D> endstream endobj 1072 0 obj 403 endobj 1073 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1071 0 R >> endobj 1074 0 obj << /Length 1075 0 R /Filter /FlateDecode >> stream xTMO0Wxg-*"J(&NiRVwnΓeƏzJ<U>DJJYC|a\Qv_q7&[S\0zx EnGRV<~@ ISDL 8MAVIh@VT9du7a5/vy۲Kŏ]3vhrZ4Z=[_au͖mܶm˦w%iDӼ8#HNs[6Д6o}aU<P(˂nua?+{7-L{4fj:("S 2{U'g#P<> endstream endobj 1075 0 obj 469 endobj 1076 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1074 0 R >> endobj 1077 0 obj << /Length 1078 0 R /Filter /FlateDecode >> stream xTKs0+ ÷vӛ'g2`)G:x` bX]ڽCf\[#5(s=F 9b /<}w^8XchWwl~8չ7}t[g5#8@ GLi=\ۋCUV HpWM0I%Β]_-Y[?iq#2Ku4yT'E\F6> endobj 1080 0 obj << /Length 1081 0 R /Filter /FlateDecode >> stream xTN0+3vbǽ- q@ D8IA;N@B 7 bo<'ANBgO=F`h3(6@T1 w  3Vc#^ \[FEtv+1 a)NS<BH^H&.F@"rQp}.꿐eb]-,mVa%QZ|As4(A<2"YST~6ۆkmgu>TwI l2$1}`?"@Yzhso*(lS pT8dQcr[꟯u1P?t6qΨԊ٪˛?WD:rf-s XM&O-_cE6rTIC~=b(2=Ű/(w}b_p6Pe2郷7+m endstream endobj 1081 0 obj 468 endobj 1082 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1080 0 R >> endobj 1083 0 obj << /Length 1084 0 R /Filter /FlateDecode >> stream xUn0+ EEZtChVMB-YRl7衉d'P1xA*{h0 B`>µmO{c]ݷi;mGw}:\xWō{{o?(ċ># (~\C$NOLCl.On!} _Ygjɪt8$lXA;qpJ$U_ |U"P"ؚYf:ͬٻ2ee->#9LP0Q9'"r"07˱Cxl@yr, X,]Sm3Nl$ C6Ʀ#!Q){(Renm@D(s(uRj 0AYn\1894h7.pdgڢVC\ILw7$[UU} M]F$8A?.ՕE*H 7n=`҅n'jsN.7rVmmv[3|F=pɠtG> CkbѦk&_Y:FI4hL{ ?d2\ endstream endobj 1084 0 obj 665 endobj 1085 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1083 0 R >> endobj 1086 0 obj << /Length 1087 0 R /Filter /FlateDecode >> stream xU[o0~WTZ=_9ov&uEZh$hڿ1@(&MZk>p<S;E,AA B`>Ίv>i;;Gw}=5<W>~ QH># (~1\!z'$Y I7FU'|>&{ _Ygu~uZ:swD(>AhDDbgUVT53wUqg2KG1p&(eXq/YH0> s77GC|橆R~ (JXf3*ܴ K#Q%'rbcѐ(2q S7Lj|.p}焘Oq\ns]FHJ$aKj:c&߶*X9LY"Q@&_:Ɗ8xA{U-8ED0I{Vm;TRjVӮj{w{uJaUKA##Ys b1x,/U= n9as1 qJm/efuÝtԹcέLo+ez.cyjG?"P`1>=ms!Ffzdz6rڑ5A{`~aV|6 endstream endobj 1087 0 obj 668 endobj 1088 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1086 0 R >> endobj 1089 0 obj << /Length 1090 0 R /Filter /FlateDecode >> stream xTKo0 WQ-Ym-ڢb%ȩG6i; KDR?Q|H8 WqPZ|< % % ǁ8FDZpkO-59Lp,W a+7sQڌB爘I(X*t|k(+J6PVo-^),iǯ۲+Ab]L+HuN2EeT 2Uj(tYlΙ1g7BCKyf16tačGiS&?_!RUo5o誏Q2 (d:o"غ] Os!¾m۵qadžk&LkEѦ'Ks(Wjhȋ4dyk7Εe#i~1a:QgWƛyj޺oM3::1-_ww)uGc#H1zhϺˑ9݄UtȊ˵> endobj 1092 0 obj << /Length 1093 0 R /Filter /FlateDecode >> stream xVKs0WfLnt`N-(Wp`hLҷo7< sCZM,hv(`n[{,L6+< ;fhuz}QQX{o~6`$!4 &>!Y w ^zqG]rP +gC kS"pVF-/MyY\^]#E9c8̧a' 1) x 7V;{7 L.oߔcMDQdcQu;)YDXʈĖ ܖzy\Lj@$cu9i X2jTQ%`5 $)aГ}sdSUyQο/g2&7+tN|oFy㜓3Jî\xGpIMU`dXiX<,m Gh1N`*(td@TrV٠}+107}> endobj 1095 0 obj << /Length 1096 0 R /Filter /FlateDecode >> stream xUo0~篸DZۦ0)+b)MH134M|;}w=HP:[C @1ĕ3nX [qWα~zŻ"p^c#^xˉ#|Cx#93BD_aRp9b]@mRί }FJ.Xڿz˺tVr\AA H*@4 0$dm]-%)t]B׶,v٦Q|y 4vz6EPQb 󉝕OkI|K48G&‘NaH>&@v,۝%8j& 0GtMEX4jȩt[M&YiOi72մyQsc6O]K QuUYÙ4,>Lu>_=UKF@lR nG[&JตuU୫ϱ8ؤHalRN*O: HI0wWSka"+[,SJ@ƾ y<(ni?1)d5FI6j}Q>6-~@I9ŰmS>iگgT(N<4H#;C endstream endobj 1096 0 obj 621 endobj 1097 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1095 0 R >> endobj 1098 0 obj << /Length 1099 0 R /Filter /FlateDecode >> stream xUQs0 ~W豽[=lm+w{h{=ָInR 'CЬOk!B?}净{eeVA G1𐉈ԭv)[]Ua',G_IcІ/|S$xGHjCδ1A3)$\$*gHd%o,ً_dS:~5s_AQH.AdHi"Uf1t[C*WyB2zA(hc,A~Z5vk96?څ<]]Js!4QG)dq{T)/6n:W3ǘ"gY+^xy]toL\F,Dʾ\ԙͫA@E5T5,=@\ZX~ۼf\/i}\m|+. G n$lv)Oܧɵ@>\eWTevbכżxd(GS$EOm|:dRѹQdwD'M֮fĹA;LGܑA8(oNHOd{͵o^QGV?h]9{p <]82wQx{eVy endstream endobj 1099 0 obj 644 endobj 1100 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1098 0 R >> endobj 1101 0 obj << /Length 1102 0 R /Filter /FlateDecode >> stream xVKo@W̍Dj} T@VCS`Eb~3;Nh(7od0>79{1P7v1& wmQ\95;v=mEۛ-|vR]p-ڹB_Tm6yF!突ڥJ|"6/nA!X\Ayfꔵt8~s5V98% e5$*tjH4WiX&YzqQ"C_)3A)>N1!W8 _DXqn8:Qv6Z&=IL~LC-T4%V/vYY-VId̛@L"{sLDRn"7>NˮliRkҪq :$j)$/g'Lm˸`8DrFްs.OqYi;LaQK.[ U#UYI:zHzeIr wU4HNOGu/Zqm0DZmR!¸( rLI m+&Y6M^20(y ~ emKoF,X2Q`׭Y#̈́h}_q,UϤ(Ig6}[O;yk#3yZ (;w;nߎ9CƕS^DG#?GsDCJ8'DU /Dvi endstream endobj 1102 0 obj 730 endobj 1103 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1101 0 R >> endobj 1104 0 obj << /Length 1105 0 R /Filter /FlateDecode >> stream xU[o0~WDZ=ۀmM{iڪbXc%PMDa@sf ̜cppb#lh `{F͉]}Цj![(G><:6\xᜏ /6 m{j=FȧzB\ gq@fde9>42š=S H󡂂qS £R6+,\-K}Ww,RM g. 9lΙ`Op)TeB&~'I ؤ?,]9n;r <ĐlN@°TiM QFaS^#vb=sAG TTeW3QzQj:[M|{Y@ee(KJI0$5xNe\Ni3Ne#%a@Ѡ|=i{p/+4n9a|w"+P 0{BLuo7DMϔ[*>Hp@VRp4&5Mà{=mfNc6?L'C9>( әSvt ?3I*3 endstream endobj 1105 0 obj 665 endobj 1106 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1104 0 R >> endobj 1107 0 obj << /Length 1108 0 R /Filter /FlateDecode >> stream xTKo0 W2'};nڦ톨ЕV+-0vbǁc;L mɾx,w1fS(N(@ Pݦl IA^rе8s\(,o.:_}d]kGχ%jaCrl}_8\xla9yLÝ (,4^seᮊtbsjR&g Ҭ)̸ELp߽]&;aY! WXޒEFX}Vu #}e2+ڃףaVTH;6QQԽi1l_NP̹5]5껬j`~WΪ? (= endstream endobj 1108 0 obj 375 endobj 1109 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1107 0 R >> endobj 1110 0 obj << /Length 1111 0 R /Filter /FlateDecode >> stream xTMs0W=D]B3y´4b˱''ćہ 0yh޾ᾈ6ˊ= M cH$)) poe7kfM@WOF+8ITnwS>|M@ 'j䊔1d\A^Ʈm!/o ξGJAoE_GN?c<# :KӺ[{yEYK($$:V$ENJ{EO 9fj`WP£kXS\J44M#%zʟ5n45/P`7:3&7}. XGˏCmڳ y~pFbZy0anώKfD ώJB9y<2 5gA endstream endobj 1111 0 obj 489 endobj 1112 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1110 0 R >> endobj 1113 0 obj << /Length 1114 0 R /Filter /FlateDecode >> stream xUMs0+J$c;mgz'L{3)Iñ1&$cv^ܤ[nr]B/ }`.Z~m:Y;H^8%mu(n*JRvAͽl:}D 3R&.>)<_r.[VYTWd$+P[j[@@CkG3!)B81doUV jy%#s]UfJ9^ .˯$o0=IDh6([bT\'2Ҥv=ou#mR)%S{P"&ٽk2즭 zb,uR/J4_4noP''rܒjhy9 :,V.$uzÃT5 ^T6hTЙ1/(uco0bO9r.Q8 ξYUwn| endstream endobj 1114 0 obj 591 endobj 1115 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1113 0 R >> endobj 1116 0 obj << /Length 1117 0 R /Filter /FlateDecode >> stream xUMo@+]ͱU[ZA!"7N}gpll[X4{vH.J q{>pɄGBY=k&N |wn(;O7D+ms|G^.BjB۟p 7ĬTFemwpGź\bkAb],;Hu9.d zTQP#;RV\]գ=,."9qR0]DN>ʥfЖ> endobj 1119 0 obj << /Length 1120 0 R /Filter /FlateDecode >> stream xVn0+!bn-@{j=AJ,ԖnReQm&a kwvv@ǀsb8$ﶋ1DxbA'R܇̇CW*]niS/އX +פl+I㟳C&GD­R*:]ʪֽ<$]UИp&(eXh١Y ؘ@ ! [H\|Y El,!} # ahQ򢬳򕏌"BuOf K9o6ݥvnKFr6i@bmAJiEġRV+-[ƟOҺ]hKPltSVYQea"-ПCѝuU녞5DUOhHlx蟤 l{谔 3|>R\j:cqLСI6ZfgEy ذy?4f۰9w;++νvtblQj1n#5}=æ4FIt0fr,YU endstream endobj 1120 0 obj 639 endobj 1121 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1119 0 R >> endobj 1122 0 obj << /Length 1123 0 R /Filter /FlateDecode >> stream xTMo0W̱= ƹSWA!ɢnDo~[@=损g| M 1$880g?8 .ن!|cW-?E%o*7[)g& Gk䊔1d\A~W.+[Z;%!hl\AwH ڕST@rn=?o=ojvUL:t8 (܂!.ЂKtۣbB&l!ҽ;[b Q?@P|>-723K#Oԛ"n-H5G|1RHL r(BNi ySOD리۞Sa# glN!5'R(iǶph]$ 'dQ-1Z:ydNSlt+E endstream endobj 1123 0 obj 473 endobj 1124 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1122 0 R >> endobj 1125 0 obj << /Length 1126 0 R /Filter /FlateDecode >> stream xTn0+.(mތ! %-)ܢ_>$'-#&a crvOϥ[&xEO=Ad 8., ^۱_5kt{g1Bx-&B]iCXEYK ![>[+$$!ed;p6~k5dߢ(Y%t~WLٲziݪ,QM`[7&/ۮYc}SN$F\ r׫BxõbSERGI&si[򲀕Zz 6*%I\S}5-ݴUpFKUuBi ƒs*8FH"~w"c\ZRV'(O(P-s~6ewDODG0C muS稧=K<4=kw1ŰfۉQ8t4d ٹƮ j endstream endobj 1126 0 obj 488 endobj 1127 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1125 0 R >> endobj 1128 0 obj << /Length 1129 0 R /Filter /FlateDecode >> stream xUKo@+ͱCVP{HFVYv aX^y浳.,}I*!{~wܦ. N:mB$`d:_-Ywncr m8AU3hQy).}&T#ITcqʑ+%4 BKYN+7,aY}e#LhaLC򢬳#<CQG ٥,Ugg;Ga*K_0-)OU4Gb 6fPY޸C3Rf+ۧA%KmFqybaBEm<qr2f7Nys'` n'˔GM!-ASʧO5q>:\PY1G LezߍR$V$4+g>h endstream endobj 1129 0 obj 557 endobj 1130 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1128 0 R >> endobj 1131 0 obj << /Length 1132 0 R /Filter /FlateDecode >> stream xTMo0 WQ,Y=ۊԠv!M@bq~?q\q`z|: xh0@." HY. %O0XV]kۇ@87௨õ+1%*7{q/#PݳFKC{ObɇAOWE:\H2~tՊ>X*Jj⿓UL*pgB鸭 ⭎Ae)nӲG20KO/kLr:CFT\ˑ V0o"'1\ZM\)zUZpM<źʖjFz{o)IŎ+^E7Fס~NNq;<+6A)AqE a'׍__%U/P>]ڃ=[Yޝ-2853aT>xaq0/cBw4)<:pص endstream endobj 1132 0 obj 469 endobj 1133 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1131 0 R >> endobj 1134 0 obj << /Length 1135 0 R /Filter /FlateDecode >> stream xTMs0W=D]B9ffS> endobj 1137 0 obj << /Length 1138 0 R /Filter /FlateDecode >> stream xTn0+.(XT#B{HBh[-9"_R/۲2La. @E=uM sH!)pp~q_ f;k a,gCSz[҆fcS!^U+RRqIܿ[nlzd_#_R+;פlZWp0G!׮N r[ "Η}YUowVUimk5#PIHDHІ\h_J"=&Ds8g5$&uU]*JvIE1r ;z΋} Tsё1!E-i֍\3#lC}O;dw/ y] 5> endobj 1140 0 obj << /Length 1141 0 R /Filter /FlateDecode >> stream xTn0+q1hClɱْmDHo>3H,,Ks B"2 4 ÎU{X_3KvsG^Yc#^(T!<}@wjŵ{q%}x$kr=_U8ٔi_G> endobj 1143 0 obj << /Type /Action /S /GoTo /D [983 0 R /XYZ 72.0 720.0 null] >> endobj 1144 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 222.33 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1143 0 R /H /I >> endobj 1145 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1143 0 R /H /I >> endobj 1146 0 obj << /Type /Action /S /GoTo /D [986 0 R /XYZ 72.0 720.0 null] >> endobj 1147 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 216.77 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1146 0 R /H /I >> endobj 1148 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1146 0 R /H /I >> endobj 1149 0 obj << /Type /Action /S /GoTo /D [989 0 R /XYZ 72.0 720.0 null] >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 685.5 234.934 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 685.5 539.998 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1152 0 obj << /Type /Action /S /GoTo /D [992 0 R /XYZ 72.0 720.0 null] >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 210.67 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1152 0 R /H /I >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1152 0 R /H /I >> endobj 1155 0 obj << /Type /Action /S /GoTo /D [995 0 R /XYZ 72.0 720.0 null] >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 661.5 195.665 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 661.5 539.998 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1158 0 obj << /Type /Action /S /GoTo /D [998 0 R /XYZ 72.0 720.0 null] >> endobj 1159 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 237.88 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1158 0 R /H /I >> endobj 1160 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1158 0 R /H /I >> endobj 1161 0 obj << /Type /Action /S /GoTo /D [1001 0 R /XYZ 72.0 720.0 null] >> endobj 1162 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 244.56 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1163 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1164 0 obj << /Type /Action /S /GoTo /D [1004 0 R /XYZ 72.0 720.0 null] >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 247.32 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1167 0 obj << /Type /Action /S /GoTo /D [1007 0 R /XYZ 72.0 720.0 null] >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 246.22 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1167 0 R /H /I >> endobj 1169 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1167 0 R /H /I >> endobj 1170 0 obj << /Type /Action /S /GoTo /D [1010 0 R /XYZ 72.0 720.0 null] >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 247.32 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1173 0 obj << /Type /Action /S /GoTo /D [1013 0 R /XYZ 72.0 720.0 null] >> endobj 1174 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 241.77 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1175 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1176 0 obj << /Type /Action /S /GoTo /D [1016 0 R /XYZ 72.0 720.0 null] >> endobj 1177 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 242.88 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1178 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1179 0 obj << /Type /Action /S /GoTo /D [1019 0 R /XYZ 72.0 720.0 null] >> endobj 1180 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 246.21 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1179 0 R /H /I >> endobj 1181 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1179 0 R /H /I >> endobj 1182 0 obj << /Type /Action /S /GoTo /D [1022 0 R /XYZ 72.0 720.0 null] >> endobj 1183 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 253.44 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1184 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1185 0 obj << /Type /Action /S /GoTo /D [1025 0 R /XYZ 72.0 720.0 null] >> endobj 1186 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 241.22 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1187 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1188 0 obj << /Type /Action /S /GoTo /D [1028 0 R /XYZ 72.0 720.0 null] >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 257.33 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1190 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1191 0 obj << /Type /Action /S /GoTo /D [1031 0 R /XYZ 72.0 720.0 null] >> endobj 1192 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 200.94 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1193 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1194 0 obj << /Type /Action /S /GoTo /D [1034 0 R /XYZ 72.0 720.0 null] >> endobj 1195 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 208.15 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1194 0 R /H /I >> endobj 1196 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1194 0 R /H /I >> endobj 1197 0 obj << /Type /Action /S /GoTo /D [1037 0 R /XYZ 72.0 720.0 null] >> endobj 1198 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 219.83 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1199 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1200 0 obj << /Type /Action /S /GoTo /D [1040 0 R /XYZ 72.0 720.0 null] >> endobj 1201 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 244.27 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1200 0 R /H /I >> endobj 1202 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1200 0 R /H /I >> endobj 1203 0 obj << /Type /Action /S /GoTo /D [1043 0 R /XYZ 72.0 720.0 null] >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 264.81 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1206 0 obj << /Type /Action /S /GoTo /D [1046 0 R /XYZ 72.0 720.0 null] >> endobj 1207 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 289.25 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1206 0 R /H /I >> endobj 1208 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1206 0 R /H /I >> endobj 1209 0 obj << /Type /Action /S /GoTo /D [1049 0 R /XYZ 72.0 720.0 null] >> endobj 1210 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 260.91 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1209 0 R /H /I >> endobj 1211 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 445.5 539.998 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1209 0 R /H /I >> endobj 1212 0 obj << /Type /Action /S /GoTo /D [1052 0 R /XYZ 72.0 720.0 null] >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 212.61 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1214 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1215 0 obj << /Type /Action /S /GoTo /D [1055 0 R /XYZ 72.0 720.0 null] >> endobj 1216 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 222.61 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1215 0 R /H /I >> endobj 1217 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1215 0 R /H /I >> endobj 1218 0 obj << /Type /Action /S /GoTo /D [1058 0 R /XYZ 72.0 720.0 null] >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 223.73 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1221 0 obj << /Type /Action /S /GoTo /D [1061 0 R /XYZ 72.0 720.0 null] >> endobj 1222 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 224.82 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1223 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1224 0 obj << /Type /Action /S /GoTo /D [1064 0 R /XYZ 72.0 720.0 null] >> endobj 1225 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 251.2 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1226 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1227 0 obj << /Type /Action /S /GoTo /D [1067 0 R /XYZ 72.0 720.0 null] >> endobj 1228 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 239.26 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1230 0 obj << /Type /Action /S /GoTo /D [1070 0 R /XYZ 72.0 720.0 null] >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 263.7 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1230 0 R /H /I >> endobj 1232 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1230 0 R /H /I >> endobj 1233 0 obj << /Type /Action /S /GoTo /D [1073 0 R /XYZ 72.0 720.0 null] >> endobj 1234 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 349.5 205.214 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1235 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 349.5 539.998 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1236 0 obj << /Type /Action /S /GoTo /D [1076 0 R /XYZ 72.0 720.0 null] >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 257.33 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1236 0 R /H /I >> endobj 1238 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1236 0 R /H /I >> endobj 1239 0 obj << /Type /Action /S /GoTo /D [1079 0 R /XYZ 72.0 720.0 null] >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 255.67 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1239 0 R /H /I >> endobj 1241 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1239 0 R /H /I >> endobj 1242 0 obj << /Type /Action /S /GoTo /D [1082 0 R /XYZ 72.0 720.0 null] >> endobj 1243 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 254.55 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1242 0 R /H /I >> endobj 1244 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1242 0 R /H /I >> endobj 1245 0 obj << /Type /Action /S /GoTo /D [1085 0 R /XYZ 72.0 720.0 null] >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 247.89 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1245 0 R /H /I >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 301.5 539.998 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1245 0 R /H /I >> endobj 1248 0 obj << /Type /Action /S /GoTo /D [1088 0 R /XYZ 72.0 720.0 null] >> endobj 1249 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 245.11 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1250 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1251 0 obj << /Type /Action /S /GoTo /D [1091 0 R /XYZ 72.0 720.0 null] >> endobj 1252 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 244.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1251 0 R /H /I >> endobj 1253 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1251 0 R /H /I >> endobj 1254 0 obj << /Type /Action /S /GoTo /D [1094 0 R /XYZ 72.0 720.0 null] >> endobj 1255 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 225.67 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1256 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1257 0 obj << /Type /Action /S /GoTo /D [1097 0 R /XYZ 72.0 720.0 null] >> endobj 1258 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 249.56 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1257 0 R /H /I >> endobj 1259 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1257 0 R /H /I >> endobj 1260 0 obj << /Type /Action /S /GoTo /D [1100 0 R /XYZ 72.0 720.0 null] >> endobj 1261 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 265.12 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1260 0 R /H /I >> endobj 1262 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1260 0 R /H /I >> endobj 1263 0 obj << /Type /Action /S /GoTo /D [1103 0 R /XYZ 72.0 720.0 null] >> endobj 1264 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 226.78 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1265 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1266 0 obj << /Type /Action /S /GoTo /D [1106 0 R /XYZ 72.0 720.0 null] >> endobj 1267 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 245.11 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1268 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1269 0 obj << /Type /Action /S /GoTo /D [1109 0 R /XYZ 72.0 720.0 null] >> endobj 1270 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 205.5 201.179 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1271 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 205.5 539.998 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1272 0 obj << /Type /Action /S /GoTo /D [1112 0 R /XYZ 72.0 720.0 null] >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 243.69 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1272 0 R /H /I >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1272 0 R /H /I >> endobj 1275 0 obj << /Type /Action /S /GoTo /D [1115 0 R /XYZ 72.0 720.0 null] >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 244.25 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1275 0 R /H /I >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1275 0 R /H /I >> endobj 1278 0 obj << /Type /Action /S /GoTo /D [1118 0 R /XYZ 72.0 720.0 null] >> endobj 1279 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 242.59 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1278 0 R /H /I >> endobj 1280 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1278 0 R /H /I >> endobj 1281 0 obj << /Type /Action /S /GoTo /D [1121 0 R /XYZ 72.0 720.0 null] >> endobj 1282 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 251.48 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1281 0 R /H /I >> endobj 1283 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1281 0 R /H /I >> endobj 1284 0 obj << /Type /Action /S /GoTo /D [1124 0 R /XYZ 72.0 720.0 null] >> endobj 1285 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 264.81 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1286 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1287 0 obj << /Type /Action /S /GoTo /D [1127 0 R /XYZ 72.0 720.0 null] >> endobj 1288 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 291.19 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1287 0 R /H /I >> endobj 1289 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1287 0 R /H /I >> endobj 1290 0 obj << /Type /Action /S /GoTo /D [1130 0 R /XYZ 72.0 720.0 null] >> endobj 1291 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 243.7 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1290 0 R /H /I >> endobj 1292 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1290 0 R /H /I >> endobj 1293 0 obj << /Type /Action /S /GoTo /D [1133 0 R /XYZ 72.0 720.0 null] >> endobj 1294 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 263.14 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1295 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1296 0 obj << /Type /Action /S /GoTo /D [1136 0 R /XYZ 72.0 720.0 null] >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 264.8 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1296 0 R /H /I >> endobj 1298 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1296 0 R /H /I >> endobj 1299 0 obj << /Type /Action /S /GoTo /D [1139 0 R /XYZ 72.0 720.0 null] >> endobj 1300 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 263.68 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1301 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1302 0 obj << /Type /Action /S /GoTo /D [1142 0 R /XYZ 72.0 720.0 null] >> endobj 1303 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 265.36 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1302 0 R /H /I >> endobj 1304 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1302 0 R /H /I >> endobj 1305 0 obj << /Length 1306 0 R /Filter /FlateDecode >> stream xM畘~TZϗ22h4l"&;ؒތk?dgK>ܵvժf6oԎ_K}Q/?_Yx˟?i_~}r~|~_O_oZ;Nj޷}/۷O?Oo~ꧧ>͇7^yo7ۛ؏]?J?ծ/~`˃^?~7%^DC_Uq=$.w.qJ "E!   CCCCSSSS,^K IWH,C<c@|)1q` ,"XD`*U6l"E`!C s@0ws<@0}^}?n3^}ooh}?p٨+CzP]Rꤚ,;Yvdr !s$XQԻXab9APb9BReeeeeeee!B崬m_NuRݤnAuzH d9r9)Z,Hj"r΋>rN& $$$B, YVdYɲe#F,;Yvd9r !s$XiԻXyb9'JR)IMAAAII%_f)}{U?<|ß߿}w}#m£ m:nR꠺R=d9rX9bz9bZ,C,Ej LLLL,dYȲLmgIumTՕ!u?.T AC,Ej#rX9b9b,,,,,,,, Y,dYɲe%J,Y6dɲ A,Xb9G,Pb9G,RH-s"5YYYY&Y&Y^WK{};2~|u3ڗ'/1F7ߝzMQTWPݥndȲe'N,;Yd9r9z9Z, C,Jj LLLL,dYȲ "c;IumTՕ!u?.T AC,Jjc+r99,,,,,,,, Y,dYɲe%J,Y6dɲ A,Xαb9VPb9VR[I-sl%5YYYY&Y&Y^ˬ?=_sU2h?Oo޾ϾyҗӫUqwgӫqzzA]R_s:nR_s:Te%J,Y6ldɲe'N,Y<[nnss,,,,,,,, Ys|/P9Iuz+C9PM,YtP5Z,9byC,9ddddddddYȲe!J,+YVldȲe'N,Yd9A-לnA-לjC,9zdddddzEߎ{^}݇޿|Q];ҳx4:nR꠺R=ՅjrGrG99,,,,,,,, Y,dYɲe%F,Y6dɲ AC,xDjrG99,,,,,,,, Y,dYɲe%J,Y6dɲ A,Xb9#Pb9#RH-s<"5YYYY&Y&YZ"ϟT9r7(/JcR_~xѥ>dIT7YRՕqȒZ,M,],],],C,C,C,,,,,,,, Y,dYȲe%J,Y6dɲe'A,X&elbX.ebX!qeeeeeeee!B,+YVdȲe#F,;Yvd9renbX&ebX.yebYYYYY&Y&YZ˽B /޾yWy!xR'MAuP]PBXXXXXXXYYYY&Y&Y&Y,dYȲe%J,Y6ldɲe'N,Yr#r#99,,,,,,,, Y,dYɲe%F,Y6dɲ AC,0Bjr#99,,,,,,,?kJϑ隊☿x2ӃZ>(?%.ՃT߃rRw|PNTTTTTTTS-ZMj5fT6SM0aTϿh9λA('y?: yOZLj1jTVSmLj7nTS:Hu-B9E$Iu1B9{F('yZA`Աz٨/e߽nlBv"Q*<,oXɋzs1JN7c,\% yjjjjjj1bTVSZMj3fTvS:Lu ՛K5VrRXc!IrTo.XRdc%70004444bTVSZMj3fTvS:Lu ՛k9VrRc%'՛9VrRc!?H暎TTTTTTT_qu$IuS$IuS('9NT8rS S S SMSMSMS-ZLu@|P^ˋ[7fyXnTS:)HPNs"AsBS-ZLj5jT6SmMj7aTq :)PNs"AsBFm(NQ>ݜ׸TϷNE+yZ$?_IHHIII8H8H8L5L5L5L5L5M5M5Mj1bTVSLj3nTS:LujlFj;AqjS-ZLj5jT6SmMj7nTR͍Ts#H5wR͝Ts'I5R̓T00004449E??mhi{qն?xQfyX^-5#˻ךrR֌HNךIZ3"9^kF S S SMSMSMSMS-ZLu{֕|<-o5#A\3"yTS^kF$'k;^kF$'k͈zePWayT Iunː[}0ۿ\&\oxs<{sO ]IꤺI}6ITWɲe#F,;Yvd9ryb9ozyӝb9oZ, wReeeeeee!B, YVdYɲe#F,;Yvd9ry_b9廙zyOb9糖y?ddddddddYȲe!J,+Y6ldȲe'N,Yb9oZ,MsReNj7A}]Nj O'i3W W{k[Ǘ; ޾F9ۋw',s%/ws%OTvS:Lu 0.Iu>KTø('0.RTTTTTTTTS=O./Wy/iy<<,ϓ ʋ:Lu /ZNa\|:%Aa\jjjjjjjj1bTVSZMj3fTvS:Lu 0.Iu>KTø('0.Iu>rS S S SMSMS.[0/:ݍ^{ˋ=|S>ZK7BkjZh-9^ !IZh-9^ %'kZL\h]Om_sN\h-yZ( %M0aT֒T֒T֒jjjjjjjj1bTVSLj3fTvS:LuZrRZKNBkIZh ABkM5L5L5L5L5M5Mu^sWm<[E޼}뿾yy|z+ܟwɯ+$Oj|^ 9^W<@ZLj1jT6SmLj7nTS^W] e`}Qu-\>j] EյpU&VebU&VerU&WerU&WeʪLY)2uUU*VeڪL[2}UʌU*3e2E˵pQr-\>\ EɵpU&VebU&VebU&WerUfU{<OKm|k!yzNay|P>!yS~ M5L5L5L5L5M5M5Mj1bTVSLj3nTS:Lu IzN;^ɐTdHNs2$7000444bTSZMj3fTvSMu0As2$'9z='CrRAs2$70004446z `n췹۷~tWޝϿ_ʋ[7f6SmMj7aT:cQNs8&As8FS-ZN,JnAցby:Lu0As8F9;:cQnaaaiiiTS-ZMj5fTvSM0aTprR1wR1Iu$?Hu(7000444y-]x0;߇}u&S'KAy=,/wnyZ(M0aTIu.|'չ@Z>(-TS:HuG9[('yK:o yKZLj1jTVSmLj7nTS:HuG9m:oTgA9[(7000444bTSZMj3fTvSMu0A8Iu'N8Iu'A8M5L5L5L5M5M5M8ƣ|)g)Ӌo>݃)>?(^N-O˛sAyX^-:bPNs!yjjjjjjj1b?3nAy;,/wnyZnTS:bHbPN= :jjjjjjj1bTVSZMj3fTvS:Lu 9ŠTCTrRS RS M5L5L5L5M5M5Mu^"sW=^ח]޼W|"5NA^-_X)yZ$?6R=6R=6R=6R=vR=vR=vR=R=R=S S S S SMSMSMS-ZLu]C~ϡay|P>.;s"yZnTSz ]$'kNErR.5tTTTTTTTS-ZLj5jT6SMj7aT^CI@5tT ^CM5L5L5L5M5M5Mґ||}gw/hPWsN\`(9^V7VI^,ύU:Lu0As@9Q;Q:GPnaaaiiiTS-ZMj5fTvSM0aT(rRwRIu$?Hu(7000444՛Q]7m^<Oǿ=?}sWndvm;9^n@0?|~2+yS>?<-oOf%Mj3fTvS:Lu0As0:K\ L9”\ LS-:?=K|~2+yS>?<-oOf%M0aTaIu.|'չ@rR %?Hu.TTTTTTTTS-ZMj5fT6SM0aTaIu.TaIu. չ@rS S S S SMSMSsmA~ B*~o߼ۏo^3 1=nyZ$WQWʋ:TU@S-ZoB^7j;}<-7aTRWQN7XwRWQN7VrRWQnaaaiiiTS-ZMj5fTvSM0aTU@ HTU@ HTU@jjjjjjU@wy`0pӇnP_yAۃ?J$? ʋ]QByZ(?P걓qqqjjjjjjjj1bTm۶GJ^wFy,˫~X^,7aTFjlNjAqjjjjjjjj1bTVSZMj3fTvS:Lu H57R͍Ts'I5wR̓T (?R^,m)O{[rS:Lu չRrR+%$IuTJ R+%(70004444bTVSZMj3fTvS:Lu չRrR+%('չRrR+%$?HuTTTTTTTfǗ'~yG}GݙSMNSI><,'y5;ΫA('y5:}.\:tұ/KǾ,tұKǾ.tұoKǾ/tұK~,tʱmǶrc[9W}+>cʱcDZtcұcK>}.\:eؗc_}]:uץcߖ}[:mطcߗ}_:}؏c?X9V}n+>cʱ}rX9y<},X:tcұϥcsw%׷ރSl+ܝAy=,/wnyZ(avS:Lu2˕ToY.;,\IfB~2˕TTTTTTTTS}r!r%OϗYay|P|J^,7aT,\IfJN7,WrRYfzr%70000444bTVSZMj3fTvS:Lu0A7,WrRYfzr%'՛e+9,\M5L5L5L5M5M<wX^kW1Wg m~Lx:Ws.^P7wR Iu/$?Hu/(70004444bTVSZMj3fTvS:Lu H56RTc#I5vRT 8H5S S S S SMSMSMS-ZLj5jT6SmLj7nTS:^H^PNsxA9zs]~[?brq 篰^~H>yMT/z7IK)IK7oҒAy5jT6SmMj7nTR;o('չFTIu չrS S S SMSMSMSMS-ZLu&&꠺R=@]&A,X-7Rq#X 7Ro!sddddddddYȲe!J,+YVldȲe'N,Yd9rZ,wk˹Fjk& $$kκ؎/a^t|_{}`|QWy4|>HZ>($X%I$9^$|'DL"RI$S-ZLj5jT6SmMj7aT΁z=HrRI$9^$ Djjjjjjjj1bTVSZMj3fTvS:Lu DL"wRI$9^$TgInaaaii7W)&$o3!y/ȣ8ʃ￟Ajba] Z8,2sQZ/4\H.%4LĪLLLY)2eUU*SWeڪL[i2}UU*3VeƪX^Ee-eZpQfrY Ee1\UXU\U\U*SVeʪL]2uUʴU*VeL_2cUfʌE(e1\QEe1\KPcQf.>Y WebU&VebU&VerU&WencٗݝƋrGEOGɋG&zB9έ'zB9έ':PnaaaaiiiTSZMj5fTvSMu0aTIun=|'չrR[O('չrS S S SMSMSMS-ZLj1jT6SmLj7nTS:PNs;έ'z"As z3OˏO`smmiuM1(I>ANsA9):S-ZN~+YPWX)iS:LubPNs!NsA9):jjjjjjj1bTVSZMj3fTvS:Lu 9ŠTCTrRS RS M5L5L5L5M5M5MfqgwS}7{ˋ~F-^~%;(O)˫󿿔y yjjjjjjj1bTVSLj3fTvS:Lu-'չrR;('չ@TM5L5L5L5L5M5M5Mj1bTVSLj3nTS:Luy@9Ν:wPNs:wPnaaaii%TY샓 Կ=8i]pN)gH7$˫bTVSZMj3fTvS:Lu yH9^THN ?HzBZLj1jTVSmLj7nTS:Hzvz==THN$'jjjjjGwgw/^}z(y(^_G ף ˫Q˻%9~~zG @N%Qjjjjjjjj1bh8YWXnTRIuNH('9!TDT焄rS S S S SMSMSMS-ZLj5jT6SmLj7nTS:'$꜐H꜐PNsBB9 z3!ˏmOH/~7ç|?TS-:?ʳZVay|P>?X)xI0aT;)'y;;)'y=:TTTTTTTS-ZLj5jT6SMj7aT;)'y;;)'y;)7000444c] vwR?oD88A=x@yjqrR|zZL[+_Q>?<,'Mu0A z}N' z}yjjjjjjj1bTVSZMj3fTvS:Lu ~ITO%'~I_rS S S SMSMS} }~ݵxxsw#v_Q?oO)˫NvrRKZLj1jTVSmLj7nTS:Hu~O9O%Iu~O9O)' ?ZLj1bTVSmLj7nTS:Hu~O9O%Iu~O9O%?Hu~OO w/3zp}u~lX/u?8ʋ]iy|x$I8L5L5L5L5M5M5Mj1]le)(/wwq]avS:LujlFj;NqjS-ZLj5jT6SmMj7aTFjnNjAyjjjjjj'wo/~O7Oo-'W>uKQί]~^Ϳ~/m>oޝ?ί~?/oO<ӷ?}Sy1gÍ/؏vB! endstream endobj 1306 0 obj 14669 endobj 1307 0 obj [ 1144 0 R 1145 0 R 1147 0 R 1148 0 R 1150 0 R 1151 0 R 1153 0 R 1154 0 R 1156 0 R 1157 0 R 1159 0 R 1160 0 R 1162 0 R 1163 0 R 1165 0 R 1166 0 R 1168 0 R 1169 0 R 1171 0 R 1172 0 R 1174 0 R 1175 0 R 1177 0 R 1178 0 R 1180 0 R 1181 0 R 1183 0 R 1184 0 R 1186 0 R 1187 0 R 1189 0 R 1190 0 R 1192 0 R 1193 0 R 1195 0 R 1196 0 R 1198 0 R 1199 0 R 1201 0 R 1202 0 R 1204 0 R 1205 0 R 1207 0 R 1208 0 R 1210 0 R 1211 0 R 1213 0 R 1214 0 R 1216 0 R 1217 0 R 1219 0 R 1220 0 R 1222 0 R 1223 0 R 1225 0 R 1226 0 R 1228 0 R 1229 0 R 1231 0 R 1232 0 R 1234 0 R 1235 0 R 1237 0 R 1238 0 R 1240 0 R 1241 0 R 1243 0 R 1244 0 R 1246 0 R 1247 0 R 1249 0 R 1250 0 R 1252 0 R 1253 0 R 1255 0 R 1256 0 R 1258 0 R 1259 0 R 1261 0 R 1262 0 R 1264 0 R 1265 0 R 1267 0 R 1268 0 R 1270 0 R 1271 0 R 1273 0 R 1274 0 R 1276 0 R 1277 0 R 1279 0 R 1280 0 R 1282 0 R 1283 0 R 1285 0 R 1286 0 R 1288 0 R 1289 0 R 1291 0 R 1292 0 R 1294 0 R 1295 0 R 1297 0 R 1298 0 R 1300 0 R 1301 0 R 1303 0 R 1304 0 R ] endobj 1308 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1307 0 R /Contents 1305 0 R >> endobj 1309 0 obj << /Length 1310 0 R /Filter /FlateDecode >> stream xTn0+." $z3,4زb(]XޚH)9 @obŖ+A>$Bsܰ[KcS>nm ^ {x$tIxY#lP~Vkƾ' 7iZjԐr%]$d[x4_{*GȾ׬5;S֑X^gw8 $rK:Z"Vj{bU曧e5SВK@D:1<5t8 ~闔vHSS\AMҮp)+:XƘmU]il꜑iCjv*TVMO)ev-7)ے?jRo ;F jW ݖOW0…>z^'ܪd݅Bkss%'>C15İaH\̫+f|> endobj 1312 0 obj << /Length 1313 0 R /Filter /FlateDecode >> stream xTMo0+H;[z[$N f@=%YV=ČKFKMv.[AS#ݒIun}Q@J b2}…wQ#Gb8LW:G9?٠<<;XUP endstream endobj 1313 0 obj 551 endobj 1314 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1312 0 R >> endobj 1315 0 obj << /Length 1316 0 R /Filter /FlateDecode >> stream xTMS0W+ɶ,h=5ØDON3EbV3Eoz_-HXlK Tp ?q\]p@wb]>cܲ!|gw. ap-z }ؗo>ZOqOzAȕ4#!beB-!ɮ*!?egU~d:W3; ]9 $rMmuhDT/6{EkIPşڡS6I.Btw@c _s0V8s)uLb vi "XHxQ&rvȐ=4 Mi4ˋh)ƣ> endobj 1318 0 obj << /Length 1319 0 R /Filter /FlateDecode >> stream xUn0+bACĂmIdر>4 Sxy3|>3Hϥ[0߰`$(Bs\]pDc]~ZCؾ,Kwv{Opoج#?6'v<㱵Zq-Vj}$t3_Ƌ:BE\^C} OUB~bg*eeI_+Nd*![nm5ZDTM_m_]m{>ZŻnPВK2 HקIi[tx *NSd@Nb8%")Z(jnM`/4RTb!Ɏ( .>䥬BaC&HiGOC1 dP.c,IľD)n:yF6q>kXCd1OKj iȷIMʗI!}nK;[eTNO8gi~|ySC3C81תa3]'f4"'fb|箺 endstream endobj 1319 0 obj 525 endobj 1320 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1318 0 R >> endobj 1321 0 obj << /Length 1322 0 R /Filter /FlateDecode >> stream xU]o0}W>=Lևh,( P B N 6D1~`\AH m ,:-0 uCa7636vwƮ <-Յ]; f!]i7IO_C Z\JI9ĈQi>-bQ$iY$?/bl3RPgv asPKTcz_ʪxR׵Z\ES>)aLr.NE Q4nR1>TfJZ@kjhaW²Y)XfU@m[3vX7&FQFge*'<IKѸystSn<&'\(:=Ǖs(.PY#9bvq^#F8nnL׍΂+aRPf /gnr ,TPeE5{Za #Xrф>!Ǟ3؜lXvbߤ@FJI||cW endstream endobj 1322 0 obj 556 endobj 1323 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1321 0 R >> endobj 1324 0 obj << /Length 1325 0 R /Filter /FlateDecode >> stream xTKO0 W N4 GCpAJukEnkIMSd;~fK9SK␮ɶHp 1 (vV'h5VqO{&R+dЅnoxO͏nEgkl{'iqe "yLN3"x gG5<\Fg;Po>ͳkiZsY/ endstream endobj 1325 0 obj 408 endobj 1326 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1324 0 R >> endobj 1327 0 obj << /Length 1328 0 R /Filter /FlateDecode >> stream xXV8}Wm`bd7. %te9xHү#vۘ>MKkKG[#amF+<,e:.2m8V(\?! 5RY[/\.їaaxc;h7R]+Gņjt>^9hS`oX$?6GkoSh {f-?`IdRI~=CPPt6\Y`|AU0fUAL cF )|ĸ?<&^h>'t ԥ`OXtK.no |l^`0LE-yrƧ<))Cpnj9χ`0 (#4[6p,nctB,_jFݨJfDHfef^%AzSZD [}|ly9L߆ EBCpU) 2axAL8+ Lհ\HGi7-*aLLDy`(/a|8.J0(t0l%oN|V&Z^pֻ_K.rv NSr5 XzUX4+*+:]Ӟ|:Zr&; (@THe|דt6<57I3+[{U!%H"2?\+86:22>{|vtN3i,m;w|ꕤn" 'W-O߂oY\^Նޏ??\_N.|_;4{bq[ዛXp;ŘӂU|Ǵa-BoMLj{Se AAԗ=]Z ~il:+۔"0aERz-ZOtڸ;gGig%6i;m ?G7!ł6ڌ˲v$Z7VN38T˚r52a/ES*~ӀKT}dH)[cۄO0 X ~hmQ/^JZcΆ.p&C~T:$1wxCpr3[ͨ::,ãBJ^&b˅i7vT?^ׇp'qL8C+dAf 5]ձeX\W7ݹ`^HjBgfV?|s endstream endobj 1328 0 obj 1327 endobj 1329 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1327 0 R >> endobj 1330 0 obj << /Length 1331 0 R /Filter /FlateDecode >> stream xX[w8~ϯۦPc˷^.B> endobj 1333 0 obj << /Length 1334 0 R /Filter /FlateDecode >> stream xX[w8~&4T{ߒf[>4=>26[,q~G0٧m hftyB^x;ye6 rcv-Xkas ,maClЗ `vH{h?CKzr5|!\'DH~o׳7,e@'h;%οbATH"X N(a+lvD̩b^JϢ*h̬ K,b;:A("t5Vlߵ<ݾ{BB0`Fy4~8{<5rZ~:g,aV`2Th07Frnh/y?v Z++ˤÑI$!$7$2־{"/ҨFoEAE> pv<6T`m3q# EQIut7iALRKqOBky?JOarZpv%dNC))_#*C3 juhQTmx~SŸ3} .nliJ36U(+BFxܓ.^([2ce_Sb斎鸳~e3T(hT=읨41>fOCVxb5Us4uaiQЧ;m ^;Iy*!lW' 1# Uϰj 2́tUEpCh@-Q,hX6x: T:s{UH`3˾Δ 9qJ`ɸ r9ãtJ&rLL[lv>{}9ĸE-F߼Xlj]o^z7SZ!>\tfh}uKuy"^CCRaŭp:{T$B杔F )Uz7}|:bee4K!.wSp3@& {޺K+zऩ٧m[ށݥfv[6{cϣ^)s3~\uy{rZK2-ؕ ztv~6t{ۈ;+znp.EQ=SB1s^_nr-[1IJj8>\khDXB~űɆ*z/Zry1,[js^/c;a&,x`<=X,akӛ7/";n\؏Iw}۷\bc=[+J6V JN.prO_ # `p}V?N~3x!'O~rT_ u endstream endobj 1334 0 obj 1488 endobj 1335 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1333 0 R >> endobj 1336 0 obj << /Length 1337 0 R /Filter /FlateDecode >> stream xX[w8~ϯ۶Pkl֖%xV/JC_b'>-̌3}0r .I6!K -7ֲvO-kbM&oG_4y@v#mV}bRd5^ cٲ6?'"1d!_M]f6g%<%\$ gnDpI3^5mRO3]dz~:t{ۈG+ hۢd"= 7F-v]MKpud \-ڷvV,SñmXBEGqEu,z猯6;löF ݠdpI3A?OUTp3Tl> endobj 1339 0 obj << /Length 1340 0 R /Filter /FlateDecode >> stream xX[w8~ϯ۶PcwXvYRhQl%18k _#ٲqyZhg.}3~f!~/ćbgB>Fw,\Y]Z/LT~Oءϳlf׳/_AEYmN)1L]-g_2rӥ64\5'@aP`ܣ/go6ѸJiHuʢKsZE˿fm fk/.%0 ǀ͕i~>CȘ)/ؚx0UY(or4w'@6ey--vuKwCJJ ѷ <ҌI@hh0Cd7 Dcrp(tA4) ıkKH J\-7 C$b==?UtW/'k\d,_~ 6Q'y.6-I hl!F`%k;-@XRNGlan3I{+N{*l?2҆qRMn 9V䱳DaJJ$lJ(N""PPmGInOccr1v(|,)_,ءH@P{ТtZ!'k*%+!BAdNZXCM;TJRlv!N~TSiJ4~)H6bUVaD+h(xkE4%[CSmMITrzpl[Qݞ|kli5mR=]2MS^.^`h=bfxyff{L]/q)-%Y8yuvq=l8˞HAX8~~(V/I E /"/^-"XU^k@b̕zDd7/VDVvчI<7, a\&ŷ`v;s:2fgSR]mY`${6D T?8EmM?77}-Z*bYIKՌ(M~dmyX~iaZCg%U|;Cw,a'7ѥ`4x %Q" UTVU~ ;xTZthQPN/qf,aT==VZwFSFPmF6q{.wi󆰽N}5 6,k\s|hH-ӡh $##y<ǟyjkN+6215͇t> endobj 1342 0 obj << /Length 1343 0 R /Filter /FlateDecode >> stream xUMs0+HC(v1%uʹ4`Ki0؀;}jb|8+w{RmsR$?A.tov7VW:W& %*p ]/*γu9 sqj}lJVua80ɉx9c@AxqC+\po5i˴G7; J<3މ:tf".ZpH:(֗~M:o͘mPo3J2Q@_s|GJUt24Z?0C+wk nmLvhhEUyYS,#~B"TDHQ[c #" bؽ8Ѽ߳8-dk8=r]v[)߄$z,h?2+.9I:tdT6f]6s?މzbNP%Q˹{4}eWͽ. endstream endobj 1343 0 obj 604 endobj 1344 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1342 0 R >> endobj 1345 0 obj << /Length 1346 0 R /Filter /FlateDecode >> stream xVr0w,H!Ȯ>&]4Ii#[rLq&ƃA>ν U>|ml+`:`6%h",VK֓%4"W Q Fi&N ]F_l`E#Gl˦s%& wp?_j u2R0 &ߌQ&,I_$Av7(V&pJvY[/\*P1i3}siT*5Mvӌ6X\8̤abo.n.J"Js%1BgU\dUsٹV'> endobj 1348 0 obj << /Length 1349 0 R /Filter /FlateDecode >> stream xVKs0+H!ȭ>&=4Mʹ4-%`N'>+sjb<>ǷÀqbrXM1\b.Y]=P#vwim/ී::W׈jsjs-q\*6 9"Qn Oqyh?\_lyg619T"ɖpօ)!|rwg_VU.NjN.[%!*6:lah"&y+lMQr]5R/\J&zptj;zDnbeGefi0s_E%e8RUIK([sg3P[i=ykH[זXU+wܲ60{Lu-5(> ef8+G>_*AvKF!/ %>uMnۑ1FK}lsۀAd7J4Sg!U+3tH|1=+ө>y1zgG|ft'$BE4{~CLbTJ^>+O/mLj} I,qzH!ݮX4 щ(3ca*뉴FIf`#/o=}aq endstream endobj 1349 0 obj 672 endobj 1350 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1348 0 R >> endobj 1351 0 obj << /Length 1352 0 R /Filter /FlateDecode >> stream xUr0w.eNNh5.Ҍ9e&mMAAjm1xF*Z7As\`65 13jzUߴmk+a/!E6QVn?YzY[]6~ gRsPG⨙uܶQr.1F˨%$ڠ(Nb=[}9O$wxHt/NOjCEpWz|C.)tb6֋.F}y=1]i(;y 2 endstream endobj 1352 0 obj 603 endobj 1353 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1351 0 R >> endobj 1354 0 obj << /Length 1355 0 R /Filter /FlateDecode >> stream xTMo@+]>ͱRSFQ{H# uv?S@1of13}e,Φ8Hn0 nY/żXd߬;_GB}xrZw=qLF )ro}YZ|GB+DkxpwJ'LW ̳bG:].'6?VG2[NaAI rA Te/"SI"N*&-^-,Y7[]wR Lpӱ^Z7\LǮ~ !GOmZV:8iMۦJN'54+}JeDHbYF1ƚӺ()*%BKIp2}8#nϤ dA)%,)QXZ쿅Hr@L⦨fQf_,mUxdӇ=4iwwa7C͞K䕆‘+:;WXUsٵ" endstream endobj 1355 0 obj 519 endobj 1356 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1354 0 R >> endobj 1357 0 obj << /Length 1358 0 R /Filter /FlateDecode >> stream xUMs0+ʭ6Ў=6MF8i}W|8ô 0y>=a@i)qAOlO=MV endstream endobj 1358 0 obj 571 endobj 1359 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1357 0 R >> endobj 1360 0 obj << /Length 1361 0 R /Filter /FlateDecode >> stream xUMs0+ʭ6Ќ&=6rL8plqziy>=-À}f8LΪH߇s Y?vFZ}XC}/'s(|s٩õgBߕ6 9Qg/*+!\݇kuN(aG@8.?C]0>U)J*~A z%S"v©AƧ'"ɋ֭qi&:}GܔcWk]47 Waƹ ōt=֏s%!\&F<DL D蘴5㙤}뙬cl|Y$EKUQ.Q2PAMzCZRo\QǽRL\IUJbeU$ꧨ82y5|WƂtMoU'rEfXRP![/&ţ";("sJDXDW j9%}،%nM2Or8:Qj;rNWZ $;k`G7v/ endstream endobj 1361 0 obj 610 endobj 1362 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1360 0 R >> endobj 1363 0 obj << /Length 1364 0 R /Filter /FlateDecode >> stream xUKs0+BӦIä440d`㶇&ౘ}|Ү#(!Z:c8obL"ܲh `Digگ-Dp2q\Ot.7;c(jJO,9\F SSB0O¢2:o,&eI4tP7Z (첗z AN$ɫ^Y]!&}EHMmYiVkSuAr™a`Z\J1,Eɹ)&qa2T}FJ}T $Sxg%S˧,/g!D+_k-TqA$FU"gb0xT !mU{K..ΆK}zzsۈ!j}l`! f )c00yՓV⤺-_y9~LDh9ICXcnOE#9 Z LSO+KeDleD9;ٿk&;ʤ<:Drq3wͦ%[CdsHNR;_f4^/^Y ߚ\UoM endstream endobj 1364 0 obj 640 endobj 1365 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1363 0 R >> endobj 1366 0 obj << /Length 1367 0 R /Filter /FlateDecode >> stream xUMs0+ʭ6Ќ&=`'v 6N/Mc1JP haZ }9.0pE33jH_>nl =ᗕYYwƈ;l5rƚ*7 g:tQg;kqlGW/5DsS]@0Me{sOu%qIRdd n)Xe/O% O"ꋋ$/;#Mt$eAWk]X gn8D+P7OcL ]\gB3)c zVIJ\ Hl|Y&JzJkHw`,)7htolI\VJbAդ8)E'/.&_5Yg$OU=꧰ʋ z<ןk6Km__CѺ(tVY8Mu|"+ڒdl[ b'k"itdHBg <ɪ`xg[5d~=h§8m\K0ol.."YVIgQbsp#nw6tdnJMO}m?tA{dwi(^gBmo쪹Q4H endstream endobj 1367 0 obj 638 endobj 1368 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1366 0 R >> endobj 1369 0 obj << /Length 1370 0 R /Filter /FlateDecode >> stream xVMs0+4$BӦIii#`'I 6i.MzҲP< x; B`E7uodOi?o˳% yx o*6 ާwx0zV@"s\;9xiMfJ6E7L_e5w76&eSI4t]PS"ʞꅯJ*w:e0GGi^jRdžv^lL;Vf; "pSp~/6 {$d.![͹Tp44>Ӫd@.IIN.ٚ:yQ=R) JFJ& Kfef%BV7H6``dVy96c 3\MOO,{0V/2<U0V>'ˈ`7;ٿjx'BuMiQ|FTRŦ6f)4 CK@kqlV9B]}vac;'Cvm?tQ|`HG$F[_\6WV՝G` endstream endobj 1370 0 obj 675 endobj 1371 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1369 0 R >> endobj 1372 0 obj << /Length 1373 0 R /Filter /FlateDecode >> stream xT]o0}WMZ=`ܽM[aST=tUEXKikiZ@8pWN_AȖj 2B"@(! ~3X_>~ ?WWׄN !`WUqECr$a 91LB7_e6VS] 8I6o!|NKI[_uҥYkPZI@4lW/ThH1ѩ[{~W릩̲ru"^Š jHЅa%a߈zp*[BeWk[7@W`f~cA9룻ȗyQ֮F1cc";ҨcJ8%P?3)az4be&㴤ju~r6o߀gP;hZ@YL̄oB}uVqE>YDd aogvm-m4ϋV.4B7SdZ{[ #?B/r㛉{bNOz)x0Q' ϿV endstream endobj 1373 0 obj 552 endobj 1374 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1372 0 R >> endobj 1375 0 obj << /Length 1376 0 R /Filter /FlateDecode >> stream xUKo0+HIZEY4Xpvˣi}v#953a0xFi2XAD #`aϢCkn>Zѡ3AP!!c j}SQ'FZMBRb]&K=ӹڅ 3. a Q6JQEJym=PE$ZZG<8HqF o&Y`HIEXj0:R$8-K{*-#=v(ߐ4s]"AYؼyJ:&LON+[6ȏ/KQsaqBGˣ)~~gðvmw}B'5&70"[o-|C+mw}jrj3O!r 91!I;iL提Mlua %=Rz|RWS}Uu3oQ%֟Uu?k < endstream endobj 1376 0 obj 635 endobj 1377 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1375 0 R >> endobj 1378 0 obj << /Length 1379 0 R /Filter /FlateDecode >> stream xTKs0+V;m:f<+1S0q+!S ~Xvp@{]MilE 1dZسp,6Bg쭟q=a?"@Ytn6w7d/|U!<M!yxVPhW 1"HVp7f 3~jL/dTj!N"{+ַdPwZ dvsNU]ޛlfmfuEgm21Hb"]˝#O"oʏM^6 S>T4euVBEGy?EY5y3P dZZG{EK`ɾ».;pEZIzLgN~?NGiƲF!#-?PZ . U*qH]}0MVUŹ%"&#Clv)*r-Fb/[ E7F>L{dNOt(Y<$yª/F&c endstream endobj 1379 0 obj 532 endobj 1380 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1378 0 R >> endobj 1381 0 obj << /Length 1382 0 R /Filter /FlateDecode >> stream xT=O0+n|9TVC!Ic)Pﱝ"1Vz=@(3"3)Dh]6 ҝqâWRgtgN+7$^1;cg+s/DؓA|`9KD> 1"F 7"mtvi3}b*fcR"fzsS(d yZTQe(Y{@w[-?YBV:u WeNO wŴ'a4Pr zo]̷[~icga ] . endstream endobj 1382 0 obj 338 endobj 1383 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1381 0 R >> endobj 1384 0 obj << /Length 1385 0 R /Filter /FlateDecode >> stream xVn0wJ`rlFU΢SE H0d5msla@P200B;6q%\P{ROo^k?-?Gwժ͵;}X:>Rw fֹ6` l&;|I0F]!ND$]+L`ـKXl.js0wh8C3 HW̒xoa>ϓT[[5'"2ň吷}TD{똿$Q/#-)y˪l+@U͈/KZ<5]t`xyv _e;Svq2(N8v `5)p'G;)R׌jvZ($l-.eM[2,vy)DveMðO%@Q]y!j I +>/ÈdE 4@v k~ c/Y5/Qfm{2ES'iUU^ endstream endobj 1385 0 obj 766 endobj 1386 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1384 0 R >> endobj 1387 0 obj << /Length 1388 0 R /Filter /FlateDecode >> stream xV]O@}WGM,3ojujAM0$*P~g* tim sΝ;{".:f@~Ȱl0L[<\Psq$V=jU57+%_Iz5Ma| h>U-IN3uGZ'y)V,SO0*W`"J> endobj 1390 0 obj << /Length 1391 0 R /Filter /FlateDecode >> stream xVn0wH ;>Ex20<{m`&'4ϹgwjAV:1F!b B (25PգнޓBdoG:;713MkjQyWw>oPAڀqH)Įu0XpXu˻[Xtf({g5 s57O{]<`čQOT%_^Y+\Q2Gc˨GQÀߣ( PI`0- z,S.xs Ex \zc! -]P= 1']7 h_Yխh'hrDw(NȔǖS)o|oJSbB3'#7$=:|2v Bi>0}u"#- 7d% U-2Y ȶ5PZOu'Jެk.s! ZYd|'^s*.n>7r@Xwt>ʂK׹hx։J>_A `ORUۭeeo6 xdiMJ}rg5Fv ^lX,غûjMڕZԮki/0T?3BG6c|bCqS v97mOOnXUuHy endstream endobj 1391 0 obj 744 endobj 1392 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1390 0 R >> endobj 1393 0 obj << /Length 1394 0 R /Filter /FlateDecode >> stream xUMo@+H5`[U{e":րV] `K,=f޼< ]d̼]Q xԅh |"\H `}k n#ŻGtx:\KyӞx>$!PڐqD(>g^ fg_!I!}J:urXSϥt]'|:n}/^z %KxP77Ծ.T^Cm k3 X9>4?[£h`ΘM*!^M6A0jWem,@g eMgb[겥"2bqM:QXRʸ#ݠޖIi (E.ʜ&FNђ'˽1Ukl WʼzeEE}_,Y\5 ZYb b6 ̯אuaE>'i_jQVi ]אb =/4$:,x8>/H/84cg[(s1Ҍ09 Kď;! ]_tf endstream endobj 1394 0 obj 576 endobj 1395 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1393 0 R >> endobj 1396 0 obj << /Length 1397 0 R /Filter /FlateDecode >> stream xVn0+EkMi"1Kr$iCJ"ڌOMG|3oy(|%N8( xa4YEzџDXݻɸ!2~Y/|n0Z`<'O7o x>̼!PVڐIDQH|Rb0+WeV;}>䔽> ?SҸ_\'6.ctԮ65`AuSߋ6o/kW8 ('b#3@b<Ovߌc?\5",Wٳhl#;*Ȫ2`Q7/JMq-KP:'&~ixsU[َiqKzA!\e)~@^ xgNF$ִ -Td*uu;Lg<`gk˅xZ Զ\ԇ0^X4uy19i'L'|TmNd.| {Wc?,O=r`OˬIFsPB,z7dbnh]^?h81,A-L,K-kQn'uMmywy+G&{ZM%ک.R'D,1B4R`rcnnәq:خE :$+ |UO}ﰺS +hE^W éVưmDJ[ܱ}N"9ɹ,l %aL0N$ c8(c0iʚ^i6Jdoe?: endstream endobj 1397 0 obj 777 endobj 1398 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1396 0 R >> endobj 1399 0 obj << /Length 1400 0 R /Filter /FlateDecode >> stream xV]o0}WMZ=q7m2EACWE4IR w4@HB {1-@q)$Ѷd_ZVmYTuZל$' Jr>=D)ԕ\C\ GefJh336KNvNUA%Qdm"Tky6UGkIxH5dDRn.ďt{0*jeT$ ѐ15HawoJ\b ZG\+o#J%mwI˗KFI|M<-]\K endstream endobj 1400 0 obj 581 endobj 1401 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1399 0 R >> endobj 1402 0 obj << /Length 1403 0 R /Filter /FlateDecode >> stream xTMO0 W#&"!PvԵIEpdS~W?{3 8wdb <;)wdag~Pݦm HNbЍ8\J#"xULvWN󫏬jy|>ܫA-nSAyrCD> K1 B*U eJ3)!)<0]{<i.TgmHѤr",2ZN{4\+iT|.rqL#"ˊcoG$.qqԛob(cxEka;zWڋq92Q1NaHց@_28 endstream endobj 1403 0 obj 377 endobj 1404 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1402 0 R >> endobj 1405 0 obj << /Length 1406 0 R /Filter /FlateDecode >> stream x͔O0Ww>;vІ[EibHiZ~vG= wWIX%3c&H/DP/G a 'ިw[~!k^Opx&DCpϾfBvmm"p )dES,_5d[Wʜ45ͦ!19cq ͑mG;=]_xYm[FRPIHDKc!D`I/Md8Y^U穫! n]YCϫ]2J&z-0ȵ/|*WjGj[Z)Pc$WH%##ϻ 2\ZwCcA"S:]dpbY>%=݄`mE/Nqvr'-AJ9IU1װ a %sx%wjC endstream endobj 1406 0 obj 480 endobj 1407 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1405 0 R >> endobj 1408 0 obj << /Length 1409 0 R /Filter /FlateDecode >> stream xTMO0Wq9$9"+"!5R>&w'-M$W?י2H_lcC"Ah.# %E7kpX?V1%p@eQ bCxa)+>7/C•p#M 6k/!nң4,E_'rǵc:poPA}-zG6]];_y[_NتВKp > endobj 1411 0 obj << /Length 1412 0 R /Filter /FlateDecode >> stream x͕n0EYÇH1m-$ H)%UIk^x0|$ g~І}N[ Xb&)P Nճ؍~ W7N];=,ׁd5~!<|CH6FjVS8$9\}J?Vo I%0,Uڲ.MYkGbv5Lh\rDΞW+lѤ%U3\!GcTb19S/52J®olݶ~IR._ܕjIQ> endobj 1414 0 obj << /Length 1415 0 R /Filter /FlateDecode >> stream x͔N0~Y3ĎY]E@ HӖT}{ƹ]H:3gt: c6k4V2 eDrMa;aF^~v%lF =>:$=%k{6$*7wvB6Rb+%!I$}yNvTB2U~UȪi$,:g;׶(-5Զ54Ւ82\$k[z\1hɥPJc׈@˵&R. pr He9x5PXq"7lLټE]ONsgcJN5ԩX@!(V5 G mK QA4+?W+G _xZ?q޲?Dž;6|]i<֍Q1lHհ٣aK?cD w@] 7D* endstream endobj 1415 0 obj 468 endobj 1416 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1414 0 R >> endobj 1417 0 obj << /Length 1418 0 R /Filter /FlateDecode >> stream xUM0+ۀ+z!A"%qꩻ7<Hm#A qQ TvWNT=VֱHX<ӺyQPvPR-^ΆA7Xns; cDR5/flL#(ęO_PtJ1<ЮF}D(GȒ "y* Ϲ endstream endobj 1418 0 obj 532 endobj 1419 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1417 0 R >> endobj 1420 0 obj << /Length 1421 0 R /Filter /FlateDecode >> stream x͕Mo@9le#U{ZUITm`;wMzJyxgv<+7(!.>@qiOpGauwt.V+= _& ୷%BUnM}"Q҃REݡ>D/̦{2E_+6 Ǐ"m,N{G-8% UaP9wdSu<6c;gs™ap=\*rO{H3_)sneK0 um(F>(Je%Trz@O xAӲ4ħE0%Qp|EZaWP8CLm i`gd^;cl'Lp SW2qcA wi˭f2! Y]>\inrB">9uN9/*-%ɹw1Mݑ;/6a^ہB)}:RC5^c__al8oU9Q\ʚ endstream endobj 1421 0 obj 578 endobj 1422 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1420 0 R >> endobj 1423 0 obj << /Length 1424 0 R /Filter /FlateDecode >> stream xTMo@ﯘc{vͱU[7+UF  cHβέ X^ě7f-t_X w+1F! 4A?7gb_ 9<n ^(|S!ܳ)%[)n_&+i%!]4 ii\oszT򍕹$3٢@"74PЫ@KޑM./hZWkf hɥP8Ň`GRP &~IiEɌ"|td@ʐA@ȡvP%KL08VZov~5LisB*QT=+NB' HuP]:D;/r}:.fK+[1rxp[iFqB322سu#gߣ7c/&k9旑<_UHĞ endstream endobj 1424 0 obj 513 endobj 1425 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1423 0 R >> endobj 1426 0 obj << /Length 1427 0 R /Filter /FlateDecode >> stream x͕_o0)PjhVm&4PU] rrq0#*/ճY;6%^)K+x#Z,F ajm ɷ|3HV}JRa4T I_/$t=$d`Srl.Ւ391uE`:,Z Gꪪe.-]L (HP%c];sKBE䔿Œ@L|N-m P6%;i6h< %O~>8U23 endstream endobj 1427 0 obj 528 endobj 1428 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1426 0 R >> endobj 1429 0 obj << /Length 1430 0 R /Filter /FlateDecode >> stream x͖Ao@9lggeslV jU%QDmm cb.5X^4<4<Wvq<5@b!Ȕ b vWhOѭM E97չG 9&6joiS!lm$D1$Lto;Y{HN+ksVﯖCC+YY7;.m@Ȥ ԩ5Riʘ#ZGn&#.iOC!#Fhz;"h Y9 *Y-,V|.aۥt{6Hdq[dsC.#<ݫ)(S@$9 "B_>*$%P)i2QC|Y>%C!ᏕWGP.:N UE:GEy,pzLjz/_~*lǗ4\ӲD :!KC ,z\xH9 9E|ɺ:\=vdGBLhULk06sBZ#K:og_^U{O endstream endobj 1430 0 obj 569 endobj 1431 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1429 0 R >> endobj 1432 0 obj << /Length 1433 0 R /Filter /FlateDecode >> stream xUMo0WqP{նRoQѮVmUMI߯!$@۶0z7<}9;xnE1!^.q?0A uʥ endstream endobj 1433 0 obj 513 endobj 1434 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1432 0 R >> endobj 1435 0 obj << /Length 1436 0 R /Filter /FlateDecode >> stream x͕M0sl X[U]Hb$Y4ʿC> ao݅(Fox<3/p`xE5y4Z/%ʁb_w׬_$a<>D==  a*7|g'k#I5!RH!MAm}|;^)xgeڐmhvwt+m PEΑMSso g/WlU (Aq* >2 FJB! A\ n;@YTnj/N$Aњ8}:lpͶRQĘX$V9 I;{ 4N1 ςgllMa`F@au9,VY-m`eSI_gDw>GMН~RErn:a4o?hr1Eߜo?< endstream endobj 1436 0 obj 515 endobj 1437 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1435 0 R >> endobj 1438 0 obj << /Length 1439 0 R /Filter /FlateDecode >> stream xTN0 )| N4 GC68[#uf ޞMJ;GR'v3T[wa!&B`­zb yBdH pK^,wҺdqMw5!^sI4|1ll@ l K&DG endstream endobj 1439 0 obj 399 endobj 1440 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1438 0 R >> endobj 1441 0 obj << /Length 1442 0 R /Filter /FlateDecode >> stream xVMO@W*9=!V;7-G?z(o͛l, ?"T1 !z@.Q`@_ Xw' ~ZE]cj56Oōub]&Եp9  n%lVp'7[+x:?$\R?u5i)d} ~eE ]Xi4({80b tرVx`@N,}q.d-J}:v|p('b/Ir#@\Y&՛*NH'^q\׺g>vO Y=Ӳ2.IyРCAn~x/A}UaY%Fbve;A *H-2zF~B:!9;yt&Γa2-\{|m'b! _an-@&B*ܝЪFmT.k$:xS6dz뺦f4f-MRKQ;> endobj 1444 0 obj << /Length 1445 0 R /Filter /FlateDecode >> stream xVMo@W̱̱URH$=$r%XK}gamh7y5k1tCz.1ܠHwsXwMk"ݏ9v }xutOUg]@ Lf{iЇ,/%.rRp+Q)xr};~8I:{Orr7=k.b JC3upF^+5`LN+Y>\B-oۋc.r@d?)zzH,HXh|.DQyY@9|7Hj!Ⱥ^E<5T V%lrmrUUd=78XԀo#aǛ$C"kzD^h$b# xlZ>5pv 62%ܤ PNSC!ʺWl:BͨHDZϬBL5ZJVSaƚt}(6˧̗Sf乚=\]><3HBB{YɅ(P|=:r{Sq =`jسMLBI>'pAi=5"ɦ'у^zHH9,t.{iC0t3iBң:)Igv-,G,KG޵#q_yC č6^GVUX endstream endobj 1445 0 obj 770 endobj 1446 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1444 0 R >> endobj 1447 0 obj << /Length 1448 0 R /Filter /FlateDecode >> stream xU]o0}WvRk0qR7uoi*B&SĘm#-6D|q@ܢb;%@}!pB[ ݎ]3vka^!| ] ٠P!<{_pUZ0 6ژp.-,.nfK'E#̿{7^ߒiԹH_JT u )r[h"0FDT||mtfK |8gD5qjHDpe~<&_Vvgad6 $Pl͞JK@דtB4 YNդܖ5>!G3j*C5S:LeB2eG#vLJ9}'=*5N2s8"uْxY_j38ljm֧$OI>5 w:T[7GwtUрHye[]KODL3_ZSr|mVƐfͬL| -gra;@+WE9 G>*"ijߍwV]) endstream endobj 1448 0 obj 559 endobj 1449 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1447 0 R >> endobj 1450 0 obj << /Length 1451 0 R /Filter /FlateDecode >> stream xUMo@+TvͱRZ7'=QD:Ҧ|lME;= h+H y `Q?*-ܲ_,{.bD}~m!_6҇p܇A責 wz_n(.*m.!D}s>ؾM}F]1iŰd|Hao҂ ySQ&-D5'!Fnba5Kpڤy6qy 1:[ t@6z;Xhsӑ3IJNءQ2T*`aK:Ü(ed?֞iTHB)i!SV=7HGlyY{pF' 󪊎ry S7{lbj;#iVli1G*٪)ЕOM77u؂:_\#n1ݐ3m2^߯t$+,gwv= endstream endobj 1451 0 obj 559 endobj 1452 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1450 0 R >> endobj 1453 0 obj << /Length 1454 0 R /Filter /FlateDecode >> stream xTMo0W̱=;=n]uoi*8MB!$pl"l=yxC}ܢ4lAcX@yha~[ ݉CoVd'y|!2$_*7=&~ZRB8xqզ,{iLU~68)*S_>AGu ƿXݳ.?_"nv4;n&Ձ;pvءWFD(WkSchZ6ޞ3vr&-eJKJ :#2\ n\u d]>w峁 ҹÿ,/uSu@/KT9 Cݡ\k]uz endstream endobj 1454 0 obj 490 endobj 1455 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1453 0 R >> endobj 1456 0 obj << /Length 1457 0 R /Filter /FlateDecode >> stream xTKO0WxWqbo=P MB{uw{(Oq'Ĵx!e(#2XM )~O0x^]c7'@+nn2n]$sJ6“_BVYLj !bU54pYLgE@?|0,_[+ayDc^K^L~.t@(=WتV3Q:M8=}/iV!kUIz IRQq.@rVVxH.m+}"Ip'y?wRƩ B3*Ŷ-eg _;Fob6V~_0/.) evo{oV5O`l| endstream endobj 1457 0 obj 451 endobj 1458 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1456 0 R >> endobj 1459 0 obj << /Length 1460 0 R /Filter /FlateDecode >> stream xTn0+$%Ṟ@Z7'B{Cب#_RǖeHI90@^EiW0 %- ~WOlӇ{~_$#CSFZs=BSiCx!_cr-SB*T\C w5eYͮ6l~ qRT^>AGq ?YܳF_">EV7j}puaQ@SQ-/4Ն?fY[g$A Db4ZIx;V末!ANq^ 5+Wnk>\9:A!Rz57ˋjST=V֒G-\S4@ Dkgu3S,PTFʵbUg˳ubbW1NtފٴGL;,*[K[tڹfCK]&IlR _]-va'n^gb؍05Nlj9?028;?8w endstream endobj 1460 0 obj 513 endobj 1461 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1459 0 R >> endobj 1462 0 obj << /Length 1463 0 R /Filter /FlateDecode >> stream xTMo0W̱]{\h*8 j k Q^f0x}THB*r;<^eFe]׻ZWw⤨|OF_["n66lO8Ri;+UZP!|*E|囵4*]v 3l)s1 r8)OR%R,8C?GJWpy! ^pFHA8#doUZTurY=R[DsCnDw 3mqbg]zJI̓2e4E;ԁ:g]g#^Rad}uQLg *=Mռ$Uk0}h8ͅ=x~@э 1İ"ah牙Qdp͟{b endstream endobj 1463 0 obj 510 endobj 1464 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1462 0 R >> endobj 1465 0 obj << /Length 1466 0 R /Filter /FlateDecode >> stream x͔=O0wa9;+*"1T !q4NӪI )#l'+4caCpȷd70/#|]8lڌeO8(ᑬ - @r<mcY}H573A M̓ܧq̓$t=(#D CH+FGYj?d4k: }2`8+fRRvζ:ZCӪwDZ \\˽Rt6ߒ$ԅM*WTQ%ݧ |nCѺ2׮Z|bɑ>J̏p9Y endstream endobj 1466 0 obj 346 endobj 1467 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1465 0 R >> endobj 1468 0 obj << /Length 1469 0 R /Filter /FlateDecode >> stream xTMO0W̱HwlvHbhDE(ihB ҆m!ju>޼tXbWτ"n!-Ŷ~nm 6<+xM[/ a㝇K!\I+-Sҷ &u0u\Sm ve\AӻJ.X_Aau--djWG@f+D@f$u^QuժhLpȩ]Ԩq^MY Uk*r\@/p\JNP\~ A(M5weһ58jfM`AKrVllm/O͌K|mbO֞,&-11Qq<_:39 3B8 8!ﷺӰ~^o(Q<2ƹpd|x~ 18 endstream endobj 1469 0 obj 509 endobj 1470 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1468 0 R >> endobj 1471 0 obj << /Type /Action /S /GoTo /D [1311 0 R /XYZ 72.0 720.0 null] >> endobj 1472 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 260.37 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1471 0 R /H /I >> endobj 1473 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1471 0 R /H /I >> endobj 1474 0 obj << /Type /Action /S /GoTo /D [1314 0 R /XYZ 72.0 720.0 null] >> endobj 1475 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 228.15 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1474 0 R /H /I >> endobj 1476 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1474 0 R /H /I >> endobj 1477 0 obj << /Type /Action /S /GoTo /D [1317 0 R /XYZ 72.0 720.0 null] >> endobj 1478 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 251.48 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1477 0 R /H /I >> endobj 1479 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1477 0 R /H /I >> endobj 1480 0 obj << /Type /Action /S /GoTo /D [1320 0 R /XYZ 72.0 720.0 null] >> endobj 1481 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 244.25 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1480 0 R /H /I >> endobj 1482 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1480 0 R /H /I >> endobj 1483 0 obj << /Type /Action /S /GoTo /D [1323 0 R /XYZ 72.0 720.0 null] >> endobj 1484 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 265.91 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1483 0 R /H /I >> endobj 1485 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1483 0 R /H /I >> endobj 1486 0 obj << /Type /Action /S /GoTo /D [1326 0 R /XYZ 72.0 720.0 null] >> endobj 1487 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 649.5 271.623 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1486 0 R /H /I >> endobj 1488 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 649.5 539.998 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1486 0 R /H /I >> endobj 1489 0 obj << /Type /Action /S /GoTo /D [1329 0 R /XYZ 72.0 720.0 null] >> endobj 1490 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 219.27 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1489 0 R /H /I >> endobj 1491 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1489 0 R /H /I >> endobj 1492 0 obj << /Type /Action /S /GoTo /D [1332 0 R /XYZ 72.0 720.0 null] >> endobj 1493 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 233.71 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1492 0 R /H /I >> endobj 1494 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1492 0 R /H /I >> endobj 1495 0 obj << /Type /Action /S /GoTo /D [1335 0 R /XYZ 72.0 720.0 null] >> endobj 1496 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 258.14 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1495 0 R /H /I >> endobj 1497 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 613.5 539.998 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1495 0 R /H /I >> endobj 1498 0 obj << /Type /Action /S /GoTo /D [1338 0 R /XYZ 72.0 720.0 null] >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 243.7 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1498 0 R /H /I >> endobj 1500 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1498 0 R /H /I >> endobj 1501 0 obj << /Type /Action /S /GoTo /D [1341 0 R /XYZ 72.0 720.0 null] >> endobj 1502 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 258.14 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1501 0 R /H /I >> endobj 1503 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 589.5 539.998 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1501 0 R /H /I >> endobj 1504 0 obj << /Type /Action /S /GoTo /D [1344 0 R /XYZ 72.0 720.0 null] >> endobj 1505 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 286.47 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1504 0 R /H /I >> endobj 1506 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1504 0 R /H /I >> endobj 1507 0 obj << /Type /Action /S /GoTo /D [1347 0 R /XYZ 72.0 720.0 null] >> endobj 1508 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 298.97 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1507 0 R /H /I >> endobj 1509 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1507 0 R /H /I >> endobj 1510 0 obj << /Type /Action /S /GoTo /D [1350 0 R /XYZ 72.0 720.0 null] >> endobj 1511 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 296.75 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1510 0 R /H /I >> endobj 1512 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1510 0 R /H /I >> endobj 1513 0 obj << /Type /Action /S /GoTo /D [1353 0 R /XYZ 72.0 720.0 null] >> endobj 1514 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 313.69 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1513 0 R /H /I >> endobj 1515 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1513 0 R /H /I >> endobj 1516 0 obj << /Type /Action /S /GoTo /D [1356 0 R /XYZ 72.0 720.0 null] >> endobj 1517 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 289.25 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1516 0 R /H /I >> endobj 1518 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1516 0 R /H /I >> endobj 1519 0 obj << /Type /Action /S /GoTo /D [1359 0 R /XYZ 72.0 720.0 null] >> endobj 1520 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 315.63 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1519 0 R /H /I >> endobj 1521 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1519 0 R /H /I >> endobj 1522 0 obj << /Type /Action /S /GoTo /D [1362 0 R /XYZ 72.0 720.0 null] >> endobj 1523 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 317.01 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1522 0 R /H /I >> endobj 1524 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1522 0 R /H /I >> endobj 1525 0 obj << /Type /Action /S /GoTo /D [1365 0 R /XYZ 72.0 720.0 null] >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 338.12 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1525 0 R /H /I >> endobj 1527 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1525 0 R /H /I >> endobj 1528 0 obj << /Type /Action /S /GoTo /D [1368 0 R /XYZ 72.0 720.0 null] >> endobj 1529 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 316.46 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1528 0 R /H /I >> endobj 1530 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1528 0 R /H /I >> endobj 1531 0 obj << /Type /Action /S /GoTo /D [1371 0 R /XYZ 72.0 720.0 null] >> endobj 1532 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 328.11 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1531 0 R /H /I >> endobj 1533 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1531 0 R /H /I >> endobj 1534 0 obj << /Type /Action /S /GoTo /D [1374 0 R /XYZ 72.0 720.0 null] >> endobj 1535 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 263.14 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1534 0 R /H /I >> endobj 1536 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1534 0 R /H /I >> endobj 1537 0 obj << /Type /Action /S /GoTo /D [1377 0 R /XYZ 72.0 720.0 null] >> endobj 1538 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 285.92 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1537 0 R /H /I >> endobj 1539 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1537 0 R /H /I >> endobj 1540 0 obj << /Type /Action /S /GoTo /D [1380 0 R /XYZ 72.0 720.0 null] >> endobj 1541 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 299.25 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1540 0 R /H /I >> endobj 1542 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1540 0 R /H /I >> endobj 1543 0 obj << /Type /Action /S /GoTo /D [1383 0 R /XYZ 72.0 720.0 null] >> endobj 1544 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 421.5 187.399 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1543 0 R /H /I >> endobj 1545 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 421.5 539.998 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1543 0 R /H /I >> endobj 1546 0 obj << /Type /Action /S /GoTo /D [1386 0 R /XYZ 72.0 720.0 null] >> endobj 1547 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 239.27 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1546 0 R /H /I >> endobj 1548 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 409.5 539.998 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1546 0 R /H /I >> endobj 1549 0 obj << /Type /Action /S /GoTo /D [1389 0 R /XYZ 72.0 720.0 null] >> endobj 1550 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 243.72 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1549 0 R /H /I >> endobj 1551 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1549 0 R /H /I >> endobj 1552 0 obj << /Type /Action /S /GoTo /D [1392 0 R /XYZ 72.0 720.0 null] >> endobj 1553 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 217.05 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1552 0 R /H /I >> endobj 1554 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1552 0 R /H /I >> endobj 1555 0 obj << /Type /Action /S /GoTo /D [1395 0 R /XYZ 72.0 720.0 null] >> endobj 1556 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 218.16 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1555 0 R /H /I >> endobj 1557 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1555 0 R /H /I >> endobj 1558 0 obj << /Type /Action /S /GoTo /D [1398 0 R /XYZ 72.0 720.0 null] >> endobj 1559 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 228.15 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1558 0 R /H /I >> endobj 1560 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1558 0 R /H /I >> endobj 1561 0 obj << /Type /Action /S /GoTo /D [1401 0 R /XYZ 72.0 720.0 null] >> endobj 1562 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 224.27 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1561 0 R /H /I >> endobj 1563 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1561 0 R /H /I >> endobj 1564 0 obj << /Type /Action /S /GoTo /D [1404 0 R /XYZ 72.0 720.0 null] >> endobj 1565 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 337.5 185.73 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1564 0 R /H /I >> endobj 1566 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 337.5 539.998 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1564 0 R /H /I >> endobj 1567 0 obj << /Type /Action /S /GoTo /D [1407 0 R /XYZ 72.0 720.0 null] >> endobj 1568 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 198.73 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1567 0 R /H /I >> endobj 1569 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1567 0 R /H /I >> endobj 1570 0 obj << /Type /Action /S /GoTo /D [1410 0 R /XYZ 72.0 720.0 null] >> endobj 1571 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 203.17 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1570 0 R /H /I >> endobj 1572 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1570 0 R /H /I >> endobj 1573 0 obj << /Type /Action /S /GoTo /D [1413 0 R /XYZ 72.0 720.0 null] >> endobj 1574 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 204.83 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1573 0 R /H /I >> endobj 1575 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1573 0 R /H /I >> endobj 1576 0 obj << /Type /Action /S /GoTo /D [1416 0 R /XYZ 72.0 720.0 null] >> endobj 1577 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 200.95 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1576 0 R /H /I >> endobj 1578 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1576 0 R /H /I >> endobj 1579 0 obj << /Type /Action /S /GoTo /D [1419 0 R /XYZ 72.0 720.0 null] >> endobj 1580 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 202.6 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1579 0 R /H /I >> endobj 1581 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1579 0 R /H /I >> endobj 1582 0 obj << /Type /Action /S /GoTo /D [1422 0 R /XYZ 72.0 720.0 null] >> endobj 1583 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 214.26 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1582 0 R /H /I >> endobj 1584 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1582 0 R /H /I >> endobj 1585 0 obj << /Type /Action /S /GoTo /D [1425 0 R /XYZ 72.0 720.0 null] >> endobj 1586 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 215.38 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1585 0 R /H /I >> endobj 1587 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1585 0 R /H /I >> endobj 1588 0 obj << /Type /Action /S /GoTo /D [1428 0 R /XYZ 72.0 720.0 null] >> endobj 1589 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 213.15 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1588 0 R /H /I >> endobj 1590 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1588 0 R /H /I >> endobj 1591 0 obj << /Type /Action /S /GoTo /D [1431 0 R /XYZ 72.0 720.0 null] >> endobj 1592 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 208.71 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1591 0 R /H /I >> endobj 1593 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1591 0 R /H /I >> endobj 1594 0 obj << /Type /Action /S /GoTo /D [1434 0 R /XYZ 72.0 720.0 null] >> endobj 1595 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 225.38 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1594 0 R /H /I >> endobj 1596 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1594 0 R /H /I >> endobj 1597 0 obj << /Type /Action /S /GoTo /D [1437 0 R /XYZ 72.0 720.0 null] >> endobj 1598 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 205.94 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1597 0 R /H /I >> endobj 1599 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1597 0 R /H /I >> endobj 1600 0 obj << /Type /Action /S /GoTo /D [1440 0 R /XYZ 72.0 720.0 null] >> endobj 1601 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 193.5 263.497 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1600 0 R /H /I >> endobj 1602 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 193.5 539.997 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1600 0 R /H /I >> endobj 1603 0 obj << /Type /Action /S /GoTo /D [1443 0 R /XYZ 72.0 720.0 null] >> endobj 1604 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 241.48 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1603 0 R /H /I >> endobj 1605 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1603 0 R /H /I >> endobj 1606 0 obj << /Type /Action /S /GoTo /D [1446 0 R /XYZ 72.0 720.0 null] >> endobj 1607 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 235.93 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1606 0 R /H /I >> endobj 1608 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1606 0 R /H /I >> endobj 1609 0 obj << /Type /Action /S /GoTo /D [1449 0 R /XYZ 72.0 720.0 null] >> endobj 1610 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 221.49 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1609 0 R /H /I >> endobj 1611 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1609 0 R /H /I >> endobj 1612 0 obj << /Type /Action /S /GoTo /D [1452 0 R /XYZ 72.0 720.0 null] >> endobj 1613 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 215.94 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1612 0 R /H /I >> endobj 1614 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1612 0 R /H /I >> endobj 1615 0 obj << /Type /Action /S /GoTo /D [1455 0 R /XYZ 72.0 720.0 null] >> endobj 1616 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 243.13 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1615 0 R /H /I >> endobj 1617 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1615 0 R /H /I >> endobj 1618 0 obj << /Type /Action /S /GoTo /D [1458 0 R /XYZ 72.0 720.0 null] >> endobj 1619 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 248.7 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1618 0 R /H /I >> endobj 1620 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1618 0 R /H /I >> endobj 1621 0 obj << /Type /Action /S /GoTo /D [1461 0 R /XYZ 72.0 720.0 null] >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 249.8 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1621 0 R /H /I >> endobj 1623 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 109.5 539.998 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1621 0 R /H /I >> endobj 1624 0 obj << /Type /Action /S /GoTo /D [1464 0 R /XYZ 72.0 720.0 null] >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 241.48 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1624 0 R /H /I >> endobj 1626 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1624 0 R /H /I >> endobj 1627 0 obj << /Type /Action /S /GoTo /D [1467 0 R /XYZ 72.0 720.0 null] >> endobj 1628 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 85.5 213.876 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1627 0 R /H /I >> endobj 1629 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 85.5 539.998 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1627 0 R /H /I >> endobj 1630 0 obj << /Type /Action /S /GoTo /D [1470 0 R /XYZ 72.0 720.0 null] >> endobj 1631 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 240.1 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1630 0 R /H /I >> endobj 1632 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1630 0 R /H /I >> endobj 1633 0 obj << /Length 1634 0 R /Filter /FlateDecode >> stream x]Ǚs:7'p3`wᶀaMXdjw7,Lq͸ۖT3]EUx>7S=/?uYw?Ǘ]~?<ϯ~uy_x}W/o կ?D.G}n?t\k˫1.翎i2׿z_?xׯx:?=oo|/|~~oruQ:ӿI?_oݫo~w}ۗ?{1WΗ}^)qߏ"qH$E*񀸀`) XV"XE`&Mv"8Dp)SN q` F( _8D0D0D0E0E0E`*U6l"E`!C"8Ep`^@0/ <@0Y@0ָkʑT|}Co#kkb޿p qx@|~8%_!"8Eprrrr`9@ X,KRD0D0D0D0E0E0E0E`*M6"E`!CN"8A0.  8@0Q@0V"XE`&Mv"8Dp)SN y` f, ``````~d!ւ>7~9q0܏+CPꤺCSHT7ԇXRZS!XUPYYYY&Y&Y&YVdy>'8˜(uPݨRRWI5YNd9rZn!XPb\H-kхb]HMAAAIII,+YVdȲe#N,;Yd9r$IS,z rȀ˵&Cj\2.beHMAAAIIIsYIrKS |OGSmϳ[$fybk|y˞G9<ʱQ=R(~yP/Fc8_ݿϣ1~FfRWXMꤺK}ޤr LLLdYɲe%F,Yvdr A,'YNbƗRkB}wJ-k u5,,,,,,,,+YVdȲe#N,;Yvd9r$IS,(Yj\#fr5UKMAAAAII5rO+櫧_>Wi4^描_rru+qFϱ5)qXC7'!!!)))U%xgȝzJ Օ!u?NBuPM,'YNbRLC}LK-k0 u5,,,,,,,,+YVdȲe#N,;Yvd9r$IS,`Zj\ir 5LKMAAAAIIi嘟'_0Ճs:~ұVcBݨRPWk&Iuz A,'YNbZ,ש}PbZ,}P\gIMAAAIIII,+YmغZe uRݥ^NSJ5YNd92.bNZ,׹~PbNZ,~R: $$$J,+Y6ldȲe'N,Yd9r$)?r!?r'X& $$u§Q)YS%zp8Z qs(]Z꠺Q=>Tϧjr:Qj\"J-TDruu*ddddddddYɲT/s#F}>UKT7Sԕ!T-uRM,'YNbNEZ,שPbNEZ,שR:Qj LLLdYɲe%F,Yvdr A,'YNbNEZ,שPbNEZ,שP\"JMAAAIII5sv?r\>s_\~o_?n`:bqFby|H~QSnB<,oFDIz+"aaaiiiiT^oJfq;=:Z>$]\yX,'9.rZM/7+6S~b#˛yTNSR]\/.IvqFN+VSZMj3fTvS:Lu0iTNR]\/.IvqFN+6rS S S SMSMSY\q| w~붍 ǃ ^,˛7ATVSZMj3fTvS:Lu0iT'k9('u19('u9Tjjjjjjjj5jT6SmMj7nTS:Mu꺷rR]7wPNIu!y!uZAUJ}0 =Wn{G:ʫs\GyZ)?urSmLj7nTS:Lu4Ik\G9qq夺uR]:M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu('5T׸rR]: quwU)}Ϗ>܏^nvù}E{a fv텹ʴ]+veڮLߕ2}Wfʌ]+3weܕ2M[)s=*{/ܔn\ webW&vebW&werW&weLݕ2uWʴ]+weLߕ2cWfʌ]+3wedpSzVxl\O 7egOoeSz^+2+2+2+s.?)gOS|~g0:}|Ocv^,˛V,avS:Lu0iT'ƅTBq!8H5RT (Tjjjjjjjj5jT6SmMj7nTS:Mu 夺~B9PNg(R]?CTTTTTTTo>wy)g|ہ1Ϻʺ>xǹu^vùkºpSn7ú+SweLݕi2mW]+weƮؕ2cWf])FrǦm2kM52 webW&vebW&werW&werW]+veڮLە2}W]+3veƮܕ2sSf6M5 7eXg3ܔY㛽lʬ1f+2+2+2+yUcФ\6xh߽{`>Gur{|=)_jWk^MS$M0aTNSR]QNp<R]QNp(_#HwrR]Oߔz M9oIu=}SnaaaiiiTVSLj3nTS:Lu4iT7夺%?Hu=}SN[BrS S S SMSMSMSx}^' UZ?\򰼽z;muAESc<,7aTNR"9^c },> ^cTTTTTTTTVSLj3nTvS:Lu4iTHNX$'},> ^cTTTTTTTO`_j:x fb]QT (,iy|bI7Mu4Ik @9夺R]M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu ('5T@rR] wU|0hWQwna w?78?qPfoul󵱃Y>)_J^-l%'u{aaaaiiiTSyd;YP7'kaAZ(yZnTNSz](9^6B~uaz](9^6JnaaaiiiTVSLj3nTS:Lu4iT %'FR.lT !/z](9D}0p>nvwjU~:)_׈K^-k%O;qrSMSZMu]#^\"c'_׈Kw5⒇IF\jNS:I5.꣜TQ}꣜TQ}:O0000444jT6SmLj7nTS:Mu4I>Iu'A>IuG9(700044՛vwy`dz~97z~w7~f n87×wºͰa}3l2mWʴ]+weؕ2cWf]+37eO6MSؔY? 7elDٔ)eW&vebW&verW&werW]+SweڮLەi2}W]+3veƮؕ2sWfneS&/2yٔcS&M<6eؔɲ)eS&ˮLĮLLP./?}>^fﬧ_FO?~_َc:K(iy|\,Mu4iTN{Iu յӞrR];%/vSnaaaiiiiTVSmLj7nTS:Lu4Ik=夺vSNk=多f!,TTTTTTT3}:A~|>yA/2f]o^ovx\^~\Nor?A7'WLʫ+&iy|r@9C('u夺9:rS S S S SMSMSMSZMu-Tjg1/N+I7'kAZ$yZnTNSz]%9^CA~uiz]&%9^LInaaaiiiTVSLj3nTS:Lu4iT $'.R.T /z]%~$/AI\HZR]nPN Iu!yjjjjjjj5jT6SmMj7nTS:Mu:vrR]nPN Iu!y!uZMj5fT6SM0aTNS:IuA9c7$?HuA9c7('uZAu`̌g΁ifϟo6z~2q^7?Pwo6I͆jS:Lu4iT*Iu յrR]{('յrS S S SMSMSMSZMyϭ|RފAy?,O;byXnTNSVQNkoU[%y!յrS S S SMSMSMSMSZMj3fTvSMu0aTNR]{('յrR]{('յJBko)P9y090SXo?9hkXڃ7e*WlN<[YnTS:MuڠF9^oᕜTJN[x!/zWrS S S S SMSMSMSZMj3fTvSMu0aTNSzWrR A[x%'-^M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu^Iz /^oᕜTB^Hz z3u#sXc>o~pz3w)TW뤺K}j}d9rrrrre9IJbY,E,KR2222222ɲe%J,Y6dɲe'A,YNd9rmZ,׶:rmZ,ז:X uReeeeeeee%J,Y6ldȲe'N,Yd9r˵mNj\>rmZ,׆9rm,,,,,,>MfRWLꤺK}ɤ&F,;Yvd9r I,'YN,,,,XC,!e)bYXBAAAIII,+YVdȲe#N,;Yd9r$IS,"q˸ebX!qe"Q2222222ɲe%J,Y6dɲe'A,YNd92/b̋XE,<2"Y2 YYҼOҼOҼOҼOҼ ]~>?A.w<QY4%y=,O;byX,bvS:Lu4iT')IuPI~ꚣT,夺(7000444jTD:{'X^-S>.:Lu4IkrR]SX&('5%y!5EVSZMj3fTvS:Lu0iT'.IuqQNkrR]\R]3]jjjjjjzWzqɫiyDyXnTS:Mu$յ;rR]#)'յ;rR]#%/vGRnaaaaiiiTVSmLj3nTS:Lu4iTHIu펔 յ;rR]#)'յ;rS S S SMSMSMSZMj5fTvSMu0aTNSvGRNkwݑ)y!յ;rS S S SMSMS۵]wyW;W {]Xg| .3꠺Q=^@]Rr&N,Yd9rubub񇺈:_j LLLLdYɲe#F,;Yvdr A,'YN\K-~r/Xc.b闚,,,,,,,,+YVdȲe#F,;Yvd9r$I,Xu?ԇXcub,,,,,iv2./5LFso[?.KǃOF˫;iy&GyX,7nTS:Lu4iT.FIub յrR])'յrS S S SMSMSMSZMm+by|PNX0iT'](Ak#夺v1J^HubTTTTTTTTVSLj3nTvS:Lu4iT.FIubT.FIubH]wUy?V/~nǫ}~ziRjߝZ>(xNw?^:Lu4IBBB rj9HZ Bjjjjjjjj5jT6SmMj7nTS:Muj\H5.R AqjTjS S S S SMSMSMSZMj3fTvSMu0aTNSR T 72&͇W^s*^}7K_磊Z>(KyZ)_Kj3nTS:Lu4iTb-Iu-֒ յXrR]('յXrS S S SMSMSMSZMj5fTvSMu0aTNSkQNkZZ%y!յXrS S S SMSMSMSMSZMj3fTvSMu0aTNR]('յXrR]('յXKBkjsKisKisKisKk}u>ڍ~\v{ӯ֖_Ç?OG_? U6K<,oOϿW?ᔓ:[0000444jTR,܏/Iy/W<-7iTNR]vSNnR]vSNnIuMVSZMj3fTvS:Lu0aTNR]vSNnR]vSNn s)7000444Z'/XkuR՛ku޼o={ût`x.w ZAz<-'hf|T R]/('յrR]/(7000444jT8˜[|=AK^-'hNz<,7aTNR]/('յBT IuZAVSZMj3fTvS:Lu0iT'ZA9Z!y!յrS S S S SMSMSKQֶ/ΣkL9G7ίM2M2Wkiy|m<,7IM2u ^7HNM2uZMj5jT6SM0aTNS:IIFrRn &IIBM2jjjjjjjj5jT6SmMj7nTS:Muuz$#9^7HNM2RnTTTTTTT$]u>?Y=y>y ]$\.5w˯I~k_S&%˛aTNS:Ie  rR}ق9l lTTTTTTTTVS][Rb'_[$˛Tj|- <-7iTNRnT[ ?HKrRnT[$7000444jTVSmLj7nTS:Lu4I-Xu ^`IN-XRnTTTTTTToKR3%mVsn \/7mA͹byZ)9Wl#M0aTNSZ.Z.Z.Z.ZR-TK!RHS S S S SMSMSMSZMj3fTvSMu0aTNSR ƅT 8H5RBQH5 F1000444jTVSmLj7nTS:Lu4Iy!ռj^H5R̓T c6Y,CZ>(?Z)O˻kMayTךIu ZBVSz> qχVf|hZ>(?Z)OMu4iTךIu յ&rR]kB('յ&rS S S SMSMSMSZMj5fTvSMu0aTNSքPNkM5!Z"y!յ&rS S S SMSMSMS]gUsLG|g:ׂ_)]·r?7''ʫCZS~ZA9R]5(70004444jT-g9z;y;,O;byX,byTNSz夺VkPNk夺VkH^Hu֠TTTTTTTTVSLj3fTvS:Lu4iT'Z!Ak夺VkPNkru|~0Q>sso޾~wwwh߿ݸ;wAwhiy;wY>%C{''՛;7ToI흜ToM5L5L5L5M5M5Mj5Տ'ߡWߡrS:Mu$՛;wrRC{#?H흜To ܡjjjjjjjj5jT6SmMj7nTS:Mu;9ܡ;9ܡRC{'7000044)|O->=<|xӯ/k>_p|5z\ћ pY>)?;WprS:Lu0aTNR&T ?HHrR&u5ZMj5fTvSM0aTNSz夺VQNk5夺VI^Hu&TTTTTTTTVSLj3fTvS:Lu4iT'DZM$Ak5夺VQNk5jsK'/X#b~o>?~~|ʱv{tO?z{~NߞO~zoOOp}'syWO}<(i(Y^(͛>q?KR endstream endobj 1634 0 obj 14590 endobj 1635 0 obj [ 1472 0 R 1473 0 R 1475 0 R 1476 0 R 1478 0 R 1479 0 R 1481 0 R 1482 0 R 1484 0 R 1485 0 R 1487 0 R 1488 0 R 1490 0 R 1491 0 R 1493 0 R 1494 0 R 1496 0 R 1497 0 R 1499 0 R 1500 0 R 1502 0 R 1503 0 R 1505 0 R 1506 0 R 1508 0 R 1509 0 R 1511 0 R 1512 0 R 1514 0 R 1515 0 R 1517 0 R 1518 0 R 1520 0 R 1521 0 R 1523 0 R 1524 0 R 1526 0 R 1527 0 R 1529 0 R 1530 0 R 1532 0 R 1533 0 R 1535 0 R 1536 0 R 1538 0 R 1539 0 R 1541 0 R 1542 0 R 1544 0 R 1545 0 R 1547 0 R 1548 0 R 1550 0 R 1551 0 R 1553 0 R 1554 0 R 1556 0 R 1557 0 R 1559 0 R 1560 0 R 1562 0 R 1563 0 R 1565 0 R 1566 0 R 1568 0 R 1569 0 R 1571 0 R 1572 0 R 1574 0 R 1575 0 R 1577 0 R 1578 0 R 1580 0 R 1581 0 R 1583 0 R 1584 0 R 1586 0 R 1587 0 R 1589 0 R 1590 0 R 1592 0 R 1593 0 R 1595 0 R 1596 0 R 1598 0 R 1599 0 R 1601 0 R 1602 0 R 1604 0 R 1605 0 R 1607 0 R 1608 0 R 1610 0 R 1611 0 R 1613 0 R 1614 0 R 1616 0 R 1617 0 R 1619 0 R 1620 0 R 1622 0 R 1623 0 R 1625 0 R 1626 0 R 1628 0 R 1629 0 R 1631 0 R 1632 0 R ] endobj 1636 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1635 0 R /Contents 1633 0 R >> endobj 1637 0 obj << /Length 1638 0 R /Filter /FlateDecode >> stream xTMS0WQW[ahgzLO{48C"+YvjYovuO`|F)ha&-@s1gv!)ӊU!& MAN."zq $#ɞT$_I`ZaH0Tpr G?ۥCy}?YV0ɲ4-մ)ItXWKu-"֘Mһx[e[- r&YLa 0ԦPV%_r =zPYXxگa7|}S]&"MLy*:pfvZmFnZ]q4ˣ- I dH_}uNA@T蓎Zzahv& |Z&bösCُs҉ĕ9x} ql endstream endobj 1638 0 obj 459 endobj 1639 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1637 0 R >> endobj 1640 0 obj << /Length 1641 0 R /Filter /FlateDecode >> stream xTMO0W؎VP[J+P6dd!K I䉞<3gI Io} BB>C'gTa3/[5<\O`!!,Y>| œq2\!JH(6pylBkPmS1حvkS#鳼-ٰl Q [TKCDy~:]5WUe,Lr)=!!$H _#y˺M~g;,각U6!ԷeGŭ˜XƘӦ4|ۮ=ՍX!pgs;q$QcV  *nr)}@F4hMNo`ZcӿT2:6Ozb_s:WßP1:?4̋};1*)y>qG7v5't. endstream endobj 1641 0 obj 463 endobj 1642 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1640 0 R >> endobj 1643 0 obj << /Length 1644 0 R /Filter /FlateDecode >> stream xTMO0W؎VCQ{t~]/vdGi=<{ØD ܷA!ĤQ.XؙD; &+M,AN.zp $-l/T!,IA|ŋP)2cL.!p(pq􏮺]%wu鏯AΊAOٲ^M KH7`TzPp4(Za;;kgӕwNqʙ@d!1.$rOaQ tH sOهCrgQ-\;U7eե"b<9=14RTC-Ο׽ fDxFS I3dJۥVݶ ?4TYҩ=<79z+`$bSm-ba:S4sґk> endobj 1646 0 obj << /Length 1647 0 R /Filter /FlateDecode >> stream xTMO0Wc;QC-8"6Ded;ג%Ko@֋yLR; qn *BB ".5 Ѕcap3/Y@`!!lDŽ}A $뽵q"`.<-\|ϚǢ $iYg $اdEl[#5M4L ( Sh!!Ym~_)Θ{# R(DAA̳$!wLbӯ4~fͮ5P7U8*+|.*H=|'t_ KKS 8)/:n 1wƒPi{q6,:u'A⾠uy_(d(юǖ<38-/z&}VӜƛΘ:2(Re UN @n'W4Ʈ[x endstream endobj 1647 0 obj 476 endobj 1648 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1646 0 R >> endobj 1649 0 obj << /Length 1650 0 R /Filter /FlateDecode >> stream xTMS0WQWeYvd@1$8 +88V=^=Ӯgkvb!s.C0X5_ϱ n15> endobj 1652 0 obj << /Length 1653 0 R /Filter /FlateDecode >> stream xTMO0W8VP[J+P6dd!K I䉞<3gI Jo} 0T>Ad\j @@ q`Qc ~0kBo r=҆dg%Y@(O*˵ʬ+i#ɷ*<-VʯS9حvkS#3-ٰL Q TCEDعyX{7Wu|q7+ \ (hdH=GIb6}%9$p glE7C~?*n]8 <4)mO#V̹5,:q$QcV  *nr\K #yAo`ZcӿԻ*5Ozb_s:WßP1:?4̋};1*)y1QG7v5 t) endstream endobj 1653 0 obj 463 endobj 1654 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1652 0 R >> endobj 1655 0 obj << /Length 1656 0 R /Filter /FlateDecode >> stream xTMO0W؎VCQ{t~]/vdGi=<{ØD ܷA!ĤQ.XؙD; &+M,AN.zp $-l/T!,IA|ŋP)2cL.!p(pq􏮺]%wu鏯AΊAOٲ^M KH7`TzPp4(Za;;kgSݪNqʙ@d!1.$rOaQ tH sOهCrgQ-t\U7eե"b<9=14RTC-Ο׽ fDxFS I3dJۥVݶ ?4TYҩ=<79z+Z$bSm-ba:S4sґ9q endstream endobj 1656 0 obj 460 endobj 1657 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1655 0 R >> endobj 1658 0 obj << /Length 1659 0 R /Filter /FlateDecode >> stream xUQo0~WPl}۪nҤMև!!)E;cH $tOk苿>ҍwa!}& ;33vwGaõWz_[B3h<'^yQ"rCXyb8B|d,: bRh{ 7pm{] Nv{SwV+xc]mzk h1,!Ղw$dC4UQv/s~^:3,͓re$uqُLpi-AE9pyVhbjLpɠM un%,<ٷط25Iklؑ= Y$~ڧ#C9)改GAE LSe+FTJnfXq]zdYe/za[d/NXV7}*S(J'4+NujNuA3y4h:Tdò0l6SVisUt3ۿßPK1zh].zɜ>5pd*8yB ZF endstream endobj 1659 0 obj 529 endobj 1660 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1658 0 R >> endobj 1661 0 obj << /Length 1662 0 R /Filter /FlateDecode >> stream xT0+5c;= j*4Hnn3vnѫ߼<0H_0_`$(} X ,(O߱_!|dwа'ް |Q!,۔@HU*&1$\I/ n_}qu.fw~bӓj/Y_+f-dZP_=u-"Θv]_W#/jW>s(Hr)Z&@rRe_A#+QxPb`AO]OgL&V$.U?,J'R!ʷܻ0ɎEdN 5JK"*[&9ZJ;r/)JjѵfzOGA5-f3b6^wZϊs]|ݺ>jvN|q~D 5İaZ%syPOȓ-8Us endstream endobj 1662 0 obj 510 endobj 1663 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1661 0 R >> endobj 1664 0 obj << /Length 1665 0 R /Filter /FlateDecode >> stream xTn0+.Hآ C7B f,#j}I=mDLaٝ @_E[ɂM CHD1)pn@Xy{{;+T o٨'ߔ6_"Ziy$D`$.dn\Y-bIڸ$srPƪu4htBH վC~EDZ/eʩ'YZx{ƣN+8 (|= M-_h" # }"4Pf;W> endobj 1667 0 obj << /Length 1668 0 R /Filter /FlateDecode >> stream xTn0+Hآ C#B{HBYۨ,9Zߡ;vl" "7 q' +c ,NǐJRPFRpab N{qG~a  .Jp-1Ft❘*6OW (NZe%&lnC^~-9dGnlVβ.!~l h2.!ۂ[u4JuZ!j{a/S,C3 䴨IsD`$q-M#94@d EfYEvXк -9NV`QiUͻe@GRFzOu#9sHK |ˋa=:UqQ[..)GhNf7Qyۡ)b[t3U;c} sмoFBFYwbzcUYzt endstream endobj 1668 0 obj 455 endobj 1669 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1667 0 R >> endobj 1670 0 obj << /Length 1671 0 R /Filter /FlateDecode >> stream xTMo0 WQ_cmۡ- /VZQ4qe³I=zbe2IS T \;n ɤ%v9nmvf_=3 lXnKaQ"rC}b@ w*Ǎι@ΕtPw7cUϡ(Nj{(nl66d[;^에mAz-:DT0旿}>!2N#"R(DA[9:'UѥFC'wR1#r3,| YPq2R"UtؑJȜ6yeIE[7P TwD s; Rqh9Q.!.E= ,YNn\Z}˕?yvB;⢌P7Qbt/̷{gMLqVjaiz9}DLZwzcUb endstream endobj 1671 0 obj 473 endobj 1672 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1670 0 R >> endobj 1673 0 obj << /Length 1674 0 R /Filter /FlateDecode >> stream xUMo@+`[zd(fmP18e651=yf^;Has^Z !<Kpâ݂];z=Mߝܡy|B4F܃ӄb$)myF!ܜxUJDpe?<|X?| a}1V0N)nŰd HspDPQJEk̾,V>&ֿH)ڥEvp9LP8M|`1ACe:cs0uiVU%<@/$I$٤x*:rR>ҌsĥqE[t3O3W?ޗ;5)$WK%R5D(6a%WQ@ Sl^DŽfutT8TX4?SUiKQlkG;=/eB j`[ j\T: gJ,eg^ŔfUXZW82U:U Z?4> endobj 1676 0 obj << /Length 1677 0 R /Filter /FlateDecode >> stream xTMs0+$Pɴv:x¤8e)6w`1HFowciܸI1ZT} D@pn"M{nG~nn!KW6\G|&BCՆ"ӗ8B4?Z+ o =<]n]ID3D߽QO⃩45)j4ФBH4[h& )/6e:֚! .98LJ6F{V/B!AAScYfg[J&z>E q~G?:҉!3423C^LˎjN8`|ftHbDؒNH |Nl> endobj 1679 0 obj << /Length 1680 0 R /Filter /FlateDecode >> stream xTN0+f]`c'Y+@bT ԷhB8H:9P|zǙxn1@}H%)(#)aaa70>ĸbZ"T&y(gvk4,СX5LaIͿ%̈́(!4 a9fju'& a؅cXWmx`Qi͞E9_L>%אSJSkXIඦ2V+rE$V/Yekq^EFe셪3U%(_Eob7V\0O*) Qhî-s. endstream endobj 1680 0 obj 455 endobj 1681 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1679 0 R >> endobj 1682 0 obj << /Length 1683 0 R /Filter /FlateDecode >> stream xTMo0+J;{!PuҨ"YVم K@,# 7Ў 7I =w-FA2bH ,YMp{^[oV?nv/9 Kpumэ#x xGBUiC(B=kPk"P3.|3cY-d >Ńh9e,uq$M%$Dںz!TZP#"osZޘROΙ BF2oH JX(/.cR'@V(UK b.f!:ʅD"sz(ݩ3hLyٸRI 7#ߛޫ9uKCI-mq4)u>S#ŹO2~y\gȲ Gm쿋0_2 qNFi`v$uNFӑY[ue5EuL[SAbIl']c ۶Ȥ."Qm/U7<޺ endstream endobj 1683 0 obj 521 endobj 1684 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1682 0 R >> endobj 1685 0 obj << /Length 1686 0 R /Filter /FlateDecode >> stream xTn0+ Hآ-C#BrHBY[-9#;^MDA$fyP}wDv`N[>1f}xHCǼqjG2MӨ^բ.( OuéHKl\vNFERnBZ{SpeiD&U썦'`%*L (ߠHbhn`^6RJuo3GoV57{ endstream endobj 1686 0 obj 457 endobj 1687 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1685 0 R >> endobj 1688 0 obj << /Length 1689 0 R /Filter /FlateDecode >> stream xTn0+.(آ-C#B{HBY[,9ߥ^d&a cgw8P\Xl#;L!Ra*2ܲB?hf?~l!_]᳸gtx.obRV}"} A!$j+CXkbA7_]}vy$]/c2V+ze.&;_#-2 8Psxa"t=ݟ֗w4fвRoCdOwDfJK[aJX5{XU~k v.si[;WK (%[V}v Hkb.4"-$'-[Zv ˝*(xGCbeqgL-9יl5_Cd'q*5ВA+tr|wEVzrq\1/J) e<")^/$q endstream endobj 1689 0 obj 481 endobj 1690 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1688 0 R >> endobj 1691 0 obj << /Length 1692 0 R /Filter /FlateDecode >> stream xU0slmjP)Z L6D!$"a7y^< h`{/{`.DOX`ᆅb Y۵}X/x_G&`5Z7 w y/Phq+p_)%3~ >ծXI3DG{NwVW{ٿ uM-$jDؾ:unTƬL]%zK1OrIƤ3V|Ft=4DJ×gBfL rwqvKmZjҹm*.'3qsqi)$ ChrܿbUeKUgLQ>QB*2ِFKO'>2W0oB>d/H(+ l դ$-Y/$eX&%8ݻsZC^$z\Mj9ZtR- *2E{)R35`S6M>k(J{:ljsq\pe?S%qd#n >F`:_#(| /~yUw} endstream endobj 1692 0 obj 548 endobj 1693 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1691 0 R >> endobj 1694 0 obj << /Length 1695 0 R /Filter /FlateDecode >> stream xUMo@+Hz?e}Vꡒ(f1(nlrKb=yv40E*b $B󁹄{7,-P#wnm }) ߜ{Dc=xvpY :0 abPR* +n6e^{;_“jENYW-$kwGDb_;[%R*ZcvUyMSE~ 3A)J&B@g2Hr9\ ̙5ti=!It!lwTu~%|4Oe\r[hbbq^J3ޔ2xZ e&֏,bd!+]X8eɃ6H&B}5Ȉ<VO ѬPKkD h 2){EbBѬKD&St<-{x5ƤR$+!vbkZ~|x.-R;0|7'#-Q\8<wv>V3 endstream endobj 1695 0 obj 573 endobj 1696 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1694 0 R >> endobj 1697 0 obj << /Length 1698 0 R /Filter /FlateDecode >> stream x͔Mo1sCxlA) B$+4%3ޏ> endobj 1700 0 obj << /Length 1701 0 R /Filter /FlateDecode >> stream xX]o6}[!Qb>dA;lXd5Ȓ"qwiɲc&3 k" {%&9H2,'wEC\<]@4,EX7["?I9!oz֓eru@PO~N~"J4I%y CcΤtͺjnrn9O>L|-ګ M0M]=Mh8#8W^`QBx/LT7& gUVMiA%`HPgiPbi\Ҍ |t.TQ?U@^Z% Sz&z(n`1EK)XocYmn=d9 'd N\ Ԩ_X9v@`xRu/Fρ>nO],ځȾO ժI47T6!&" >$rMe*P9p:=EX0`8Usv 8r,64AʼLuO~2TvsZDU b-u9;2db֕C4D;UFy鹨.^XCko( RA^Vnƨqe H"cѨftLD8-86~bc,۴<{$le{1= jt 4vCzezV V&$TᄆW̮[SspUUj!߶̳GЛt4O4P!Tp$:ʌ傎 +8=r_3~# t`ḐDo:GRbh*Mt@E}t2GIUe<1 Æ`hnW|q;NfQ]A~j叛'8PJk\C0jAD1e|;sZK#8#bYIjتjTe:UBRbGn uac~9ɗ@il{^.??.0C{ "G(ހ.°;P.=A?CvJIaqL9U/N`>0cA(&P1 zk ]+Ưfo?_N9g!b~vUØBtWH%H%p9Ub', yr(J`ܿb|";jd endstream endobj 1701 0 obj 1243 endobj 1702 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1700 0 R >> endobj 1703 0 obj << /Length 1704 0 R /Filter /FlateDecode >> stream x͒=O0w CَxR%BQAu$Pﱝ% eܽ~79! +1 >#*f@} ,6ww"6L4A'󅡉K|"Ѡ<rr՝\zRP@q&`V0xLmY:봹\z -̺\};̬s ܫc#UtTEܔnbG&ДP./ab/gZ%Ų-9tw~`S(za菱ģ.?v~u endstream endobj 1704 0 obj 306 endobj 1705 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1703 0 R >> endobj 1706 0 obj << /Length 1707 0 R /Filter /FlateDecode >> stream xXmOF_1(jEwUpb 6Cw6v%pzGF}f<30a@sf2/& &<}4w(y<3jFѻͳ3?sgRL(: }XM:w]q02FaEQCH>QϊLU Lx[wk~)+Z@/%$mtpJ$j7B8T1>0U]Bi&HVty%^#e# >s2*0' rp*uiYV".&]AMMSm2};5F߮,g1~P'xszg:qCNb6CY/Tkض'#&)ׇKM ({ďbL6]gWɚM ?FT uz, 6fxߛS7C\b8E VVY Gk) @]\Dc0a` "wת Cvf!B,3+;0zCUTqȟ7Gh@p1J۞# ru4~>- ߿/#۹~rG]@P!qP94mmZ؋~fDkn(,Zr$Z^D endstream endobj 1707 0 obj 1226 endobj 1708 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1706 0 R >> endobj 1709 0 obj << /Length 1710 0 R /Filter /FlateDecode >> stream x͓QO0)QB}5QLM|Xae[Fⷷ-cp>Qµ[B9 ٚlB wcQōgwn96I Dg2Za9=i~:^UlyEIP< $pͫ2j\lS+s;Be'ې+6#}0ƁoBGu6=ydJ”JE 7r0veKe`jYҦQuGc&> endobj 1712 0 obj << /Length 1713 0 R /Filter /FlateDecode >> stream xXo6~_6X(a+"`$"K$'$NSJ1ء}xLv}Xf_gh:s;"Fj|{(A^ZR*(œ)|>`I64}nhl-e; ~%nq vpP#F:T0!ksvffJ\l{}Q9P@"ouV,$ke| >:E:LE >R7f gQ$\?=EYASa@fL\omܺib!9&_5A".22PbXa`(ėWIU~F @u5 ݙ*I&R8V@ Zk'5kSA#*-ZM[\VAk]%2ȟI1J1S6w<&WkKԅ#Fgn*)̤O|t].M"oa+]zc$ؼʻL,CUࠋuD7yq/N$Ev!A?CvJ'C[w׌dS }[)Xv`NFr@+S[W2:҈Pe8TۭsɅDkoZy0GHr1vEB\l6:OFR G(/nl<ASSyo-CgpZ b lg&zl^.hyHQW0ȡؔ~9q5r38Q@@)kgPAu JstЌt2 fgԸ~xTrn R0;6o?CŰ hd݌hKkknZPZԈUq/_/1=7_DLtg Cy"S?77$081LRAXV Yߔ!,z}3;Jfvb(C8 NDāp㽡  u J&@0 8&Bs OA=tzZZ-%C^[dFhGL" z?%?#p\z|?2/yPSwVվc endstream endobj 1713 0 obj 1216 endobj 1714 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1712 0 R >> endobj 1715 0 obj << /Length 1716 0 R /Filter /FlateDecode >> stream x͓Mo0 >n$@I;LCCڡuR$ =2hc vO 1.]R^_퉴9{m/xgfsC? WP6\£DrCX=*QrVhW  m(˲{YAeu;=Dj+6lk~w #7pPhs$ &I+ 1-*_)$qN8uAfp&\i]ɛF qY#GMT?aײdX.[n0iy"\XU~}P endstream endobj 1716 0 obj 312 endobj 1717 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1715 0 R >> endobj 1718 0 obj << /Length 1719 0 R /Filter /FlateDecode >> stream xXr8+p]5FpCngrkfq2E*$dY? (JX.nu7˄"+sCrQ3Ľ}u=D\(^@`.1Oӻ",пlBoOAEI>N!?o'7_]D }h.w̙0? MG7yds4Rhj9e?j**w">JE#Fڍ> endobj 1721 0 obj << /Length 1722 0 R /Filter /FlateDecode >> stream xU]o0}WܷtJmyluMƴ08gChܸ{Z y8 _;!!F <8(@~Mh+0'NC9CYL7 A\euAV>O4MBH\KA۳oTxYi;*Aק+v{--cuTm& *Kq/b(3őI\P&k^\REٴ>2InkpJ R0GzkI@ծؖ%s&~ki˽/TKDv˘Ӌ`6D,ӡ>0@^sP?Сq>isk Fnrڼ4:;zsK endstream endobj 1722 0 obj 534 endobj 1723 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1721 0 R >> endobj 1724 0 obj << /Length 1725 0 R /Filter /FlateDecode >> stream xX]o6}[Ze%J[ÆHw{h Ch[L94~,٦M'6"ֹ~]~D[{ Crt߭Q2 $[\`^߷ޑ7wo'kD6o蟑wXMa=@x3#B~)nGѻgChJ(@LK]?]fh*]~S׸ljo-Y#8ڎ¢".0gY^O,kIO2@EŊP0C 9$Ze,D>\0(FkU3Ί R()5PҽЅ+%Y*6Pu DJ`NmJՂNǀ2q=p2Bb y r'G3K!_EQA%Ӵ 2Ѝ`EJKsvcYxզ,vٝg3]B6M `), P[;GSdK!3eKb]abt_2B^&;A"zO}\@t|".'EAXnQ.^01E~eʁ|,ǸLA=#&.ȠTk˸ 󥠱 Sƨ1=!.h[B1 F0)6ZGt Z".@? y4]%ެbcEЦIrI3P'zPUo$h aA{\ ~hK`̘t#$va7` i ?P":to+?Gvq+' /)oت>1Z(_ZskW TE꟞]Vz~alpt @9Nw./6sևUb|t'`|GN$Jam̃GQ endstream endobj 1725 0 obj 1218 endobj 1726 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1724 0 R >> endobj 1727 0 obj << /Length 1728 0 R /Filter /FlateDecode >> stream xUMo0+ޭ@v?*QY" &6DkImC[#{dx<; }M%y1" )xC w,tX4`;AD՞~Ga ?hx;+w 9!X97s=AZX'nI!ĮpyKԎ5e+HFu/[zr?[}m6;X# 4BQ  b˕l8c7W<YM=L&Ul/+s$3U+wAY>p)+vɲ xth|M2 nI⒖f|WB>BȋϣX}3."̾״?X?IUq0< k&I.G{'SwΥmmR JkP"cJK(s5b[Ni1*f͸P@ -)=4`Qhq> RI\)Ѩ}٨>t- k8o:L+Rq gReLFA-EWD4?hdH x'֬?1o"C5oUsD endstream endobj 1728 0 obj 584 endobj 1729 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1727 0 R >> endobj 1730 0 obj << /Length 1731 0 R /Filter /FlateDecode >> stream xXn8}W-ayEoIH6݇hȒ+)%YСb8lgpp8ԗ E^g"CrH2!*BD w(3bL6nl>,ߓbB/Oa4q' vrs|#h>N,%hnCi7[Nw6ֿۛ[KHCt8bKn!YU|P&TxVe༌u~_>: BŊP`"y u1&.uҨ_4(.[ZKۺfE`NW*d=(Wu6@ՑsjU4 1U}<~s$@@WJc$ NL dAY)Wyt~cY|.Òvd>.E 8d%rsPeQ7hc kJTg"Kנ7d$7R̔0/닋IO',0:13̰`,K Yo"BIm jʸ[Շ2yb ^MEە.vwA׽O}@DŽ*6 OcYp@%ΠemZlDPʰcŜP_U5AZsS}tp# bypڲ.³J8!Y^f!?u}=2p`v쏼[r){AfjDg.jpD}$P䎾 4^j l/ki?ނZ}ݽ{ U(qjĻCPŽs Ѐ)E@hX8_Maa!AXؿb$8Mí jNοbX,F28~l9Դl]k*]ˬikKҿz`rT#kJ"xI$e+~‮ 1Pn빟]Aɷ_I.({R~vzK= ڧJ ra0Vz{{\1MM-94GDx0~%sh^%,N2)bȑ29Ar yjN" cq?%@HӅoOSPsꓓoU endstream endobj 1731 0 obj 1227 endobj 1732 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1730 0 R >> endobj 1733 0 obj << /Length 1734 0 R /Filter /FlateDecode >> stream xU]o0}WܷlJmyluMƴ08gChx{Zq=_.RDž^ԃ|l?:p\/TB h:w -Fwg11^7s97!`Yi|rc*HQ·n}콲]}x}-[(tT6xHe)D] QG&SAx s KPQdYMD&o* AN׽7%y$j!\GX hK0hs:ImG buAo('&j+$18}jdHZ3 6[֪A/o `f497\( C_zhnhPVɕAVK$ؖ%s&ҽ֖{I*:Ѧ$ikoSw~6FӨ d5EzJS ~93_Q`&GM ]h= endstream endobj 1734 0 obj 533 endobj 1735 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1733 0 R >> endobj 1736 0 obj << /Length 1737 0 R /Filter /FlateDecode >> stream xXn8}W[Zayэ}k^-}h@([,CIӡmD3s8#OP\K(9$aAAϗqG探{;^%'¯p5u֓x7= B*n擫Gi 2!"Ka>+Ǽ4[__v+v{\v7$]>/[#Sb]Go qQRJfݻR,/jȬӹ"uꇦZi Y#"Aoz&  m~N%\ERjQ0~8yTnA/Fmw'LpxABJ/ nSVu[<L 9-!wJ$͂yP 4VW*_* ᮫qabhum>/l ^j,O5t\BTKM\\wd*wDzZgr`1rV%G|{PƧ[jP [X-L'誄WX#]ܿv3 M}W7>Oe>enNTi*]%Uqn%dQ`.xXǛPyȉg},~ܬ!)>hEڸ[=MzeTNv;P'>O\E|T+Ϭ筛?p |Rst$"pkCGER $sd!_LU_-wu\ Q 6Mғsi{:6ht(hg62x;eۦ, X^WǝJNBSQ{ڳۢx8Db'ۧX5Ix/k|3xT|_a\Z;O,|veX| qnc,<خ#ӕ۫ړOw!1|)s (6P17*vl+>XGFq# 2.zgRpQ sp@SzIlej7fh|}}:a}J.0ǑyIh nm _|?j>̫ endstream endobj 1737 0 obj 1242 endobj 1738 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1736 0 R >> endobj 1739 0 obj << /Length 1740 0 R /Filter /FlateDecode >> stream xU]o0}Wܷ6YMJِV L! &MkCɁsry0 ]%N+ia SG#DXh.v?~ ?X/Ozze`uğ޴g}(oJS|#Ȋc$#iD$H';uW}>g'wKpvk% 7P܂tL6xdʼU8( )-9؟oV\&2}q*8Q Jbƚznk4635(QJQ [yD^WD2|c\j_.k sSNt+Ro43I+T *aSE4_r [Z_p) Xz+1NzRj:[pw ic0x.*7|pe3`x) @^KmN; Cv8QWmSU4w~[ &[odFfP"GIM0@̼-#?9xo9Uq endstream endobj 1740 0 obj 545 endobj 1741 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1739 0 R >> endobj 1742 0 obj << /Length 1743 0 R /Filter /FlateDecode >> stream xXn8}W[Zayэ}k^-}h@([LCIӡmX3sx8gDϥĒt1ޏ19 #`!w(Kj(ۻs{G~}uSq0]Go?(BPR$.̺ =qly ~?`'m˯MtvpPG$ƺWoqPRJE/̲&;L^FdRLejePN# H0LΎ]! Kbٵd<>H.:-KDU ͼL@р墲Ԅ'S"BxneS4[< `t>s"dWZ$X!8EsS,ԋ ʢcTYV`Ph`o9g'G1A#bua ?#ta0Tmrb*p+ u I"a䠏,OsPW7>h6֩{D.মL5JEQnrnCC?~4:Jte?k `hX?u5P/2M ZyUcyԸ2i y]-ԩni}ifP?8{P:7UmΞ7v6Ie!CcRi>w]ƤA_b| xOΊHXLqc/>j4z `c(rezoXn}S|@m):'8I"C6DMۢ0+KW 7 sԗVYN[X"Knb}\u[ZۥZ)5]/̀Fm? q\А)iG g8gNgyy@[R]t8 x<_1N-)3܊q]Il9"t0{&>Wiv05O{̽xf>lC&jA7v4٘{PD&=5Nsq/.y5hgE:q@}5jw$aXq*=!9 xe> endobj 1745 0 obj << /Length 1746 0 R /Filter /FlateDecode >> stream xU]o0}Wܷ6iMJِVMb%! Nmbrs8\.kiy=o1 qdp h8H  ^#sƲ=}[;vۓoÓF#x]7Awy7_#-Ii&$> R +MU/AFW WWOdGWKpɮvk% 7P܂tt6xJQE'0ND6ia Qs+/(x y%>슟tDP%͝,ϪҲ`3Pƴ3r pBʂ9-wf._AU@}0^jHZrE ,]E۰%LVRF>^9-R(sg)\t?ľy%u۳I# To5> endobj 1748 0 obj << /Length 1749 0 R /Filter /FlateDecode >> stream xXnF}W[u4-`رҢIE2$eY^dI+@hb9M Jh>z*ʪɚjHd$Ѧy9ga4,bg/o:gR!8 D*m<)S@tPo@6KN*\MvQEe),EX`3zgOAL.\DϘm9+soz+?-r WzӴeʢiŘp]O k<$uZ/fzSe"8WC.81Rq.:)4mmSf-(5P~6? l f{qV7#NmS`gfpѷ.&u(Ae ZgUgEL>jhU{6@J5^b.†cL&)n#2OAX:g$vPCcˊ}ЫZ|‡j7承\ܞ돒jہnhx)fvB1jPYM];Tr>U\u )V d`6ChR"q32gznΰ4`:eO $Y7m\DimvpV+M$&( &a/G}g_16 \؋߱]WulL*/AwP X7u6{_M 'eEڏ5wXQbB=$ ra!`4^TOE*0)C>ʁb8e(?&CMXBSWIwmkgy>mo[`}T2u]Ȯ6]-MR X~4Dtq nTp><Pz UjNNSۑ}nXX vQ}cU_u endstream endobj 1749 0 obj 1256 endobj 1750 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1748 0 R >> endobj 1751 0 obj << /Length 1752 0 R /Filter /FlateDecode >> stream xTMo0Wm6MVUrHYP6&b>,d96g<~~;@vf:/?]1x6ḇl;0Q3c~=CAtd"P|'׷ 4' d=2B?7 9o.E˝ |<6\sAJ[?`l_d;vzV@Z9:MlFqITTYT}$ވ'sbŸTQWI^>:(vs:iӑLjQYE!FD]@{DXr <*c=Ƶ-)VȍfL8a&P_BNSQ!.RO%ZYO3,f-M(_J??VDjv`9Rh%cQΧDŽv\$d|Nqס39/(5 ?x?3ǯFP"ty|稚A+ endstream endobj 1752 0 obj 460 endobj 1753 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1751 0 R >> endobj 1754 0 obj << /Length 1755 0 R /Filter /FlateDecode >> stream xX[o6~8oiU,[n@,)El!Jrm-qs>~<_F (~ї~AxCLy$ ;8`95odۛ 93Gޏ>})+xuzQ~~zQ$ki&JHu ka^]sQ= &aY0cdkl-e;}vJjS!|AM)0eUoqYW$-IVDavF{HF4ehH AgigJiX(mK0)99yT<02鴊_i h1+Hu0-|JZ{wy̋NH%Ġ;Kw9EU;93!8EJitpMڇ蔃"d(*.q4#s}m ,x<`/$wuSdk9Z"0o`ѯp4YBg3xi5nF&0 KKꦸ[LK7' yS36lDEi ; r&']eƃ$|L%C"j7E4%{`|@r ۗ60}yk_h)efa l;U(훴sZUia&c# FfRy6)3c n_en.g:1vSـ\}faSWjVmc˫L1QG<-˱$ƧuvF{Hp鰙p fb?A_:EsN۠4B-fc6-vyNn%VXFŘX(IWzK;F{ú~d8(vͻ&AKYU endstream endobj 1755 0 obj 1260 endobj 1756 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1754 0 R >> endobj 1757 0 obj << /Length 1758 0 R /Filter /FlateDecode >> stream xTMo0W191,*CmzH 8Ǧ Y*#l4vAB&OF!p!πzeavyvEѬw}BHpAn ܇-i2O aA˹!^e3/Їand/5] U* yY }|r-'ydw\sN[(h;ƛ=^8r;^qkyCV*Q5ٯ,_p;?Ժ4bجVD-/z)Jhx|2QA6&uCD^SN Q JEm\J5ТxYb ZL T#f';yQ)h&w%V'lR7bT$oiWʻR=AV9b;81R(:^2 m2 endstream endobj 1758 0 obj 477 endobj 1759 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1757 0 R >> endobj 1760 0 obj << /Length 1761 0 R /Filter /FlateDecode >> stream xXnF}W̛ u۠}XiQāA+0M$eGYiReJgp.g0b@u.0=k "B\bJ+\Pt}wqOF=]_%~3Gň»ѧϸ⺂Qgn ]n?7 /O+` CƘXAL7>zoۧˊ0s \[\߈ e EMtpJ"a.JS}4[["y9IriGe CZ2314%P9QI߬tdrg77"\xH4/0Fղ(&kP#F\iӁ7r8'hK'$_؍wgR!8Dz 7qL킝E&E ؖd".!xuM0l>4نOm+쯤!"}X|{)Ţ/0APĿr RBc{T~?>' fJTĄե9"Gn~*2x)~ha.sW/M$1C= K: GNNa2~%>(*wQcGfS F?> endobj 1763 0 obj << /Length 1764 0 R /Filter /FlateDecode >> stream xT]O0}ﯸ]W'%WB ,AY`V!{}lhbumN{oOOzJ(jg:خ y-1 sQj&WpUP?Cb8*V9< ܐB !E*qD5"!ȕG{(e庮1oO'@nt!x~t =N˨N;[wTmhxxܩc9 Uɢ5)o>@g|"BHXƓx "5{"Y[GiUS* kEzS#G# oY0C&f T]:g \[q` Ê]lJnB+۪)+2jd j2ii*A ~۩ EʣLiԝ-N(=ìai_pqA;2P[P41G?VUwzᠿ endstream endobj 1764 0 obj 431 endobj 1765 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1763 0 R >> endobj 1766 0 obj << /Length 1767 0 R /Filter /FlateDecode >> stream xX[o6~8oYMvOYn]Y) Ţb!HtZ6$Fsx)cq B`;]>p>sj(oo~g7DϠPm383 wϣ`FڵB@HT@LWh~jFIj3:Z`;[bEp"S(Z #Sa^mz_pPQJEw6Y^ݐ&u՚qS o$#24ӌAgmeE Xn9vIQLybtw: I Hᾲ$> N&@'݂jTzU1`B bG落edHh.(is0,؇HF-TuT'e #&B֯<'jwYIJcl*h2^ll:g4?XPX>.0k:͡>Y̨Ҵo!/gpeYD+G=\{y~Ӽ'JJ4Ok|:'2 $ Td O#lrU27 [,' UYܾӈB+ cX~H60W͘ے U:%"PhQw1:YQeeZ lO8lh(^bjSȃnٔrCy N@$bA^fdS%y-wUoϼ\d{[w&Stp>y &A퀚?.')<1p[pÛ_CCŒs㒼t\sqUy*TXV1w,tz:`s”$JT3HfD!ˆ@RmC?D)q.m×T0`7 K endstream endobj 1767 0 obj 1291 endobj 1768 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1766 0 R >> endobj 1769 0 obj << /Length 1770 0 R /Filter /FlateDecode >> stream xTQO0}8oj2Ypəl;YE!kܛE(O˔>8zzGₚvlC{X=="C p} ܱh `}S;bݎhr_D3rucK/r$+m_Il-qG"y<$:RkIU3@ҚW5W\h8lǷ ج\Y-0F)u#%nbVɄ`_ܲpNUC\~idVF2q/VD~fNHR( F ZB(Rl:+W:}3ǟQjK1Pēļ~~R'9_=+ULt endstream endobj 1770 0 obj 472 endobj 1771 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1769 0 R >> endobj 1772 0 obj << /Length 1773 0 R /Filter /FlateDecode >> stream xX[o6~8onU,[n@,)Ţ!~ؖME6 ,w;7_F (6f/ACL$ ;]>p= uo۷׿/w(Qx?GcW4--"Fvt;4yV4Ƅ B"q?չ>na_ߦ`hSO6.6CH+upJ4պBAC)0Eطo3['鼶%I R̛d! A2b(C[&<tV&X`q^cWm,m 76K Q&PD{[CZ#azSg[ iJ{J%H" t0Ή0H>;7v5?>$d@hN:nbڅ<˳ s,MPE5~إ|O0 X-0YND|'`SdS8-[0 ^\͇V٨N %z@W\8cBwvy AQ`{R\:!'uxLgx0̦F(}?edQ(]n%Um'8 Ɲ1<2Ng\~Vc1J׽BŚP٬- iV4u*5Y2 '7M9)Kt[(ꠏ!eջ̣.\K g8NCȰOY\蜞"tN,՝L.:!f S@mzoC7 d%(i@^Kuǥ=W.Oܿ3jl>%|'!7qоPI(Lh*Ԍ0qO'?t468xDmp]LU a".}„eH< lB 0ST9M$XgyV`l.p ;9UE-!ne0,rJu'&PwbhY r;ŶOG a8aWpYÀ2B1gCy`#?!W;#SI`0)BV40ޑ|$VX:!lٝRs2ǟGScfnߏ  b']L콼Ϊc endstream endobj 1773 0 obj 1212 endobj 1774 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1772 0 R >> endobj 1775 0 obj << /Length 1776 0 R /Filter /FlateDecode >> stream xTMs W[CT%MOi&鴇Lh$!ˠ_GRKMF}, gUq@; CB8 pB}eW9r#fm- ~{Cݻha^'y!Xz2uAVYKR?"aIO=d?af/՚%d̜=BӻVKpV;o5S6g'o7h~x|uz3'LF(T;~h̸msQZ1̈́q?fŠ`ڶR[p}w4.`6jD %v4_3{^U@#ᔗr/&%FOB'Ŋ7b]Ђ|CvreR9mafP7"]J G P8qN`Ts3% *m&u-ˠݣZI#sY`{w!HQץkD!ȑCn2P!GWlj9~Ǝdk]u/گ endstream endobj 1776 0 obj 503 endobj 1777 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1775 0 R >> endobj 1778 0 obj << /Length 1779 0 R /Filter /FlateDecode >> stream xUr0{lQW c2igz Ҍۊp}%d0/M1ݷO;Gue!L3yQ xx رY `{BcYfu6 ihЙx.\CF-!!̽1?X% /g2.dV; FAW #Tl[aZ(4א?o찆Pha ՠDKJ˂Vo oN25Km0KM`hywh_tP'{K9ہ`>| v6Mg𽞘^X ExNC]?J endstream endobj 1779 0 obj 575 endobj 1780 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1778 0 R >> endobj 1781 0 obj << /Length 1782 0 R /Filter /FlateDecode >> stream xVMs0W-G``88j-CG);Jƙȳ۷b}D-\Pȫ~#)0DHhb= op={o>7' Fg6CԧKj0N7 &;i@ YbTIׯ6wD.վ[F C헣@]pWmP`ZYiQ^,QH#RQ0&әOM@RR?H~R}S 5td SzwJش\4OQN'z) T( b$xf+Y 'S{%f}\-ғ*Ys~j22 i  *&LS|D2FZ#uSMSvYy4VFJ@nJB+2JolI!̑;K:Y⥸- ӆ1yXH:3mqE|puu^~o_Iou|n`~ ǃ0 + ``GgVg¨ endstream endobj 1782 0 obj 677 endobj 1783 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1781 0 R >> endobj 1784 0 obj << /Length 1785 0 R /Filter /FlateDecode >> stream xVMs0+ʱδ4f: Vl& W饉X۷t8q *p ,$#pbnq'QvwaCx8YHG>FW6:>GUEv0y X%!FPUpjks[Q+}enϻ:;~9 to!0q]ƘmYZ6kmV9Kݢ\AFJQ0&ϴœYt~Ry@ZZ?\4$4M$OwUS4TL/b$x&DJ;N(C1JLeV[rK4V* -+updd.UYniTRܔrфiØiA&: xuuLkd> endobj 1787 0 obj << /Length 1788 0 R /Filter /FlateDecode >> stream xUMs0+c3m=tiiCb3L}W|86`SA̳޾ݧ51xEjI=A B`> nq3vdg:D5 '߈uw5J(cBtl$Z}8D9ܼjID2[xj㯬ګ6V_Io!ق[wpJ$ծCU")7fc;s~^5$$Ɋoea~%Yjަ}>' JtJ,mC0h$O嘠p .Umn 6FRFvJg<>RirՑ/}lQ}% vĮNaUĹ9xtlVMk8ʡQ^VP&M~g첮fcnT6Kqv و]hQD'ۑ!uzg.N)N󥳹.2;`"v;ׅH$}9nYX,&D#0M%۷lӅl? 1h?3ÈLKt(Q{sY0up1 endstream endobj 1788 0 obj 581 endobj 1789 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1787 0 R >> endobj 1790 0 obj << /Length 1791 0 R /Filter /FlateDecode >> stream xUMs0+$@RʹЉ=8J|88&c1zvޣ:sP ܻ0  B>a[~Ț݇د-~xC]Xxp=[W{y>@'k"R2I8S W]?Ԭ!@ 唽jWM~d;~ih5l!р{w80$աCvBD-[}~^LMH$k+Rm:f%0YAEHiOdL r]^jg w@Dqb[UOU3+(! lI^ʀ2N|dѾN /H(m /ϋRnr2[].jFĹ^֞&!tnɐ&5mqEy'hq` ~t&ERd m]?پiia`g>1e e^.?4;kO(v? ɜzde(LdN®/ endstream endobj 1791 0 obj 574 endobj 1792 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1790 0 R >> endobj 1793 0 obj << /Length 1794 0 R /Filter /FlateDecode >> stream xUMs0+ʱ3=tLF3H4=51y}ZOl+pA!.FS`)Dh`ᖅnqW=7Onm!ݬSEku[oK0ǹK|u 0_!FPp{R=zrk̿y'2BX&Fj5 4;m!ހ{wPc܂cvluHM6Fq*SI]=2[F#)aLlI `$H_ |7HҼxKUn~|ZsFscs1o_T5b##!B O%@(C>~ʼNV}9 #6NC6VVJn F*i6`WLʹ 5diR"3&+"jVֹYeR{ٕ+`DB#$+Lu3PfK(WMAA;NK(Nڽe.0h%zKBL%p;kvPFcx7-p̩K\B0N&2 ~eWtJ0 endstream endobj 1794 0 obj 602 endobj 1795 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1793 0 R >> endobj 1796 0 obj << /Length 1797 0 R /Filter /FlateDecode >> stream xWr0w.BYvE'OH3B$G@}%ADxϵ=^ qa@}d.,!}ha8I 0}̈ . WRGot_BVi$IBSU ~Q\*V~ ըZR!@c 6|}!=`}cJ^jY!j4|WYswjA  a]Ձ˷˂GZ7!l2 x8 pv %PS?5OE&-e]BnLI',NhlL hgZ4|'A 5Q]ϴk)xy0N e& My͕7J&Idyşxn K:_*f*@OL6z䖫(pSkM> endobj 1799 0 obj << /Length 1800 0 R /Filter /FlateDecode >> stream xUMs0+1Љ&= 3+WƱMK㱘oZ: y`8C󁸈z YxX{y{kf ?ŹShp>@vf#!MiÐ:Cx 1Wx FP }]vU¨newv7SW-#U;3LJ;T}92 4o!n; (F\ծCU@1fcꦚˋv]6ux)> endobj 1802 0 obj << /Length 1803 0 R /Filter /FlateDecode >> stream xUMs0+u%B9vC'nfR 2fI}%>l<41y>WׅYd pw &p~рY7{f ?Bli4ҸV'XA"rC_<[%q-g|k}MUyJ`S_+ZN+vH6Wf-$pDuH*4(wl|./:+6!)åzRa]֢F،0.ThmC:@C"U'S-|:Uśn g&"kb6,ߔISMtג&ʞ~b6Џ V[+ũ->Oz㣛E!Њ` Yl`t\oh:1IEj^DZc&&*(W=GPaenA?('Sv7Г<;/ ">؂1rmy98Z/ >aƘ޸ )cßQ41f9~z CHs3~|aW endstream endobj 1803 0 obj 571 endobj 1804 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1802 0 R >> endobj 1805 0 obj << /Length 1806 0 R /Filter /FlateDecode >> stream xUr0>IPʹЉ= p}% N.Mbڷѣ溰 ҍbB4nX-@#w[ w{gй{MxzFUyCXzc(BxKp_JΤ07p櫪eΊ%V_i9e3Ia+ki W €y̶*6%:]9)Nh$i?F9"5g!h*TPDbODMRIȁ[+zl9y;9@{$a|DSOQnu;BDHʐE i*)u8|T;u7Cu FG>:6J ɴ9dIO{e~'K=mdH3ḴӲU*@#u0_$:yq}sp Co endstream endobj 1806 0 obj 565 endobj 1807 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1805 0 R >> endobj 1808 0 obj << /Length 1809 0 R /Filter /FlateDecode >> stream xVr0wdV%!ʲi<<"d,۪18W`iib{,t{t;rC)$Ka#Q B k6?}cۃ92gF'6ګk#*mf޻SxXss#r0^7YsP bedqv j}B_j/+}UʪvE*(FC9:4-M^DZs^<$"0t^E5c2[(? gG1!kпR@n~] P}:@n9z/ =KpOMڶN5CTR TV忺x80ڪ A\6b YYlYvK=l}#a=($O 8^4dvǺ3הIZv=C1bs6@h"""8Y7͋fɽl!2p%t2 3&pi&j[ LU;*Z JStEx(Rgp2"'K[[vFw='`xlMvwcxACs]%rQ{ t endstream endobj 1809 0 obj 718 endobj 1810 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1808 0 R >> endobj 1811 0 obj << /Length 1812 0 R /Filter /FlateDecode >> stream xUn0+b =u#44(dvFK8hXknI,Ô<4י]b poQ*s ܰ[ `yv}+'q875 N#^:Q"rC88g(B+r] gʾ1\4%¬:A7Vί{$um-$kwC"M_:dJ*D1YnyQ%y#qGvK3A0(G DTHYu&4/Q  ]92ߐ> endobj 1814 0 obj << /Length 1815 0 R /Filter /FlateDecode >> stream xVr0w.Bl颓LH3"䘩Dgx8a<41 _s=::ս w004p|pB`npg=k~~ f ?=!]hf!rN|Il':0GQt`]|a<99H܁w4&K#5Pؚ֝Ys [669P8Z™Q6@-meSC˪lJ 6ԜIn%(Z'5HBX2%dRT'p<H@#"tgV)XkNJiVCR;&Vh--Ie&43{n 5&Ᾱ$:-֫^M]'05k9%"uM-zuTZu3d>M]|rx\Lf71MD|/HX+ JOQz.P߆Cם^sxtԡC]8ܼ { endstream endobj 1815 0 obj 676 endobj 1816 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1814 0 R >> endobj 1817 0 obj << /Length 1818 0 R /Filter /FlateDecode >> stream xUn@w.20L}]TqEY6yx;ñSeXϹ܇;6וqA!Μ]"ef{W؞6Oqo!?l;>9wM i[g10_7 kmK+<~(ܽ*C~¨Բz}Cx-#eh5P<͜V;PrWK]͐&A2Ȝc͜1nESSDEB4hIIʐemXFtK\d,eebcbU Z}K8Ob@Win3W7Qp .g{Y< endstream endobj 1818 0 obj 603 endobj 1819 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1817 0 R >> endobj 1820 0 obj << /Length 1821 0 R /Filter /FlateDecode >> stream xVMo@+ޱ=d9jPō"QcloYp0`X^̼7;ҲP."dmA%|,;m,^PCt+f߽ܣѻjkYO}Q(,s͇B@J(| 7PYy)u柽i/lY+Iid]<#S"1W]QEE)1SrMB}BtGs™0]9Y HDq_$9hsSjh^;]Vvaz>HJ0>Hw^l8[DHGtv)j)||PuD!5% #<^1TPj ]8izp]AI(KZ w@vl\b#Ûjetj-f"Ov輂^Q%m9)b:4z]>"LP5"!NScC{Xiܘv@V½)Tg#!k3!³"̨&e QӕURI%Sx?f(WN+,]e\gs!59;gSӉé?V=VEF?3Ĝ(Nf3j?+ endstream endobj 1821 0 obj 656 endobj 1822 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1820 0 R >> endobj 1823 0 obj << /Length 1824 0 R /Filter /FlateDecode >> stream xUMs0W+ɶaatQOk;{$G|3^< h+7 ͽ]Q x؇h ,ܰ,{nc=/>{w]Z<ׄ7b _6>} "īgk$QL87ߔ9!+'Jw>ƽr^j:e];~ h/!Q'w80$չCvDD彺ަ:Dи3ڕ̄&ƉI}JI$&bfL fQJ fP Ue, )*Ӈn+Ӂ1I$y*mUUNX!}"E$eȢ4\^8'>obL:M:K}AȖRLro. 'Yָ If<]&&AHr5ar*Yj7>T҉lJ|.}~[|Z^kUTbqľ YcV_$5S|-]|aC5җsBD#sxHڿ endstream endobj 1824 0 obj 553 endobj 1825 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1823 0 R >> endobj 1826 0 obj << /Length 1827 0 R /Filter /FlateDecode >> stream x͖r0g6J36FA18D} T曰Saۘmkl[b?C=<蓉\wλ9!̼!\h™?|OM^NQQ%Gyãr^lo5&w+$q &sCL^:dU&o)|\^V,bRcR&9@0(Gf6gNM}N4+4;dL n[NGr lz> endobj 1829 0 obj << /Length 1830 0 R /Filter /FlateDecode >> stream xUMs0+BNi8aC#L͇%4+>0\bv>٭Cua!,2gbBz.nX[ vǦ}|OHwN# ãӄ7ά')mVJ Z>[˥sOJIbep ;WťQ{;j9eoYNY÷p;qձCU ( !5Ń4\ qgc/rB(V2&E0/D?U9hUn*,6ʫN:K=q &S^&5UT-=WPʀ iܩq# x6!-&楞p}JyZ="JXZeB$ZkXX- 5E6-'z;XLj9HSUi"<35ct*II[l!t,5&-rHθ?zմveO*e'A%J+m% Xmtf 1ތiֱVla{di(s1Ҏ0ICĜR(qÓ9;;_U{(@6 endstream endobj 1830 0 obj 617 endobj 1831 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1829 0 R >> endobj 1832 0 obj << /Length 1833 0 R /Filter /FlateDecode >> stream xVMs0+4rk3M'=x (6q++=51 /}ڧgR16s p4D] 5`/ޱ>>؄pw_N |wM46qNnw:575p>_@AZ˅Rw')allmV<%0/uu[pR-U{WϯW@wupD_+dn&E[_^VQN⤌4Q+΀B3@b3+bx!3&1,zH,͜Jo𴣀DyU@6_,/rUE+A߀ ?޳>-x4Au,GjU`~ɒ*O{*>Mރ^X|vi|=@ [@JJ9ilIq\L1_ :/tVb]Znn3veϳb4Ki8F3=d:MS0m{qQt]#oXяW89> endobj 1835 0 obj << /Length 1836 0 R /Filter /FlateDecode >> stream xTMs0+V!I;C0!J`b#ȸ۴&ƃ~<=5*xb#Qf3vk aϠ]8@-Iz NiS_b} ܩ#)CV@b+̺f25[Uj¤5+MVF'1Hb"w5v|D:<4#RC#@r*s[@jW륩M׉Pa(0 z*:>!LUEqK~,;'${#E|fv]\*!OY|pSt*- .pxHM}ĸu OPgyyA&3.(׶ͯ]bIa$3>cj 6Yfao8>P׷(!nGGC9?pdqo\ !wV_= endstream endobj 1836 0 obj 528 endobj 1837 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1835 0 R >> endobj 1838 0 obj << /Type /Action /S /GoTo /D [1639 0 R /XYZ 72.0 720.0 null] >> endobj 1839 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 203.45 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1838 0 R /H /I >> endobj 1840 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1838 0 R /H /I >> endobj 1841 0 obj << /Type /Action /S /GoTo /D [1642 0 R /XYZ 72.0 720.0 null] >> endobj 1842 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 206.23 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1841 0 R /H /I >> endobj 1843 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1841 0 R /H /I >> endobj 1844 0 obj << /Type /Action /S /GoTo /D [1645 0 R /XYZ 72.0 720.0 null] >> endobj 1845 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 204.56 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1844 0 R /H /I >> endobj 1846 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1844 0 R /H /I >> endobj 1847 0 obj << /Type /Action /S /GoTo /D [1648 0 R /XYZ 72.0 720.0 null] >> endobj 1848 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 213.45 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1847 0 R /H /I >> endobj 1849 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1847 0 R /H /I >> endobj 1850 0 obj << /Type /Action /S /GoTo /D [1651 0 R /XYZ 72.0 720.0 null] >> endobj 1851 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 203.45 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1850 0 R /H /I >> endobj 1852 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1850 0 R /H /I >> endobj 1853 0 obj << /Type /Action /S /GoTo /D [1654 0 R /XYZ 72.0 720.0 null] >> endobj 1854 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 206.23 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1853 0 R /H /I >> endobj 1855 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1853 0 R /H /I >> endobj 1856 0 obj << /Type /Action /S /GoTo /D [1657 0 R /XYZ 72.0 720.0 null] >> endobj 1857 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 204.56 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1856 0 R /H /I >> endobj 1858 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1856 0 R /H /I >> endobj 1859 0 obj << /Type /Action /S /GoTo /D [1660 0 R /XYZ 72.0 720.0 null] >> endobj 1860 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 251.47 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1859 0 R /H /I >> endobj 1861 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1859 0 R /H /I >> endobj 1862 0 obj << /Type /Action /S /GoTo /D [1663 0 R /XYZ 72.0 720.0 null] >> endobj 1863 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 250.37 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1862 0 R /H /I >> endobj 1864 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1862 0 R /H /I >> endobj 1865 0 obj << /Type /Action /S /GoTo /D [1666 0 R /XYZ 72.0 720.0 null] >> endobj 1866 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 263.69 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1865 0 R /H /I >> endobj 1867 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1865 0 R /H /I >> endobj 1868 0 obj << /Type /Action /S /GoTo /D [1669 0 R /XYZ 72.0 720.0 null] >> endobj 1869 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 222.04 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1868 0 R /H /I >> endobj 1870 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1868 0 R /H /I >> endobj 1871 0 obj << /Type /Action /S /GoTo /D [1672 0 R /XYZ 72.0 720.0 null] >> endobj 1872 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 236.49 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1871 0 R /H /I >> endobj 1873 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1871 0 R /H /I >> endobj 1874 0 obj << /Type /Action /S /GoTo /D [1675 0 R /XYZ 72.0 720.0 null] >> endobj 1875 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 257.04 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1874 0 R /H /I >> endobj 1876 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1874 0 R /H /I >> endobj 1877 0 obj << /Type /Action /S /GoTo /D [1678 0 R /XYZ 72.0 720.0 null] >> endobj 1878 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 219.27 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1877 0 R /H /I >> endobj 1879 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1877 0 R /H /I >> endobj 1880 0 obj << /Type /Action /S /GoTo /D [1681 0 R /XYZ 72.0 720.0 null] >> endobj 1881 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 220.93 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1880 0 R /H /I >> endobj 1882 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1880 0 R /H /I >> endobj 1883 0 obj << /Type /Action /S /GoTo /D [1684 0 R /XYZ 72.0 720.0 null] >> endobj 1884 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 230.36 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1883 0 R /H /I >> endobj 1885 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1883 0 R /H /I >> endobj 1886 0 obj << /Type /Action /S /GoTo /D [1687 0 R /XYZ 72.0 720.0 null] >> endobj 1887 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 231.48 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1886 0 R /H /I >> endobj 1888 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1886 0 R /H /I >> endobj 1889 0 obj << /Type /Action /S /GoTo /D [1690 0 R /XYZ 72.0 720.0 null] >> endobj 1890 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 209.82 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1889 0 R /H /I >> endobj 1891 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1889 0 R /H /I >> endobj 1892 0 obj << /Type /Action /S /GoTo /D [1693 0 R /XYZ 72.0 720.0 null] >> endobj 1893 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 265.38 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1892 0 R /H /I >> endobj 1894 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1892 0 R /H /I >> endobj 1895 0 obj << /Type /Action /S /GoTo /D [1696 0 R /XYZ 72.0 720.0 null] >> endobj 1896 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 234.27 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1895 0 R /H /I >> endobj 1897 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1895 0 R /H /I >> endobj 1898 0 obj << /Type /Action /S /GoTo /D [1699 0 R /XYZ 72.0 720.0 null] >> endobj 1899 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 241.48 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1898 0 R /H /I >> endobj 1900 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1898 0 R /H /I >> endobj 1901 0 obj << /Type /Action /S /GoTo /D [1702 0 R /XYZ 72.0 720.0 null] >> endobj 1902 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 253.41 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1901 0 R /H /I >> endobj 1903 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1901 0 R /H /I >> endobj 1904 0 obj << /Type /Action /S /GoTo /D [1708 0 R /XYZ 72.0 720.0 null] >> endobj 1905 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 229.54 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1904 0 R /H /I >> endobj 1906 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1904 0 R /H /I >> endobj 1907 0 obj << /Type /Action /S /GoTo /D [1714 0 R /XYZ 72.0 720.0 null] >> endobj 1908 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 234.54 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1907 0 R /H /I >> endobj 1909 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1907 0 R /H /I >> endobj 1910 0 obj << /Type /Action /S /GoTo /D [1720 0 R /XYZ 72.0 720.0 null] >> endobj 1911 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 266.19 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1910 0 R /H /I >> endobj 1912 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1910 0 R /H /I >> endobj 1913 0 obj << /Type /Action /S /GoTo /D [1726 0 R /XYZ 72.0 720.0 null] >> endobj 1914 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 266.76 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1913 0 R /H /I >> endobj 1915 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 409.5 539.998 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1913 0 R /H /I >> endobj 1916 0 obj << /Type /Action /S /GoTo /D [1732 0 R /XYZ 72.0 720.0 null] >> endobj 1917 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 271.76 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1916 0 R /H /I >> endobj 1918 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1916 0 R /H /I >> endobj 1919 0 obj << /Type /Action /S /GoTo /D [1738 0 R /XYZ 72.0 720.0 null] >> endobj 1920 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 285.1 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1919 0 R /H /I >> endobj 1921 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1919 0 R /H /I >> endobj 1922 0 obj << /Type /Action /S /GoTo /D [1744 0 R /XYZ 72.0 720.0 null] >> endobj 1923 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 281.2 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1922 0 R /H /I >> endobj 1924 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1922 0 R /H /I >> endobj 1925 0 obj << /Type /Action /S /GoTo /D [1750 0 R /XYZ 72.0 720.0 null] >> endobj 1926 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 248.42 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1925 0 R /H /I >> endobj 1927 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1925 0 R /H /I >> endobj 1928 0 obj << /Type /Action /S /GoTo /D [1756 0 R /XYZ 72.0 720.0 null] >> endobj 1929 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 248.99 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1928 0 R /H /I >> endobj 1930 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1928 0 R /H /I >> endobj 1931 0 obj << /Type /Action /S /GoTo /D [1762 0 R /XYZ 72.0 720.0 null] >> endobj 1932 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 253.99 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1931 0 R /H /I >> endobj 1933 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1931 0 R /H /I >> endobj 1934 0 obj << /Type /Action /S /GoTo /D [1768 0 R /XYZ 72.0 720.0 null] >> endobj 1935 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 267.33 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1934 0 R /H /I >> endobj 1936 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1934 0 R /H /I >> endobj 1937 0 obj << /Type /Action /S /GoTo /D [1774 0 R /XYZ 72.0 720.0 null] >> endobj 1938 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 263.43 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1937 0 R /H /I >> endobj 1939 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1937 0 R /H /I >> endobj 1940 0 obj << /Type /Action /S /GoTo /D [1780 0 R /XYZ 72.0 720.0 null] >> endobj 1941 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 297.31 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1940 0 R /H /I >> endobj 1942 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1940 0 R /H /I >> endobj 1943 0 obj << /Type /Action /S /GoTo /D [1783 0 R /XYZ 72.0 720.0 null] >> endobj 1944 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 261.2 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1943 0 R /H /I >> endobj 1945 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1943 0 R /H /I >> endobj 1946 0 obj << /Type /Action /S /GoTo /D [1786 0 R /XYZ 72.0 720.0 null] >> endobj 1947 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 256.76 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1946 0 R /H /I >> endobj 1948 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1946 0 R /H /I >> endobj 1949 0 obj << /Type /Action /S /GoTo /D [1789 0 R /XYZ 72.0 720.0 null] >> endobj 1950 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 267.87 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1949 0 R /H /I >> endobj 1951 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1949 0 R /H /I >> endobj 1952 0 obj << /Type /Action /S /GoTo /D [1792 0 R /XYZ 72.0 720.0 null] >> endobj 1953 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 270.08 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1952 0 R /H /I >> endobj 1954 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1952 0 R /H /I >> endobj 1955 0 obj << /Type /Action /S /GoTo /D [1795 0 R /XYZ 72.0 720.0 null] >> endobj 1956 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 263.42 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1955 0 R /H /I >> endobj 1957 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1955 0 R /H /I >> endobj 1958 0 obj << /Type /Action /S /GoTo /D [1798 0 R /XYZ 72.0 720.0 null] >> endobj 1959 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 285.1 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1958 0 R /H /I >> endobj 1960 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1958 0 R /H /I >> endobj 1961 0 obj << /Type /Action /S /GoTo /D [1801 0 R /XYZ 72.0 720.0 null] >> endobj 1962 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 248.42 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1961 0 R /H /I >> endobj 1963 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1961 0 R /H /I >> endobj 1964 0 obj << /Type /Action /S /GoTo /D [1804 0 R /XYZ 72.0 720.0 null] >> endobj 1965 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 257.3 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1964 0 R /H /I >> endobj 1966 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1964 0 R /H /I >> endobj 1967 0 obj << /Type /Action /S /GoTo /D [1807 0 R /XYZ 72.0 720.0 null] >> endobj 1968 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 264.53 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1967 0 R /H /I >> endobj 1969 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1967 0 R /H /I >> endobj 1970 0 obj << /Type /Action /S /GoTo /D [1810 0 R /XYZ 72.0 720.0 null] >> endobj 1971 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 275.63 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1970 0 R /H /I >> endobj 1972 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1970 0 R /H /I >> endobj 1973 0 obj << /Type /Action /S /GoTo /D [1813 0 R /XYZ 72.0 720.0 null] >> endobj 1974 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 241.19 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1973 0 R /H /I >> endobj 1975 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1973 0 R /H /I >> endobj 1976 0 obj << /Type /Action /S /GoTo /D [1816 0 R /XYZ 72.0 720.0 null] >> endobj 1977 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 246.76 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1976 0 R /H /I >> endobj 1978 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1976 0 R /H /I >> endobj 1979 0 obj << /Type /Action /S /GoTo /D [1819 0 R /XYZ 72.0 720.0 null] >> endobj 1980 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 235.65 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1979 0 R /H /I >> endobj 1981 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1979 0 R /H /I >> endobj 1982 0 obj << /Type /Action /S /GoTo /D [1822 0 R /XYZ 72.0 720.0 null] >> endobj 1983 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 247.31 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1982 0 R /H /I >> endobj 1984 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1982 0 R /H /I >> endobj 1985 0 obj << /Type /Action /S /GoTo /D [1825 0 R /XYZ 72.0 720.0 null] >> endobj 1986 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 234.53 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1985 0 R /H /I >> endobj 1987 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1985 0 R /H /I >> endobj 1988 0 obj << /Type /Action /S /GoTo /D [1828 0 R /XYZ 72.0 720.0 null] >> endobj 1989 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 247.31 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1988 0 R /H /I >> endobj 1990 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1988 0 R /H /I >> endobj 1991 0 obj << /Type /Action /S /GoTo /D [1831 0 R /XYZ 72.0 720.0 null] >> endobj 1992 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 235.65 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1991 0 R /H /I >> endobj 1993 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1991 0 R /H /I >> endobj 1994 0 obj << /Type /Action /S /GoTo /D [1834 0 R /XYZ 72.0 720.0 null] >> endobj 1995 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 229.82 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1994 0 R /H /I >> endobj 1996 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1994 0 R /H /I >> endobj 1997 0 obj << /Type /Action /S /GoTo /D [1837 0 R /XYZ 72.0 720.0 null] >> endobj 1998 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 256.2 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1997 0 R /H /I >> endobj 1999 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 73.5 539.998 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1997 0 R /H /I >> endobj 2000 0 obj << /Length 2001 0 R /Filter /FlateDecode >> stream xMW~ӋbsW-n`YT($FIHffտ*7KaϪ[!)g$vؿ~َS?~7k{Ro:>Utz۟~h_wۛ?7 ڶ7?~~;󧶼c;7m(o~7߽/_/˛?ߝ^??yT_OpoǿI>ǿ'o3oqnM q-WmXv"E!CN X6, e`A,K*U!X$/I7'ĽH\%]XN"8A06 cA0v`ǏB""""""XE`*M6"E!CN"8A07 sA0ws, ```````-oǏyUi㛼ZcO=?٨J꠺Q=>~TNuRM,;Yvd9r I,XbXRaI-ku5ƒ,,,,,,,,+YVe߾9/m:nTO{R=;I5YNd9rpI-k.k%X1b]Reeeeeee%J,+Y6ldȲe'N,Yd9r5Z, ],Lj\s0XIdddddddy?{w#{fĺ.nij燉X}[񚽶}8N?kB}|ה:R5S㻦dȲe'N,Yd9r˲eIJlbYv,X],.e)bY YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X?HX&ebX.Q2XF! $$$J,+Y6ldȲe'N,Yd9r$)enbX.ebE,eBA4I$}>C}o}k|Ͽ(7aTNS6gPNkw;ڟ!y!յArS S S SMSMSMSMSZMy敼햧Y7'X^-7iT'?h9ZA9R]+6(70000444jT6SmLj7nTS:Mu4Ik夺oHZA9ZA.4yKOLΎǗ/Þ59d<,oOɫzDToG$'IDrR m ZMZHrf?WDY>)_[I$brS:Mu$~ITo;J$'ۖIDrS S S SMSMSMSZMj5fTvSMu0aTNSz[`"9V@mz[cy!"M5L5L5L5M5M5M4yKO5wݧɠ?>гAiy| (˛X^-'5hTנA0000444jTO'^O'.ay|R~:w!O'.iNS:MujlFj;F!(Tjjjjjjj5jT6SmLj7nTS:Mu$5hTנATנrR] A9z؞oN/?}{(|)kk67'wʫ iy|0aTNSnQT-J鷺nQT-JR](QnaaaiiiiTC)_nyZ)ay|R>rS:Mu񃖓ErR](QN% [(70000444jT6SmLj7nTS:Mu4I%Iuݢ$N%IuݢD9[(7000445z؟̢oӟ,sƓay|R~|Z>(:Lu4iT'2QNL鷺D92QNLjjjjjjj5jT6SmLj7nTS:Mu$X&Iu=ITc('X& 2QnaaaiiiiTVSmLj7nTS:Lu4ILz,夺D92I^Hu=rS S S S SMSMS=Q̤odß2ߞw|'/8I;gA7'gA^-OS:IlZ6R-TNe'ղj)Z baaaaiiiTCKj+y,˛^,nyZnTNSnT r鷺nT rArS S S SMSMSMSZMj5fTvSMu0aTNSnT r鷺nT rR]7QnaaaiiiIC^F G?}ԶO^q0%_o(eua97VSZMj3fTvS:Lu0aTNR]o('յFTIuCVSZMj3fTvS:Lu0iT'7C97#y!յrS S S S SMSMS1?>9knk<?7B~ܬ+yZ)n֕<,oOu%7If]Iܬ Nf]Iܬ y!sZMs.ͺf]fYWjNS:I56R==7JNf]wR==7JNf]Iܬ yjjjjjjj5jT6SmLj7nTS:Mu$szznօ|'szzn֕TOͺjjjjj*?o(_M7#<`Z>(iy|n)rR]HrR]PNM5L5L5L5M5M5Mj5z_|RފAy-O;c<,7aTNR]PNwR]PN ^(70004444jT6SmLj7nTS:Mu$H57R͍Ts#I5wR͝TjRbaaaaiiٻ2Ɠ9zLGsڿO_^>}闷_}~{|~|9O^pIQP^-S>Mu4IkD9;夺F@QnaaaiiiTCxߴIy+W}<-TNS:Iu('5|'5THBkDVSZMj3fTvS:Lu0iT'夺F@QNk$y!5TTTTTTTO{X2'WfA?&(?ޘQjjjjjjjj5jT6SmLj7nTS:Mu$[Iu=VT#n)'[Iu=rS S S SMSMSMSZMj5fTvSMu0aTNSqK9GJz-夺q+y![M5L5L5L5M5M5Mu?Te>yz/s߿;r^Y'츞Y>)?)ʏzrS S S S SMSMSMSZM8md~%?)˛㸞j8<-7iTNR]*$IuSN븞rR]jjjjjjj5jT6SmLj7nTS:Mu$u\O9zwR]::TTTTTTTowW9'yOmkdNPWZ.ꠚ,,+YVdȲe#N,;Yvd9r$IS,םRO[j\wiK-mX;& $$$J,+Y6ldȲe'N,Yd9r$)>lr݅ .lr݁-X& $$uPd=޺Q䧗_=\YQd|P~#S~#Y>)OSMSMSZMxORϕxSByX,oL(ʏ&:Mu4IeIu] $NeIu S)'u2ZMj5jT6SM0aTNS:Iu]L9+%Iu]L9+%/\TTTTTTTCۓEcWw?kKn.=*ޟз_~{t)Aѥ]r{t)ayTNe'ղj)Z baaaaiiiTC'p+y,˛^,nyZnTNSvHvPNkA9aZMj5jT6SM0aTNS:Iu ;('5|'5제TװCBkAg.ɰ~/zϷsm9ҳiA-O˻kAyX,'5T״CBkAVSZ1(q%oay|RދA-OMu4iT״rR]wR]IuM;('5TTTTTTTVSZMj3fTvS:Lu0iT'i夺鷺vH^HuM;(7000444R/<#gKƫKcn/8Y>%_(rR]$/VQNkUaaaiiiTފ^'姷jVBwOoE/aS:MujlFj;NQH5 F10004444jT6SmLj7nTS:Mu$յrR]('յrR]$/VQnaaaaiiC۳}՝}~}}-b3ɫ=S-ay|R~EZnaaaiiiiTֻixFyZ)ay|R>rS:MurH9=tH9]R])70000444jT6SmLj7nTS:Mu4Ik"多UZ(y!յrR] %S S SMSMS޶d-n==PՕ Ɠ+O'H7'kAڟ 9'@ZMj5fT6SM0aTNS:IIN_'@N_'@N_'@naaaiiiTVSLj3nTS:Lu4iTOTOuu jjjjjjj'UOE_/O/߾㗷|Ǐ؎vN:+yX,sWMj3fTvS:Lu0iT'JNsܮz; y!۹]M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muܮz; Nsܮz;+x䨮V~wo^`wE{|o}VˇnNY7'ToTTTTTTTTVSwoS7f|˫:Mu$5T rR]3Iu$/fjjjjjjjj5jT6SmLj7nTS:Mu$H57R͍Ts'I5wRBYH5 f100044;ۓa@ʮaYCC+=o)Fy|P~@yZNk夺vQnaaaiiiTC/V,nyZ)aS:MuF9o鷺vQNkT7M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu~T7Iu~T7 ojjjjjjid+' ??}xx6qQg/xH[wʏwhIjVSZMj3fTvS:Lu0iT'K('ui夺. TץR]PnaaaaiiiTVSmLj3nTS:Lu4iTץ4@Tץ4rR]Pnaaaii8}{oO/ʁ:_D?ڳ#o;Ǒ7ay|R~yS^-VSzyoŅ8<-GޔIqMyTNS)'uM9#oIuyK^HuySnaaaaiiiTVSmLj3nTS:Lu4iTב7夺%IuySNțrR]Gޔjjjjjj}='OGO?|ӗ5߼mwɋ}ݖ_oK%˛t]j|-]ToK!S S S SMSMSMSZMt}ȸߖC7'工W工됧:Mu4I_CN__wRtrRtrRtrS S S SMSMSMSZMj5fTvSMu0aTNSu:u|'կK!'կKׯT.]TTTTTTTO?{'O/?r*~-ێ?ckeԕ!uRݥ^2ɲe%J,Y6dɲe'A,YNd9rZ,hrZ,gXsReeeeeeee%J,Y6ldȲe'N,Yd9ruYj\痡r]Z,׹erY,,,,,,)x Y^^~xOOݹǗkGZ>(iytJ7ItJNBWrS S S S SMSMSMSZM<,oOϛ_ɫWTNS:ItJNTOͯz:o~%'y+VSZMj3fTvS:Lu0aTNR=7|'y+9Λ_ Λ_M5L5L5L5M5M5M>'8^oG/O_^b_OO^|K^n><,oOo>ZNj)ZVSz+zay|Rz$y|Pz$yZnTNS /H/PNk@9ZMj5jT6SM0aTNS:Iu('5_|'5_T|ABk@Cu|/2_X{>/>mu'8{ZfrR]w5HZMj5fTvSM0aTNSz夺wTABM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MurR]wDH'rR]wEPNM5L5L5L5M5M^.~}O/><;_['ǻ"ʫ]iyxWDyXnaiiiTVSmLj3nTS:Lu4iTyrIu'|'urR])'urS S S SMSMSMSZMj5fTvSMu0aTNSΓSN<;䔓:O.y!urS S S SMSMSMS](ɡ>}s(}|7*JWKVkiy|V<,oOFe#ղjIZvR-TK!RHS S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBQL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I57R͍Ts#H5wR͝Ts',TjjjjjjꚣA9 aaaiiiTVSLj3nTS:Lu4iTrR] wR] Iu/$/&jjjjjjjj5jT6SmMj7nTS:MujnFj;NYH5 f1000044·<|2^v5۠Y7'XnTY!+;r!'CV^ r!70004444jT6SmLj7nTS:Mu$H 9z!+rR=?dBN燬VSZMj3fTvS:Lu0iTNR=?dBN燬z~ʅTY!+rS S S SMSMS]ץvN4iT'q 夺6鷺F6PNklCVSZMj3fTvS:Lu0aTNR]IuMt$Iut('5ՑPnaaaiiiiTVSmLj7nTS:Lu4IkC9夺>H^Hu ~(70000445z"(ey˗?}dpf}J )0P^-i9夺 jjjjjjj5j]Iy+W}<-TNS:Iu ('5`|'5`T׀ABk@VSZMj3fTvS:Lu0iT'夺 0PNk y!5`TTTTTTTo79''}w_O ?~+&㥿؁R~>ӛ_om?_}> endobj 2004 0 obj << /Length 2005 0 R /Filter /FlateDecode >> stream x͖Ms0=P}B&M;qbN'́f L}%>[ekի0 uf+h;pP{ ''yEw5}KK^E37SH," r?<!)E Yݻk>U!/u#|>%[RLX7]~d tm!ݡ@ϔ6;ne*BthL-վ3}gv7! >!؃Cϯ)L`*/B PiQ  A70%P]/UC~E&oF羽>g1{.ۥ D/i(֒JX)W-oYU]'LvaK# sY *uN fҭmz&0/҅[cxvY,i`) fY]֩i3L4m^m^ݲ44QSk@5v)ۋJ7/7ZLQ*3> endobj 2007 0 obj << /Length 2008 0 R /Filter /FlateDecode >> stream xVMS0W=$۲Li =P#_ߕ?Bb'NO8)k=xս9rܻlnxܢ{n]zsؚ,Wx_kn/#|CXxb×8B|ZY }u@Ĥ# ݩ6+'+k>[J.X eA_oKH5uv$dt!ZȨQvYUU&}̎ .9E-~Oc/! 'ä&{l yr6YgA Y nt\+w}Uu(4s |Ɨ-2{0kJ"sr_0"+AV.ˍ-&z7cy2Wӌ#GuRUe)j^Kۛ6$7 |,4B$ CN6fR4k2`Ẅ́Fz;X1f;c&ɳiwF6$8-I10ࠦ>|8HK'eQ < |:QәԁbJ1i;u>-tًBt\m][lj_Zڰ9#n R{Uf! endstream endobj 2008 0 obj 665 endobj 2009 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2007 0 R >> endobj 2010 0 obj << /Length 2011 0 R /Filter /FlateDecode >> stream xVKs0+fN{$ 6S+~{jb<۵-RqH H"܇X nY_p;QIJyzk b?ңٻC4C<'5oA UFa}w`VZH |T@DW!.ͥ*+/'+w>{ _YM|˦w8~%izdn)W AE)0+S:]qצl:  gRL[̆A"uONNuؔ mm2אVjk \<´@IINZy.mOUW>Q2R*QK:k);h|Ok~Ǯ/I )[U>Z,FqVu^&u^kP L$̴=ڸZ2v?[M8XhX%E|gDz}AxC N*?8dOE0Iǜv?*σa+I#Q. c-4;ǴO9 #庸yE1ܾ3 hcV|IU9W4"L;j]TeKN|Nn$)ƢȧE.0-${Lͮl|:1:|R7ݤm4c_.Q%ۄ ꎿ?b endstream endobj 2011 0 obj 671 endobj 2012 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2010 0 R >> endobj 2013 0 obj << /Length 2014 0 R /Filter /FlateDecode >> stream x͕Ms0=+ ʱ*:Q B2˚lIW,ƊlPA$KNj$]h{|df\rLb&Pc\S62yfTX( p3*L Q!4phMƼ l]K{D2_& 6P1 wMTsOCN#qy4('1l:h|vQȢF卫ꮿx endstream endobj 2014 0 obj 555 endobj 2015 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2013 0 R >> endobj 2016 0 obj << /Length 2017 0 R /Filter /FlateDecode >> stream xTn0+b =5,4Y4Q~}Zxzjb7<kh# +a\1ܱpX_~A8> endobj 2019 0 obj << /Length 2020 0 R /Filter /FlateDecode >> stream xVR0}W#̀-7J)N˥!L8 !6}W;1o89k=gW=};(!x u`p5.4S;#sXf ?ܣp]]uv^n.Z7[}V M|!֡!\hW;4(ڽwe+c^_E\]rƥ:8% B8UQSJE#tVܘ*T,bڈAb3A)D{ȄOB^Uŀs>YUHu;R0SN-wTВLQL˧iUҒhjmqA$HQgfɊ]Z& B\ {ȁxbMS@1j薃QS%T73h:hl `>N1.(ӎv>vc.>dqe/o D+wɩMI"J_ZB!<|I{NƾR{~6G8A;EY$\{mn}QyeUuR endstream endobj 2020 0 obj 714 endobj 2021 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2019 0 R >> endobj 2022 0 obj << /Length 2023 0 R /Filter /FlateDecode >> stream xTr0{LQW+$!3n9FȸJ1Ĵ&ƃݧe# (MoAq\2X-_߱nw~n vKutwǰ\GDC}΢OW1plqVh NcH nLӪxl^֦9ktU+8}jm~mȶwkhzB dkV@bgLYٟf2i9Wj?ٲai^"x2I@䮞 APyBz(4#Rjd?| 1@L0NB9w;᭢9{*dIx U .lYꓱ]Z2RJi̧HA|b]at.KRoI|cNo1.Yjh{> endobj 2025 0 obj << /Length 2026 0 R /Filter /FlateDecode >> stream xVr@}IM)Jr}0(K 3}fXr-TBj~f0pɔ2~8?=.8GB"TK Jm\xGg]n#_~ķQt;)ư\^߮1A(p vUu_;}|: endstream endobj 2026 0 obj 680 endobj 2027 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2025 0 R >> endobj 2028 0 obj << /Length 2029 0 R /Filter /FlateDecode >> stream xVMs0+ |GidBC9fj#I`㞚{+-Oׅ- } #`-n4^P?c޽5 ~e@Kp{!< &%BTnIsB2Bjb"nϾtL}~ɷ2[`ɯ ǯ"M]j[vpJ.C8UQSJŚdʗ$/\VjbMee  sxD*T'Tbs1t1%tMneƹj>,Gxx$;(<;|RVKW T`BKUu4FXt)ZO?lcat&bzUӀܲQ=je3#Ci{pњ5ΔS }ZU _FSҬޚ V*7pwF'PV`|44VbQ.h!$e{TSpl"pR!Iy8(1_?Uvt.UAc„"ucUq0]!8j<,t'> endobj 2031 0 obj << /Length 2032 0 R /Filter /FlateDecode >> stream xVv0lzPv}]$']Y`؜pN~}G jb| ljb0ϽFA2aDYE6`'θof_ؚb ?#ŻAkv ʻB^Ulއ{w%PJED>g9\9SYedeto縗-e{׸l/F@} Ƹe#D]3S%!wĬrOOʯ17Pb-~A.crS8*mi +H ȵ1BCf٣N7ip3p=:B? C˅l׾z.ʕ0dTȢ>2 -Gr[I-Q (MҴ(Jaރ+Tzꢶ7RC ^'uVtH,oVeUO`֙r]5{Tt8 f.E9&'q!|.oa\t _@x0X6ɳP.m; A}cw_zG%P@E!݁HY%Mđ^9BkX}k)PˢֿǙ(,ZjGA i6_+A MĶO> fEZ%~jB~0 cx endstream endobj 2032 0 obj 671 endobj 2033 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2031 0 R >> endobj 2034 0 obj << /Length 2035 0 R /Filter /FlateDecode >> stream xVv0LQ+="'9"<r\;lcAwfta@{e8LSykc 9<KEw`]WnlLt7YO's(|q݃Ӹ^"MFa|w70 ᬣV( W)xpSxflaTT\>AV0v{_W'I-C ز#S"QW RFE)[b2U\RO_jYYC\N82̸DR]H>G\# 7IjЙ~ekt"ctZ7-mg?ݵTWU4}T.iKmtT:zo#=ljUGʡ\dԠcu8qA\+7?J104s% {UMyf\fTsCupK<tѕ%w:t7m흕ڮ*6mZ%sFZ$8xwY=| endstream endobj 2035 0 obj 701 endobj 2036 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2034 0 R >> endobj 2037 0 obj << /Length 2038 0 R /Filter /FlateDecode >> stream xVr0w.BN$.,m&_馉 pH'6Dž0ͼF@P`o w1/}cY}x1b?Ż0}xx*7 sC佻`f{jD>RЇ1*BkUm1+}>GG2B_Yu~uZ;t{,!Qw0 C̫%ƘĬb./ i'7̜)aLLph;a1$d.cJKaPJ0UZO7CGu  UJ`jAٙw139̶Olb|,Js)fÒ횛E:]4:8uq|GPk[mom7/wQxx0¬v endstream endobj 2038 0 obj 674 endobj 2039 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2037 0 R >> endobj 2040 0 obj << /Length 2041 0 R /Filter /FlateDecode >> stream xTn0+b]RF ی-Z"uӯPȋS'y< ?h#`[ !b"$ca?@bծ~>~ 'K9!l.\O & aOwW!pao4,3) Hr{smݦfj{{ɗS2حvJ#Y[@a ܹ#A TW@rkLUS{yW~6M50+je;?pK#Ȼ;9F1cc"wIs!BA_ܦ)4WE1]M%Ԓ4gO2>H< pK=qi?Gu>$铣#%M)3i&f\/ta?X1 !Tba_U^J+-l4*[|o-mϽ\2,tt®/WPÞ endstream endobj 2041 0 obj 550 endobj 2042 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2040 0 R >> endobj 2043 0 obj << /Length 2044 0 R /Filter /FlateDecode >> stream xTN0+r8j$U!u4NCcI+q5;cBsȶdc "^8X),e,{(5pXJ*D+-ttC̏Ei8uN_{d53Q "l]Bn=>q I>("!$[X^im]:{n^Ab`8!񅝔 aٙXB5[U~Ρ7 Vih;&͌TFɆ³LW&UUUm&TdZ? (z.ku>1?srRҶbi}|1`휹n|, endstream endobj 2044 0 obj 340 endobj 2045 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2043 0 R >> endobj 2046 0 obj << /Length 2047 0 R /Filter /FlateDecode >> stream xTMO0W#>IHjDE=BU떈. Bn I[[#x:ϏL{m$LWh *ۅDHL nY!a\lVc?{Cͮo 3k+6J‚ǯB161<(+i#Xɕ>d]pz _vQT N:n5[6Ѽ x7>(5e;Th ՙ2߸i(Jg݂jj[\!\ EFy>-m-_d)O41n.+T,nlVٺ:T[W0[9%1TD13{^iYEtuYT3ɼSGϡ%VIT3Zz~.I(E+ZlVօ&R4 *5<c4E]cKlCC^vʹ ki7c} v_'#E w6W endstream endobj 2047 0 obj 474 endobj 2048 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2046 0 R >> endobj 2049 0 obj << /Length 2050 0 R /Filter /FlateDecode >> stream xTMO1Wc{V+;l6k{ e3 Y0_1P܇X)p=øI_q{" |'W7x Hn$"!,yE|+!Tgi C5CD&h*jW'~h;fNoA. ?N_*|ãh2t>*;ep*x:a ,b]dR;.]64&SDP:lLЧ%`RQ&#)_\gREHvug[Xfh[g$ Q]dRHLT_כz3EJj6FrikDI$駧3b`kܮvNRƨ`z,bk%;݃2Φeo4(=?MTjģGr endstream endobj 2050 0 obj 466 endobj 2051 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2049 0 R >> endobj 2052 0 obj << /Length 2053 0 R /Filter /FlateDecode >> stream xTMO0 W$N$n J1Q@{~ Z6iib9/L}$RbeD&n!/e3vka,cG5&]x&"W4bB46p<(+%!J*=DUW;.YT gNj~u7~ckpܒC[-R(u6<K~>Mu*˪hڦqR(% 4y63@=ϭv` 5` "Y,߁?!q.d z_qgT^z ȍ1mm2)PE;:gdk(͸t{P/szNI(d6IX҆1BJ;n9KkZ]w-(zFicU^mO!}#x>D {bqϪsz endstream endobj 2053 0 obj 471 endobj 2054 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2052 0 R >> endobj 2055 0 obj << /Length 2056 0 R /Filter /FlateDecode >> stream xTMo0 WFI>r[nA E:XNmgC((aI"Hp ^A[AӂZP!+#&b;+Wwl݇saDGސ{D_ҹ o|D>7kr?bʁ&e&IA&e54Yn묙'E*d[~m4kg~\>2 `kPܪ(EY\䥛ja,nWt H0%ʌѼN~N: W1(N-cA8&Zٶ*2-7@5,ݲb1A[/_Veͮ{nӲz[G99qGc:.(>[jeY}ir[`jsì6*azk)1lP}J<,wZ52:CJsLdƢ?bq8g`2 1G;\87nOQc VnI82&9j2 endstream endobj 2056 0 obj 511 endobj 2057 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2055 0 R >> endobj 2058 0 obj << /Length 2059 0 R /Filter /FlateDecode >> stream xTQO0~ﯸGI^ۭ]yDM|#.A AH {6pM}}K&>ss1FmHDeHp@3=K {x">Y cW&2f!u#m`y$Q(WҺKBjQJ 0#Ianl̀}NSȓr4"O$-GiSrș#AvbA_i(Ejw(#Psk"kjtmү8=xYFaJB<@A_՜JZs"F;H(֐|vBⷤq. Ŧ5A5bXV͸> endobj 2061 0 obj << /Length 2062 0 R /Filter /FlateDecode >> stream xTMo0 WFId[݂ء)u`c([v|v`*$D @z/1VBV 0B" ".c( z]r!9pɮo'A F'2p%$\ϮW@y3N*UB~Jnˮo$ g9mӁ2 $rC=Rr5ZHQZ5-5sn*ڢ DKHg*<00ӍIN'q06]X\ʬ܅n]aŭ۬RM[ 1+*'3i.͔WZ&N Z0-r_o!Ԟ[$jz9Rz+b(mJB> endobj 2064 0 obj << /Length 2065 0 R /Filter /FlateDecode >> stream xTN0+f HĮ" @RAӒ $̙?3Ha0`%(Ӈ6 2.5vqC+sn`g;5]gxkDOqC; i3ϝ@D,8|W{c!-P@~N^J?0K!SHz,O3엏MJ-zH/q=AEVr&l4ڦLr) M|O+{aw*nS+8FP5;b(C,ߺ^ -"]*J#] &EnٶފV"@ýuZtm*3hH]%t4> endobj 2067 0 obj << /Length 2068 0 R /Filter /FlateDecode >> stream xTn0+ $%>|K6@oF0r$EKJr"?[Q g9 @jq0N¢dO=&HPz \ȸ X8 !g}Z;(s3"r}J{gWc endstream endobj 2068 0 obj 475 endobj 2069 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2067 0 R >> endobj 2070 0 obj << /Length 2071 0 R /Filter /FlateDecode >> stream xVMo@+/X6~RVMCEY;$; `o|jb,޼c0]Fw] `-nv;{BtoCtsp ?"1 c6|P}QQGoY B6J+5I )\l ./SC__A)t*a75o8~isk{epJz:x FD'ʪ*'5ڐܖוoZu雂3c'L2"( r\ q[ailp. 6(6k6/ZxZu9-Т3=QKA ԷA0ff܅IGnR4#E/ U1c(E<; sx(& /xh W#Lj=W54Ūbw-yq4%L3RޕEmԡ('SOznM?)nLuuBIZ޸ieW- }+mZ3[9Z 똘- ?5i'S3P=Tq?GqLa;UGE4 %}1vݭKX6Jb.1ڭa9Y<_1ߢ0tgVo,, endstream endobj 2071 0 obj 704 endobj 2072 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2070 0 R >> endobj 2073 0 obj << /Length 2074 0 R /Filter /FlateDecode >> stream xVn@}+1`HQ^RUXCETu\MEgaه-JsHCkc8h$ 8m!{_(n];>SxNl v35X%3A0.5`IpCUb;=akc! b|G=WEZ `?ZK4ŕ' Cw3 uos~uME6_YM  گ<_VY %=+ wG v|m_HN5v47/$/`9qiƦe{U ; <+L&,A $tz08 CH=;QXt۴Mf臒z~kZۯ[cl^/E xg(Uu?o endstream endobj 2074 0 obj 773 endobj 2075 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2073 0 R >> endobj 2076 0 obj << /Length 2077 0 R /Filter /FlateDecode >> stream xVMs0W=D՗-+~3iLe{ _Y#u/~(o)QXSO (u96׆䶼y\48 g5TB>qA$8B}\ǁTU>3Plېu?d.(a.g.БfpJUROAEI$NAՖզ(WdZRXh"f\I9q#_ܛYL*(¢z:> !q)W3H7[xS?f}:`T=\zp-\y-N|i016S~a2, !PN |s~eL 0z~Ǘ)a½,jF!8j\-(X>iUf}uBImZT]ն,iLXi/T8ff37.wior ʉTxwA"MB^`z_LvIuƒ־R{ J9;;X=1s[ endstream endobj 2077 0 obj 697 endobj 2078 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2076 0 R >> endobj 2079 0 obj << /Length 2080 0 R /Filter /FlateDecode >> stream xVN@}W#He7{HR/TCUUB4|}g}I<}̜ǀu9$s1PDmb~LFvA[7f/vMqW^Q]ߠuv] .:w9>(DRQJPpp}t'L Q<-T02(U*QqNšzШQ ш(;szj+mHOEZRrYdJtAr™@1\Ak)F۟P5\uY2[4 XO X1Dw3GEr]gNF2ȫ( ɫ[e¦v/= %*:uC ")'RԾ~dzY#yIEPjڝ,$~w~50xtÜ2Ipӆ){Ba>^&'18}Y>:Gn>dxt-B=&,dI#ߗt`7ӊhsLT( "{o endstream endobj 2080 0 obj 779 endobj 2081 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2079 0 R >> endobj 2082 0 obj << /Length 2083 0 R /Filter /FlateDecode >> stream xUMs0+$cӦ3=t +L0؈ }jbv7ϕ0[@qr" ,$i8S֣!YQqor2\ycIp_Bw)Ǫ`/;uŨSR),<:۬2RL9,ȊSU7k/t~+uGmmF 9s+hcU~>% endstream endobj 2083 0 obj 632 endobj 2084 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2082 0 R >> endobj 2085 0 obj << /Length 2086 0 R /Filter /FlateDecode >> stream xTn0+’CK]Rn*t,ĖlQFۿPxMOI,Cfy|U"umE1AmHd D0#8pyg> n*5# ~'1@NF;wUc|@pȧOҦ9Ram! =GB>YzמA-ou*NG]}]7H:;pLCj- ${QM]^NVkXuSEil EB a ٰE&+܋3FԻu?biS/ -@,dhA_9SJ=toU@6eVkH:%K9қT8?'ۤE2iT#U;W;1B;+=t;jń oR|iOلzc)y̆g.[li = > endobj 2088 0 obj << /Length 2089 0 R /Filter /FlateDecode >> stream xUKo@+Hv_l\6z8L6 HZ Xe<: (>vQCv cs=`p5 b/=T]km7+#JPoV۞#]Fa| 7.0 bZ(L(~8kx8ˢgSBn S?BE*gVU&+p*R>v)QȩQB MR6y67E&,MSAr™c @;8WQ,l!ZGx%xUC]mhDZ|=נSMYe\I9#E>L^LgM2Kֿx-8i8njmNt-Y|=|/y,reI`vy ói75Ceeɴ؏Ai!*.(6Sq:uQ`I=IP%]giiS>j- (bw,z5p}#>v+QolrJHFyhYofi.mi;mmO!G뼮 їf1`oV(t~/4, endstream endobj 2089 0 obj 644 endobj 2090 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2088 0 R >> endobj 2091 0 obj << /Length 2092 0 R /Filter /FlateDecode >> stream xV]O0}ϯ I#U`xS@ \PȗXm"Q $D4f f0G(/~&y 0| oN#Xw=28%Uni,!] td@*9A*U+; u˦ 7ȑOzqZO`p;%j$E!BJRx&PQ E6*VcoRIt-VxV(@vB*/׍vѪݢu8{.gbs겱 ?+% e޺8{ycV endstream endobj 2092 0 obj 718 endobj 2093 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2091 0 R >> endobj 2094 0 obj << /Length 2095 0 R /Filter /FlateDecode >> stream xVMs0+ʱLgi= vdGSDҺ+8FS۷Z.b@:qT讷1DkbI ,&39LƘJtN(C`p>2&}'?9c@7=sXjkS&r5cmPK悿N0 ))I )Z{S1Q2S*ٖud!b)'|/zEVŒYjAE1g}~PxpaTR9=@5Xh -̩8bi0ZWM5СHicRN)>z i2. k>A> A0Y7OT0h֫'h=HCfzx &ܓXuNUe4)6.N.KY]bDJIZ^imV }Hln*g L)K7q]C-tmt9sU/jx 6~$}obl&tx|>JIaX;(&NϬU@ endstream endobj 2095 0 obj 706 endobj 2096 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2094 0 R >> endobj 2097 0 obj << /Length 2098 0 R /Filter /FlateDecode >> stream xVn@}+1^e#EzI>T8^;68,N~}g1?513g3ǙH!]x ] B`>.h{>y{]n= _[NoqGU/b0>xW$bR&$DDpeܜ NFW; XWu|5e]7s[>6n)XSW% $ZQeqM )u2*]]*F}:Gs™@1#\AkぅC_ce ]T|e"b mL2PTgOzOY]6@Mкák&ΉZri,):ɶy49ȏj*()hzXF?_4~&#(A+%jt`|j(X> endobj 2100 0 obj << /Length 2101 0 R /Filter /FlateDecode >> stream xVKs0W=D˒cLgiO{H3<-YE3Ȭiҽǀum8L}mc9uhb& \h3 7VOi3V&,ᇗx>zwh݇?^xם@苊{zo|`^ZiH(Lh}8k}uNhAu_IY ǯ&e\.28%k:FAD-&K'2/!fJc 9L*-qCh;ɹ٩q6ϣmAчҮԑ \N&2ȧ)QJ9t]S$q>ȍItHDRO|VD>)@JPe^1 [9NLNP uPS֥-oSZBKBN(o)xnj+9~0h=.p!ΡX9]cSw+c8iSj =Ltx &i*/Ҥ('SV NMf6;ZQ`6ٳ|ś"NQ'ԌWqfspbuLHLS:`KsqA)g^BzC2ݧ\o&K: [tm;L<_0' $<(=z݋ endstream endobj 2101 0 obj 697 endobj 2102 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2100 0 R >> endobj 2103 0 obj << /Length 2104 0 R /Filter /FlateDecode >> stream xVn@}Wc#5۽zJRFAC*,*6iwvXxj}̜f!`@:u6Eh"51+47(-hpRƼ~oڭv?: _[NЮwиWe/b0 >w t+4$bR&4DDp>F ys'lxYF_ϣL,:_M-]7h("gge )li9\!U|W n]r|y(  VV> endobj 2106 0 obj << /Length 2107 0 R /Filter /FlateDecode >> stream xV]o0}WDZ=qjҦmҤMև@ [kI $4OkC{Džm{# (0"#pf0 lf׸n/pdͭ.u܅?N\ ;^"Ma| _\ IZ.O0Ƅ (跪 |s>JoY_MY@yf]:xPHhO=WGO:(@̊-;uyYڠBE*yP8SD BN a.TS*pR,! ۦL7.0<ϔ.Y-#J߀9FK(CS}f_aSV9%\ R V*!짅!d\Hk>N9@]%*[ǻ,&`wzY'#I?*NNeo| =C>iosk1ln]L *S PEQTĭXZ<~~B ϑ*Nո-YC!}_&I b.͸C 1&I FF;\6|ʳJvcr)z`+:L\G?E郬ö5N8hʯa #> endobj 2109 0 obj << /Length 2110 0 R /Filter /FlateDecode >> stream xVMo@+/X6~RVCUmT!n_YvcOMoa.JsȊ("70& P[`{A[v'sZ7u/b0 &dVj3J) b"Ini Ii^A)e*a^mp*~ָUFDaM=UoUh(,W\^֭6deuQϜ8Ar™@1hB > gS ksU ..a3汭(ʗǦu^wP} y-V`c ")+R8ţٲ"琖IEXj4o661~뿅ڲFwj1;}s85끛D"ϠkBrPKl[E1]zwsr 51M|g~QiqB BB3khMИ0aHiZHN5> ~}Y3#Jb췚w3轩Ul  6<-*_R,z,mC9\Ϭ=r{ endstream endobj 2110 0 obj 688 endobj 2111 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2109 0 R >> endobj 2112 0 obj << /Length 2113 0 R /Filter /FlateDecode >> stream xV]o0}WVZ=ƕIIM5QjRR Y_k i!хsɵ<#3H!{w]  B`>-`GԼ1k~ -\xGwydzzw6((L4F! \xe[7'Z7W>[3o8~%ism7HcuUANEU^ՆT:])Ͳ*FO g<l 0aFq r.,YU᫮dZ I WIJ048\yCz(()Ȃ\Bħf̖zCcvKFRc雤;0ʰIC5$])._'2d;08 rrGAfdS]qA׭r(3wݘvrpnt=9]UxO ykPw"635 7 rYY2uc8[>r,糵uڬEA,AE2w <|C1As6{ۢy+CY4qunTa@z"{GD(uVKA-4t KI"-kLb^l'Ia'-jgs PV1I;plYfdXٶ:.!1BÙctybv0JClU5?̺B endstream endobj 2113 0 obj 765 endobj 2114 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2112 0 R >> endobj 2115 0 obj << /Length 2116 0 R /Filter /FlateDecode >> stream x͖Mo@9R`HQVmJj58cp[wX` 0a@28+H?1ah{5#zo^m, {1oy\ NIjpއO0 a$H(LH|8+M ֥~q>G3Nꔵo8~%39{epJ$zP*1P aEYo}}]ڐRFSr™@yqgph=C ?\v/Y,UAC6y[01Agu./eZ:1e%|4PC9ĥ︢DVSb~NJR$J _&pR_unNۣnjq,lw01. zy1X贪lbFn=,zgR)"P$:gFiJ1Л b!M`'p}^TI-g&5z(k$Zn8kw/H,h=yFFLK !(aqUE^?Z,> endobj 2118 0 obj << /Length 2119 0 R /Filter /FlateDecode >> stream xVMo0 Wö6bpR%5ȩv~(N;qrZA/Rq.@r鮉%) v gԿo?}ژhp#Q]ߠ w*B_TlL@5w_.T8bd܎0R9pxCH鑧P#H'<J;RK<闅u;;)~QZ6%yx &BOQwqkwBpspNòON)ɰ* Nrʌg aΧxQBqL4w=S>Xl{,`KdCz7?!10{0mL$#㭵ofѷvV<8%<_0ODCYHHq̪b< endstream endobj 2119 0 obj 695 endobj 2120 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2118 0 R >> endobj 2121 0 obj << /Length 2122 0 R /Filter /FlateDecode >> stream xVn0 }WVM7[Vb.a])QRcZNG6vimXC2(!] m #` v 'Խ1~vkcݏ; ;hu}UQGQZI(L(}8p}tYLdiMu|/VWE_MY ǯ"u\lepJSuUFVeYܚS[kC' ;#VehK$' y46xŨVFli̹iY,@pصFOEIEN:/6TH_KUuθ r|"EG2_ 9RٙT$ [M0ƒcFO,:}+H94C5ȓ _Bݫ^Nl[%ti$E']QW׈§;18ozy1>eV)~T3 yN_?r\ ;'~g9ܮ+cP`i11M`%CBJpOn?yeT -BI$T ݙ!NLyx1'1wGc2[VY!",T8lYi,$X $-t)$ўȂDhs{CJ|t9'Jٚ[Ch{NJ S(qBɽV]׺X endstream endobj 2122 0 obj 756 endobj 2123 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2121 0 R >> endobj 2124 0 obj << /Length 2125 0 R /Filter /FlateDecode >> stream xVMs0+tf´4!0HRw`dۂoZ>b@86&辵1Dkb*& WhnPt3'flLtsr?"9B-_Y﫲*'b=|,[A!>SUYVxij =Tp ݼE(ܬu2ҦꑻO7A„#MCYTOBp"958[PzgaYcDLIѺ*_VyYEތlg:0uȋW>u^4n2wR*}#}u0A70}(&۬E[UoԯoVHiaX;[(U?5 endstream endobj 2125 0 obj 697 endobj 2126 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2124 0 R >> endobj 2127 0 obj << /Length 2128 0 R /Filter /FlateDecode >> stream xVN@}WcvozP^ԇ<4M<Ķ>3gOf!`@8v9ࡵ1PDkbaLAwqcޘooژhwsAP\]u]{7(p0nČRʄ݇hW.`,a=:Y`ίYWZy:[ڬȡX&c@_`!!ze2u٬"> endobj 2130 0 obj << /Length 2131 0 R /Filter /FlateDecode >> stream xVMs0+ rG:әv L8(N_ߕ8>51 /}O37(a jADm #`4Q¿Dw73 kޡ=r^N UFaOw!0 l/$fR&Dp>%\,$]ƾK)ie*eN|| ǯ"x&Q(#S*4jHԢŭ9?/6iY9n  y :CcG<\ur _MYs-lvnĜD}U7|Ǯ|:)J(ry*rҒhk9i[1V)*?ţiHʤ"Q,VXFd+38K!a8)##=H3,ۭ=f]Z#=L+Q.[L(o)x.vj+)a0t9.p !Pg%n1Ω1[rgCۉ/7Ac„{"uC[ǎC[ոkPro`oPwf}uDIYfєuY!aƦe֦/qkYgM ݦMxEۨ v4A9q=sssdQ<ftq97_(WVmѵz+;wr 0QI(5x@zaU endstream endobj 2131 0 obj 691 endobj 2132 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2130 0 R >> endobj 2133 0 obj << /Length 2134 0 R /Filter /FlateDecode >> stream xVN@}W#He7{HR/TCUDTNh%;YT#;̙9>݇]΃6@qv0IxE ŝO{bV?7Mv?* _a<ǠI/^!MFa|C`F'i&12 &k0e65 _F[ Xu}5e_Ej\lG28% =\|TaP@eQڐ2̊Zy#.cp&Pgl<$Y{Q јsD>|*tYC16&`%еm9vfюM'N cg(\2պm ٽDXIw#g\I9ޑI3-͆L*ŲQ}|GS,sF`̳:(H4hXnĚgyvHP6WxD,ueLY9- d4ŧ >ȪV?6{(goOQ&n?lN+fP9$  ˫ endstream endobj 2134 0 obj 777 endobj 2135 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2133 0 R >> endobj 2136 0 obj << /Length 2137 0 R /Filter /FlateDecode >> stream xTn0+ұC[Z! l N =d+yͳxM(^CA$#Fc`]:.С WZx"0|h$R} <2$ Ls;'ℌMEg+]fz{VYq^ ",CHm`CY~ab ,ZdZ0yHf).ѪHT᫶ŎE}_~e/x}pg/:U^0Pj_ϨP9 CZVN ÕjJ endstream endobj 2137 0 obj 403 endobj 2138 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2136 0 R >> endobj 2139 0 obj << /Length 2140 0 R /Filter /FlateDecode >> stream xVKs0+tU#tvi;3=$ "fE4+F`om+}ZOϹCu~v2> Els _E݀3sjvdn{Nwc+~8Cs{5vz|[:o?,QX&=%O@@aW7߾~OymT*eThY~9Y0|טl2'M]o{pJ|.'0DDGOR籡"-!IJOehm7 9Z={4FG> endobj 2142 0 obj << /Length 2143 0 R /Filter /FlateDecode >> stream xTMo0 WQ-ɹVle5C[IjFQHvZ+G=Hϙt(`y=A j3ܱpp۱mw?_0w{r»%~yx7;wQ$äep}rw'E-mZ-:}>F{1K.Xֿȶe4/$݂;$dNUP'ie6K,]-6]UaN}`KDNL[̎L1 (;|aF}HPS-~.M<.]P@L)t}΋NQP0T8x-IVwˀȩd{MŹyCLѡGӦe6VBX5Inøt3!UZJ*G > endobj 2145 0 obj << /Length 2146 0 R /Filter /FlateDecode >> stream xUn@}+1`Yjj:FCYbᢨY.5ˋ{fϜf,+3(![O-@qNbLn#ܰh7 `E͌]=vca Ģpm= F܆g | +m6gF^8pDi8M",/n}z9 YZ_d]Ae4G8% 'hh퉪$0fqW]^C#nK$' JfJhDKTPH:D+WkIvi(WӇEZAxS03 d&2,vOڇIyPF$Î+VXH5uMY'eCEWA rUE.D>'8!unvyMn%g0aHAgJBljwwUEa#T`_4uzz١WؒN4AisbѶFwsNF ֒;cϞ'o쪹? endstream endobj 2146 0 obj 580 endobj 2147 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2145 0 R >> endobj 2148 0 obj << /Length 2149 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=i[iimbQg󑆄з&!ue'.)Da8!@\D=,O]s ~?N`v 6N'.a87 ~1*pw7dqӰJ (Uuwk0șr7- QSFa!{ĀbMud(Ydm͒"MVKҼRp֭E#v\(akq _ j˥4=p* -!)ʲOٴ0ȑ#Y^ɞ*Gr'G )}*: f=|\5֑)Qko^0r7uj/I WJng<($*JQrUނE>d$ >o9m ; B~JJ0"qe*#bEac[U:+bp"" bX9ƞ:( ھkx.hb1ZI};19RLE׆ vƮr= endstream endobj 2149 0 obj 587 endobj 2150 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2148 0 R >> endobj 2151 0 obj << /Length 2152 0 R /Filter /FlateDecode >> stream xUo0~篸VZ=i[iim )j;# IDqwq~tP|.$8w{ 1<KpE ; j-6saq¡p\"zONnp\8="Mqv>/0 a,-w/Dpe0ŏ?HuG&QY'¯p`yJr%VmKOFrb}}.XN{:yeUd endstream endobj 2152 0 obj 582 endobj 2153 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2151 0 R >> endobj 2154 0 obj << /Length 2155 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=i[iim%RԀ)wGB:\{|<: (vC:@rb%Ce~@fc ~r̡p\"zON'.Q8 ~ė^ \ۋCpŦHWUb2VyU|u>o,yٲ ?I2 I6#յ.j4JtuZ[f$O e):F,wp&(eҿĂ6.S(S\. -wM+K?0ER5Ev5'3y=UdϨOTZ\uM|5|X7w SatU~3j><Y%q)Pl4ʪL9W˪ᡎ#7IVETVPVEVP>,uOAA*v. WxOw[ LQ„}6 $ߧ<.qM~EU]dXA\Nd3T>v*qczJm=> endobj 2157 0 obj << /Length 2158 0 R /Filter /FlateDecode >> stream xV]o0}WvZ=}mڤM(q|`|=!}f\P7S "iCaϰ66- 8ssх=xvZws5"7 !\R+1*E!{MT%yaT(YA}g9_5MQ)B ՈňuCu,,6IVleV_V \(aqOк: @,0ľ[J؀\FuZAz.z:e U3r@AF2q|72^PTL(B}t5!yg'j4>E E\Ltqw.z#jKLӚ` \Vc֟_IfrVTUq*2rZ$,pTqDܶNmJ!RR5ٷ3y|(0K2)Liέ-\jk1k͂vGV{- ˺]$:ѡW8CH^T#dFQG(DWԻŬEJYe ^&B fc;#>~i*Z>fCXp!p2=\׌9K4D0"m%xhndd+g`b@SlUiTά @1/&\̭k,A:]%+kA;G's7c;PQ>qcw`1U5?^H endstream endobj 2158 0 obj 790 endobj 2159 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2157 0 R >> endobj 2160 0 obj << /Length 2161 0 R /Filter /FlateDecode >> stream xV]o }2u6mҦU$V5x1qm8p=.g)l#(>D La/5:}eŹ{R>8ֹo1r>|`VC !D.m5_6ViCR9994MQcIDb e뤇2 r-ɳryr.WiD$MQD19ZG;s})ec6gbי6"L@/9d;(b!d?%AC풌bA`b.E)ӝ)Pqrа#!."_ߟɧ([4+D'uZ[-MjQz3R|:Hs#*@mHUՉY$Oi8Qb E>#$#E9`8aun+8 큻|݌ $3PR و.ţ#^L4Y:ɨ!O[chJ8:m: 돭%u_! DV- ]2{:I%U=d.FGQ Fɺ,Tg BwmYTBU. :|) Xڑl6ϡ~<]#{S3=׮,jˆ5PCu+b[9䇚vEW*M,fu{'\k,An:[%/u̠K{xS%cWk1cOpmU5?qH endstream endobj 2161 0 obj 799 endobj 2162 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2160 0 R >> endobj 2163 0 obj << /Length 2164 0 R /Filter /FlateDecode >> stream xTMO0W̭pۉ?֪-jV] MKثv>vN֋ˌI(B!K`屇;'vܶq; "%A8%W.@<'|SVcB!${kyD04h* CR?kbdQ_A|NF9 XV_ɶmh>.$Ղ[pWCVA=M[f3Ezk.v!3|6O.Ζb/cq.9WS> endobj 2166 0 obj << /Type /Action /S /GoTo /D [2006 0 R /XYZ 72.0 720.0 null] >> endobj 2167 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 215.92 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2166 0 R /H /I >> endobj 2168 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2166 0 R /H /I >> endobj 2169 0 obj << /Type /Action /S /GoTo /D [2009 0 R /XYZ 72.0 720.0 null] >> endobj 2170 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 220.93 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2169 0 R /H /I >> endobj 2171 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2169 0 R /H /I >> endobj 2172 0 obj << /Type /Action /S /GoTo /D [2012 0 R /XYZ 72.0 720.0 null] >> endobj 2173 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 247.31 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2172 0 R /H /I >> endobj 2174 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2172 0 R /H /I >> endobj 2175 0 obj << /Type /Action /S /GoTo /D [2015 0 R /XYZ 72.0 720.0 null] >> endobj 2176 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 222.05 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2175 0 R /H /I >> endobj 2177 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2175 0 R /H /I >> endobj 2178 0 obj << /Type /Action /S /GoTo /D [2018 0 R /XYZ 72.0 720.0 null] >> endobj 2179 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 248.43 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2178 0 R /H /I >> endobj 2180 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2178 0 R /H /I >> endobj 2181 0 obj << /Type /Action /S /GoTo /D [2021 0 R /XYZ 72.0 720.0 null] >> endobj 2182 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 229.27 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2181 0 R /H /I >> endobj 2183 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2181 0 R /H /I >> endobj 2184 0 obj << /Type /Action /S /GoTo /D [2024 0 R /XYZ 72.0 720.0 null] >> endobj 2185 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 255.65 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2184 0 R /H /I >> endobj 2186 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2184 0 R /H /I >> endobj 2187 0 obj << /Type /Action /S /GoTo /D [2027 0 R /XYZ 72.0 720.0 null] >> endobj 2188 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 232.6 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2187 0 R /H /I >> endobj 2189 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2187 0 R /H /I >> endobj 2190 0 obj << /Type /Action /S /GoTo /D [2030 0 R /XYZ 72.0 720.0 null] >> endobj 2191 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 258.98 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2190 0 R /H /I >> endobj 2192 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2190 0 R /H /I >> endobj 2193 0 obj << /Type /Action /S /GoTo /D [2033 0 R /XYZ 72.0 720.0 null] >> endobj 2194 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 223.71 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2193 0 R /H /I >> endobj 2195 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2193 0 R /H /I >> endobj 2196 0 obj << /Type /Action /S /GoTo /D [2036 0 R /XYZ 72.0 720.0 null] >> endobj 2197 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 250.09 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2196 0 R /H /I >> endobj 2198 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2196 0 R /H /I >> endobj 2199 0 obj << /Type /Action /S /GoTo /D [2039 0 R /XYZ 72.0 720.0 null] >> endobj 2200 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 224.83 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2199 0 R /H /I >> endobj 2201 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2199 0 R /H /I >> endobj 2202 0 obj << /Type /Action /S /GoTo /D [2042 0 R /XYZ 72.0 720.0 null] >> endobj 2203 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 251.21 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2202 0 R /H /I >> endobj 2204 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2202 0 R /H /I >> endobj 2205 0 obj << /Type /Action /S /GoTo /D [2045 0 R /XYZ 72.0 720.0 null] >> endobj 2206 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 553.5 193.459 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2205 0 R /H /I >> endobj 2207 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 553.5 539.998 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2205 0 R /H /I >> endobj 2208 0 obj << /Type /Action /S /GoTo /D [2048 0 R /XYZ 72.0 720.0 null] >> endobj 2209 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 258.99 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2208 0 R /H /I >> endobj 2210 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2208 0 R /H /I >> endobj 2211 0 obj << /Type /Action /S /GoTo /D [2051 0 R /XYZ 72.0 720.0 null] >> endobj 2212 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 260.66 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2211 0 R /H /I >> endobj 2213 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2211 0 R /H /I >> endobj 2214 0 obj << /Type /Action /S /GoTo /D [2054 0 R /XYZ 72.0 720.0 null] >> endobj 2215 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 259.55 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2214 0 R /H /I >> endobj 2216 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2214 0 R /H /I >> endobj 2217 0 obj << /Type /Action /S /GoTo /D [2057 0 R /XYZ 72.0 720.0 null] >> endobj 2218 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 259.55 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2217 0 R /H /I >> endobj 2219 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2217 0 R /H /I >> endobj 2220 0 obj << /Type /Action /S /GoTo /D [2060 0 R /XYZ 72.0 720.0 null] >> endobj 2221 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 260.11 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2220 0 R /H /I >> endobj 2222 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2220 0 R /H /I >> endobj 2223 0 obj << /Type /Action /S /GoTo /D [2063 0 R /XYZ 72.0 720.0 null] >> endobj 2224 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 260.11 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2223 0 R /H /I >> endobj 2225 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2223 0 R /H /I >> endobj 2226 0 obj << /Type /Action /S /GoTo /D [2066 0 R /XYZ 72.0 720.0 null] >> endobj 2227 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 262.33 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2226 0 R /H /I >> endobj 2228 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2226 0 R /H /I >> endobj 2229 0 obj << /Type /Action /S /GoTo /D [2069 0 R /XYZ 72.0 720.0 null] >> endobj 2230 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 262.33 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2229 0 R /H /I >> endobj 2231 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2229 0 R /H /I >> endobj 2232 0 obj << /Type /Action /S /GoTo /D [2072 0 R /XYZ 72.0 720.0 null] >> endobj 2233 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 234.81 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2232 0 R /H /I >> endobj 2234 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2232 0 R /H /I >> endobj 2235 0 obj << /Type /Action /S /GoTo /D [2075 0 R /XYZ 72.0 720.0 null] >> endobj 2236 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 261.19 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2235 0 R /H /I >> endobj 2237 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 433.5 539.998 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2235 0 R /H /I >> endobj 2238 0 obj << /Type /Action /S /GoTo /D [2078 0 R /XYZ 72.0 720.0 null] >> endobj 2239 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 238.15 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2238 0 R /H /I >> endobj 2240 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2238 0 R /H /I >> endobj 2241 0 obj << /Type /Action /S /GoTo /D [2081 0 R /XYZ 72.0 720.0 null] >> endobj 2242 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 264.53 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2241 0 R /H /I >> endobj 2243 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2241 0 R /H /I >> endobj 2244 0 obj << /Type /Action /S /GoTo /D [2084 0 R /XYZ 72.0 720.0 null] >> endobj 2245 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 220.93 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2244 0 R /H /I >> endobj 2246 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2244 0 R /H /I >> endobj 2247 0 obj << /Type /Action /S /GoTo /D [2087 0 R /XYZ 72.0 720.0 null] >> endobj 2248 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 247.31 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2247 0 R /H /I >> endobj 2249 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2247 0 R /H /I >> endobj 2250 0 obj << /Type /Action /S /GoTo /D [2090 0 R /XYZ 72.0 720.0 null] >> endobj 2251 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 224.25 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2250 0 R /H /I >> endobj 2252 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2250 0 R /H /I >> endobj 2253 0 obj << /Type /Action /S /GoTo /D [2093 0 R /XYZ 72.0 720.0 null] >> endobj 2254 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 250.63 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2253 0 R /H /I >> endobj 2255 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 361.5 539.998 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2253 0 R /H /I >> endobj 2256 0 obj << /Type /Action /S /GoTo /D [2096 0 R /XYZ 72.0 720.0 null] >> endobj 2257 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 235.92 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2256 0 R /H /I >> endobj 2258 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2256 0 R /H /I >> endobj 2259 0 obj << /Type /Action /S /GoTo /D [2099 0 R /XYZ 72.0 720.0 null] >> endobj 2260 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 262.3 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2259 0 R /H /I >> endobj 2261 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2259 0 R /H /I >> endobj 2262 0 obj << /Type /Action /S /GoTo /D [2102 0 R /XYZ 72.0 720.0 null] >> endobj 2263 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 222.59 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2262 0 R /H /I >> endobj 2264 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2262 0 R /H /I >> endobj 2265 0 obj << /Type /Action /S /GoTo /D [2105 0 R /XYZ 72.0 720.0 null] >> endobj 2266 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 248.97 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2265 0 R /H /I >> endobj 2267 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 313.5 539.998 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2265 0 R /H /I >> endobj 2268 0 obj << /Type /Action /S /GoTo /D [2108 0 R /XYZ 72.0 720.0 null] >> endobj 2269 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 229.25 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2268 0 R /H /I >> endobj 2270 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2268 0 R /H /I >> endobj 2271 0 obj << /Type /Action /S /GoTo /D [2111 0 R /XYZ 72.0 720.0 null] >> endobj 2272 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 234.26 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2271 0 R /H /I >> endobj 2273 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2271 0 R /H /I >> endobj 2274 0 obj << /Type /Action /S /GoTo /D [2114 0 R /XYZ 72.0 720.0 null] >> endobj 2275 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 260.64 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2274 0 R /H /I >> endobj 2276 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2274 0 R /H /I >> endobj 2277 0 obj << /Type /Action /S /GoTo /D [2117 0 R /XYZ 72.0 720.0 null] >> endobj 2278 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 218.71 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2277 0 R /H /I >> endobj 2279 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2277 0 R /H /I >> endobj 2280 0 obj << /Type /Action /S /GoTo /D [2120 0 R /XYZ 72.0 720.0 null] >> endobj 2281 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 235.38 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2280 0 R /H /I >> endobj 2282 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2280 0 R /H /I >> endobj 2283 0 obj << /Type /Action /S /GoTo /D [2123 0 R /XYZ 72.0 720.0 null] >> endobj 2284 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 261.76 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2283 0 R /H /I >> endobj 2285 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2283 0 R /H /I >> endobj 2286 0 obj << /Type /Action /S /GoTo /D [2126 0 R /XYZ 72.0 720.0 null] >> endobj 2287 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 239.26 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2286 0 R /H /I >> endobj 2288 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2286 0 R /H /I >> endobj 2289 0 obj << /Type /Action /S /GoTo /D [2129 0 R /XYZ 72.0 720.0 null] >> endobj 2290 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 265.64 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2289 0 R /H /I >> endobj 2291 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2289 0 R /H /I >> endobj 2292 0 obj << /Type /Action /S /GoTo /D [2132 0 R /XYZ 72.0 720.0 null] >> endobj 2293 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 225.93 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2292 0 R /H /I >> endobj 2294 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2292 0 R /H /I >> endobj 2295 0 obj << /Type /Action /S /GoTo /D [2135 0 R /XYZ 72.0 720.0 null] >> endobj 2296 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 252.31 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2295 0 R /H /I >> endobj 2297 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2295 0 R /H /I >> endobj 2298 0 obj << /Type /Action /S /GoTo /D [2138 0 R /XYZ 72.0 720.0 null] >> endobj 2299 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 181.5 244.283 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2298 0 R /H /I >> endobj 2300 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2298 0 R /H /I >> endobj 2301 0 obj << /Type /Action /S /GoTo /D [2141 0 R /XYZ 72.0 720.0 null] >> endobj 2302 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 250.11 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2301 0 R /H /I >> endobj 2303 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2301 0 R /H /I >> endobj 2304 0 obj << /Type /Action /S /GoTo /D [2144 0 R /XYZ 72.0 720.0 null] >> endobj 2305 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 249.56 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2304 0 R /H /I >> endobj 2306 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2304 0 R /H /I >> endobj 2307 0 obj << /Type /Action /S /GoTo /D [2147 0 R /XYZ 72.0 720.0 null] >> endobj 2308 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 253.44 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2307 0 R /H /I >> endobj 2309 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2307 0 R /H /I >> endobj 2310 0 obj << /Type /Action /S /GoTo /D [2150 0 R /XYZ 72.0 720.0 null] >> endobj 2311 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 261.77 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2310 0 R /H /I >> endobj 2312 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 133.5 539.998 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2310 0 R /H /I >> endobj 2313 0 obj << /Type /Action /S /GoTo /D [2153 0 R /XYZ 72.0 720.0 null] >> endobj 2314 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 269.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2313 0 R /H /I >> endobj 2315 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2313 0 R /H /I >> endobj 2316 0 obj << /Type /Action /S /GoTo /D [2156 0 R /XYZ 72.0 720.0 null] >> endobj 2317 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 277.33 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2316 0 R /H /I >> endobj 2318 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2316 0 R /H /I >> endobj 2319 0 obj << /Type /Action /S /GoTo /D [2159 0 R /XYZ 72.0 720.0 null] >> endobj 2320 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 262.89 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2319 0 R /H /I >> endobj 2321 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2319 0 R /H /I >> endobj 2322 0 obj << /Type /Action /S /GoTo /D [2162 0 R /XYZ 72.0 720.0 null] >> endobj 2323 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 254.55 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2322 0 R /H /I >> endobj 2324 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2322 0 R /H /I >> endobj 2325 0 obj << /Type /Action /S /GoTo /D [2165 0 R /XYZ 72.0 720.0 null] >> endobj 2326 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 251.22 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2325 0 R /H /I >> endobj 2327 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2325 0 R /H /I >> endobj 2328 0 obj << /Length 2329 0 R /Filter /FlateDecode >> stream x_\u{~ \F.SΩʩUpX4), r{ J*-S~{~yg/uo?gyo/_;_"^/_c?_?|_7/7Wp}o>oo?՟xo\_NjoK[^q\8eQ^|Ӌ_޿~q_|W_/O_oooyRo_ź~Ӌw{^zß_*3y^0/ q-W8%CX"8Dp r`9@ XN,'KR@    LLL"XE^[gd|=n!qxB܋U8%NEp)8@08A0 F( x*!!!)))UV"D`.]"8Dp)<@0뿩sQmë< Օ!SꤺCN>:nT:Dj\@]r"5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN\gH-tO\H-r"5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\H-O\H-XCT& $$$Q|G؟G}Oo_ߕ?M]F.uzH}}`:ROd9r.$XBPb I-kb IMAAAIII,+Y^?J[ sR_إTR']A5Yd9r.$XBPb I-kE,v!2222222ɲe%J,Y6dɲe'A,YNd9rmZ,v!rmZ,v!XBReeeeeeea8Y̿>̂a9gyLυW~6@wO FE0D0D0D0E0E0E0E`*M6"E`!CN"8AEAp^Apُ } ````````*U6l"D`.C"8Epb\{=NAp.E0D0D0D0E0Ep=(|a9n??7_=o:t?J< ^oqJ!^oN E@ kI~|Z1Z V"XE`&Mv"8Dp!SN\k a?>ApwjZV"XE`&]v"8Dp)S'% Z1 Z̰\K QdygN:|n |9xJ7j|-O<-I7Iu-VTׂTTTTTTTVS]OWp̹Iw$˛T>ɫ:Mu$8Hu-qT2OR]K('յ܁rR]K$S S S SMSMSMSZMj3fTvSMu0aTNSIPNk'Z0A9Ejjjjjj}=2L Ϝ&yf맷׏~E?|Ý@ay|R~8Z>(~PnTNS:Iu-TbOR] >('յrR] ?(7000444jT륺uf'X^-S>rS:Mu$յTrR]E$?Iu-Tײ #jjjjjjjj5jT6SmMj7nTS:MuZlB9'ZtB9'R]O(7000044ՏG!Sɧ >&|y\lO^Nzēay|JW'!夺bPnaaaiiiTVSLj3nTS:Lu4iTrR]C OR]C Iu 1$/jjjjjjjj5jT6SmMj7nTS:MubPNkA9!夺R]C M5L5L5L5L5M5Mu-y"E~X5Cd?5~߾_?(O;׏fq@S:Muzx/夺K9RNR]TTTTTTTTVSjswvX7'X^-TNS:Iu=ޗrR]$_Iu=rR]TTTTTTTVSZMj3fTvS:Lu0iT'RN L9K^Hu=rS S S SMSMSMS>G'l2[ܺu<]P>(_<-ay|R~]PNkvA9مaaaaiiiTKk gK7'W璧:Mu4IkvA9م'夺f]PnaaaiiiTVSLj3nTS:Lu4iTrR] OR] Iu.$/fjjjjjj枇7_]߿}on~X%#ay|R~>R^-_j5fT6SM0aTNS:IuT.;OR]('յˎrR](7000444jTR3jnV,iyZ)aS:MueG9]vvQNkT.;M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IuT.;IuT.; f!,z&9'y֒Bͫ?}t󇟿^~47|J7j+NzayToOToOyx/O6.`#˛F^-RlZM`#˛F^-M6TNS:I~rIT'9O6rS S S SMSMSMSZMj5fTvSMu0aTNSz?9I~r$FNT'Mdr?69_vA_q,Wׇ?Ny9,'յrS S S SMSMSMSZMw}NվOʯWׇ?NTNS:Iu?TOR]('յ@BkZMj5fTvSM0aTNSPNk夺PNkTM5L5L5L5L5M5M>?.G[=m+}yOGy|P~7N`#'FnaaaiiiTލ6I`#FyZ)laS:Mu`#'TG9ޏRlZMj5fTvSM0aTNSz?I~`#'B#TTTTTTTOQۓ@/d?{/?~~P>9gk<_%>Swʯ唇IrSZR-TI$rj9IR-TK10004444jT6SmLj7nTS:Mu$8H5RT 8I5NRTjRbaaaaiiiTVSmLj3nTS:Lu4iT G0`OaOo;f9c>y uzH-N꠺Q-kb@} #X1R#5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\{`˵S,r~"5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X-.R"X-Ru˵Ej LL\[Zq0N|nD}Yo'x >$_(O;蒇Iz8䤺=HZMj5fTvSM0aTNS=PNk夺=PNk݃T׺M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuZ@9u=PNk夺=Pnaaaiiox̯w'Ӄ-o_5ϑX'/pOS~<,oOʯ#WTS:Mu$յ0rR]KC$?Iu-TIu-TTTTTTTVSZMj3fTvS:Lu0iT'#Z;"Ik夺֏H^Hu TTTTTTTTVSLj3nTvS:Lu4iTIu-.TIu-0ZbB P*|m(&} y|gCN<,˛S#c$11R=2FrR=2000444jTVSmLj7nTS:Lu4IGHNG@~11R=2FrS S S SMSMSMSMSZMj3fTvSMu0aTNR=2FrR=2FrR=2FrR=2BGHnaaaaiiwCx8 =ބay|J6P^-6PNka夺6PnaaaiiiTVSLj3nTS:Lu4iTIu-l$յrR] $/6PnaaaiiiiTVSmLj7nTS:Lu4Ika夺6PNka夺6H^Hu-lTTTTTTT?~c~>c/ _F}qݭq'/p_ހ|!y|Pސ<-7$Mu Iv'ސTogoHN7$7000444jTogoyclW巳7 O;巳7 Mu4iT?9~8{c??Iꇳ7BހTTTTTTTTVSLj3nTvS:Lu4iT?9~8{rRpꇳ7 7000044V iƗρsyY{{Qֳ!SgQ@^-΢<-΢T?EVS鮑As+5Wkiy|<,7aTNR]CIu $?Iu ('5PnaaaiiiiTVSmLj7nTS:Lu4Ik@9!夺H^Hu (7000044ջ(h4`~5 7mE~"=u[AZ>(n+(O;(7aTNSz{z{0'ޞ=,9ޞ= y!۳%70004444jT6SmLj7nTS:Mu$۳%'۳%'۳%'۳!/z{ZMj5fT6SM0aTNS:IaIaOR={XrR={XrR={XrS S S SMSMS]KMhqpsOw/g?,^qP,J8.:ГYNOIu)y!u(ZMj5fT6SM0aTNS:IuNJ9J%?IuZJ9L)'u)ZMj5jT6SM0aTNS:IuJ9V%?IuJ9cX%/dTTTTTTT?>1 =/?.!!pn!pl!n7ù+3weܔ)ǦL96eʱ)SMrnʔsSMR6eJٔ)eW&vebW&verW&werW]+SweڮLەi2}W]+3veƮؕ2sWfnı)ǦL2qnĹ)L2Q6elDٕ]ؕ]ܕ]ܕ]+SweLەi2mW]+weƮؕ2sWfM<6eؔcS&M<7eܔsS&˦LM,2+2+2+2ỵ'wkǙOvzY'/x=(}t<->LB7'$rj9HZNR-'TIj)ZVS>8f;+yZ)_%˛XjNS:Iu0TIu0T &jjjjjjjj5jT6SmLj7nTS:Mu$յÄrR];L$?Iu0TIu0TTTTTTf5yɬ&vmV3M#+=ܧ]r{ay|R~{Ay!RHS S S S SMSMSMSZM8lu'>Q7'ׇ?ʫsrS:Mu$յarR]6$?IumؠT׆ IumؠTTTTTTTVSZMj3fTvS:Lu0iT' ڰ!Ik夺6lH^HumؠTTTTTTTk<'Oy|8Z?|ÍUP^-SfS:Lu4IkrE9夺&W\I^HuM(70000444jTz9;y;,˛^,iyZnTNS&W\I~\QNkrE9ZMj5jT6SM0aTNS:IuM('5$5TJBkrE-zyȣ'#Uz:K/'~x>S*7=,oOGZ>(iyZR-TI$rj)Z baaaaiiiTޝ<,oONȫS6TNS:I5RT 8I5NRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu.C92PNkTvM5L5L5L5M5M5MnGz|ؿ_>S6_q0%_[,(S^rR][,$S S SMSMSMSZMvI'A'iyvTNS:I5RT 8I5NRT$(Tjjjjjjjj5jT6SmMj7nTS:MubA9-bA9-R][,(7000044Տmoя?z~(\nɯʫFS~(P0iT'}9ڗ#Ik_夺H^HuˡTTTTTTTTVSLj3nTvS:Lu4iT׾IuˡT׾IuˑڗCVSZMj3fTvS:Lu0iTNR]r('յ/GT׾IuˡT׾M5L5L5L5M5MƓ*z2.Z|u\ huk =GP>)_GI^-qiy| '9q夺GHZMj5fTvSM0aTNSGPNkA9qT8rS S S S SMSMSMSZMj3fTvSMu0aTNSGH~GPNkA9qz!W>w߿|wyǷ~o~/zuu'm -yZ)_%˛S rR]ۀ$?IumT6 IumTTTTTTTVS]GށV=^Tזn. uPM,'YNbH-kԧX=?Ru˵Gj LLLLdYɲe#F,;Yvdr A,'YN\z˵Gj\[z˵"k;dddddddy9'7uk~7քw~Ï___'S<$_+(O;g?fZ@VSz}mN~}<-_(˛rS:MuZ@9 Z y!յBrS S S S SMSMSMSZMj3fTvSMu0aTNSV(PNk' Z@9 jjjjjyx2 %(J>= ǓxmUs:[{V5vrnUU*}l]غusֵϭk_}ݺuڷk߶}ۺm?[ں}ڏk?غsϭk?ܹq\8v};>ΝkεsGٹQv}keֵk[>}n]ܺu׭k_}ݺmڷk߶}ߺ}k?غcڏk?ܺssعy\ϝkεϲs\,[>}l]غusֵ3xӎtnbi>y b7iyIy˫妚ZMjT]7;;˫~ZwayXnTNSRNkͯ'5Z+y!յrS S S SMSMSMSMSZMj3fTvSMu0aTNR]k~)'յrR]k~)'յWBk/=c~|<xy3^73擗6S>%_)S~PnaaaiiiTKu^EO[Z>(iy|:Lu4Ik@9a'a夺R]M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu ('5 T0rR] aZI=#{kO[GDZ=-v-iy<,oOoBN$RHR-TTTTTTTTVS]朣n%˛uЭA:VTNS:I5RT 8I5NRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujAyj'IYH5 f10004445xb'1dGg e)ksy:ӈj|]5<,oOOR] Iu /('5|߾p~}kE_wt/^txr?u?ܾ㋳}_:~g/?__߿r}?ş~s}q/G|yѮ?rrQ?$~YO_?]A endstream endobj 2329 0 obj 14407 endobj 2330 0 obj [ 2167 0 R 2168 0 R 2170 0 R 2171 0 R 2173 0 R 2174 0 R 2176 0 R 2177 0 R 2179 0 R 2180 0 R 2182 0 R 2183 0 R 2185 0 R 2186 0 R 2188 0 R 2189 0 R 2191 0 R 2192 0 R 2194 0 R 2195 0 R 2197 0 R 2198 0 R 2200 0 R 2201 0 R 2203 0 R 2204 0 R 2206 0 R 2207 0 R 2209 0 R 2210 0 R 2212 0 R 2213 0 R 2215 0 R 2216 0 R 2218 0 R 2219 0 R 2221 0 R 2222 0 R 2224 0 R 2225 0 R 2227 0 R 2228 0 R 2230 0 R 2231 0 R 2233 0 R 2234 0 R 2236 0 R 2237 0 R 2239 0 R 2240 0 R 2242 0 R 2243 0 R 2245 0 R 2246 0 R 2248 0 R 2249 0 R 2251 0 R 2252 0 R 2254 0 R 2255 0 R 2257 0 R 2258 0 R 2260 0 R 2261 0 R 2263 0 R 2264 0 R 2266 0 R 2267 0 R 2269 0 R 2270 0 R 2272 0 R 2273 0 R 2275 0 R 2276 0 R 2278 0 R 2279 0 R 2281 0 R 2282 0 R 2284 0 R 2285 0 R 2287 0 R 2288 0 R 2290 0 R 2291 0 R 2293 0 R 2294 0 R 2296 0 R 2297 0 R 2299 0 R 2300 0 R 2302 0 R 2303 0 R 2305 0 R 2306 0 R 2308 0 R 2309 0 R 2311 0 R 2312 0 R 2314 0 R 2315 0 R 2317 0 R 2318 0 R 2320 0 R 2321 0 R 2323 0 R 2324 0 R 2326 0 R 2327 0 R ] endobj 2331 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 2330 0 R /Contents 2328 0 R >> endobj 2332 0 obj << /Length 2333 0 R /Filter /FlateDecode >> stream xTn0+![A 9$ȴ-Fѿ/;S0w9;cB"NBQ( C$@RDQus ~N0\%L֦'̶ ȝJH)aLB96.18r 0@ +/58xvgb4F-F6WB@sTSٝƋGkS/ܪ]Ά vy/b[2|2L5M[8>ck CYk?qXo)ioG ?iWrpBPRq/ve6Ι[S +XؙhwDtcC wśvd"ˤ: -/ endstream endobj 2333 0 obj 526 endobj 2334 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2332 0 R >> endobj 2335 0 obj << /Length 2336 0 R /Filter /FlateDecode >> stream xTMo0 WQ-YmVle5C[$Fb˵ ; Kx'Otϕ"8HPB<#F;+&X8bA \w}tx `x0>1pt,-ELH# HK|f)үt'ykl3+YFD-(B&]vmJ*'T3[We4Y]&+MWZ7DG %?9ژsALzc:ttO$ 9-E퉰 endstream endobj 2336 0 obj 520 endobj 2337 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2335 0 R >> endobj 2338 0 obj << /Length 2339 0 R /Filter /FlateDecode >> stream xTn0+![A 9$ȴ-8Fѿ/۲S0w9;SB"BQ( B$@RDQf9d 7I`Jn: x6]xw "'d@0gii *> nϮ| _빱ԗ|vڟC-}g5~͖h hk$р[PDpKR@b> endobj 2341 0 obj << /Length 2342 0 R /Filter /FlateDecode >> stream xTn0+.II$}k6hu# $0\GB(%pNOM$$FpOUbSQ x $xa@9c0YmTE݃GgOwԥo|Sч,z9͟e1IG$0J|ƖSW ihwSS3> endobj 2344 0 obj << /Length 2345 0 R /Filter /FlateDecode >> stream xVr@}|d6McSxK$)I6# OA%fzzygy6P|G9fk㹔1P+bLnX6V'7"…9Mx1 wȸB?6 5(\KQ`pp0(7k/ \/Iww'g'6Ǘ+Onw Iš# U $J$xꟜ:xrebӂ  (rSeC7cվчo6'9$lYM&6=%eiTY&QaӒ#lDZ]uqA$8"E緷uh |IE,[:ȍsT>xsM'fC*B5QdFI^XIK0i2H6k-e7c&t g~:ۄ^}9'cUmU0(꭛c}^5u9f Y*%r}u0ABpF6;~kGMqũl/Iv_y\}g2sxiH)S){ֆ L:j7NUž8n^ ޹ Gt~>U{} endstream endobj 2345 0 obj 771 endobj 2346 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2344 0 R >> endobj 2347 0 obj << /Length 2348 0 R /Filter /FlateDecode >> stream xVKs0+VUAnI[gi:Iʹ8<&vecSXJJWR5mF@rc3L`pյmTF_R5"Fʴmkmg%[ > ӵs)lڍ(8Z.)z,mpp68Yۍ[DiAqgsW2O*IVʎ#8%'*Qi#QzCOMWUmnԍfgia3RL%C;!p]L8cc!-|p[w!IP&yyAePt;0tDRbD6)K,:lAli!8nFe\'rz=w7.-:=˄$H̒(ή_9"U#a(x` nL%Y:1Ҩހɋm,We"(YMֶU?2ue7uQj %:L2{ g{+vx9&lbۈc2SXv(Fz ,B ī>] L%؝E 82AEq<Gʺyq q'bC}W҉5Z^ʍϑwn@i̹9bXL2͌pډDGy7ܹvK-߮o׳/0hgW AGSk*z_GZJI`m2aXGgo0Up} endstream endobj 2348 0 obj 770 endobj 2349 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2347 0 R >> endobj 2350 0 obj << /Length 2351 0 R /Filter /FlateDecode >> stream xVKs0+U/#[64&d<ccSXb~iWˋŀ}b9 e#c8{WF60IŵmP"Voi3"L᧕Z.'(o6(QYbR%5\;Jl8KyX?,g1W*Uq)Rn"Jr$S0y¥ zlE<%+ov{,p&(eAP[hdDeطȹ*SV^V"" /}?Lu0QsX밡(m۰6ɲNe $Z9ZܩBʸ r|#Emᇗa]{eRۑZ+̎J)['շqE @p^<6<aI,x</|:kOaŕ X~|2- #f:]1ֈC2[ h㼝FqnBXl_]{5$L*Iv2cX~vH*E/|{eP1,dK0Օ@V8K>"Zbq){l8Rǂ _6S};|rzܔꦧ=c$@_Դ;ѕM o_ʨ0Jo G+ޘUsi[^ endstream endobj 2351 0 obj 751 endobj 2352 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2350 0 R >> endobj 2353 0 obj << /Length 2354 0 R /Filter /FlateDecode >> stream xVKs0+VU@(I;LfC-w61frjkYiw?}zX (zYHW1f1ԌXVweikOJ, ?QUQx.|w?RmJj<"2[&Q?e&Y˓ZWޜlw*dUATet_HR6 H]pDBĚ,OC}vgqH|_y5Ad؜p&(e8~/PiG`v0In&˶gURB8y,-tYk\>A@<3tJ&DCu Cr]@oIqc:Q6QS^mtЌ bS=+DƸ-JI,ʨXG' 4NJCB(2V,* Ԇ`V9I?W\Y/̈́ Pa5I4b : VilrnG0=C]bǙjsNl(u6E#8T .gF1|k2AXt;"eyϴ Ktrg*U[g{K{Gq+ƬvVŴ;]S4HQ':-$S-WYPVqR53.ĺ.ۮ2 eyˈpQZA1UH'uڈQmCxçÛhk4ެۜiM{~8m]@>|7"iL%]H(Y5?F endstream endobj 2354 0 obj 785 endobj 2355 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2353 0 R >> endobj 2356 0 obj << /Length 2357 0 R /Filter /FlateDecode >> stream xVKs0+VU@($n;L2Mʹ80vN}WcLNMcvO+-/~H!z^ZA*lT+yB?93]nFE7r71kwéuB?6 ֕o}[jM\IGW?hz{&yZ:+rJ[_,_ ?I2/$(;pJ$V.O8UR!Q\arqYH&8`W#T؜p&(eʐ0N:SfKtlVNf˾3d:!6ђ> endobj 2359 0 obj << /Length 2360 0 R /Filter /FlateDecode >> stream xVKs0+VU/ʭiӎ;ac@ $_ 609AZVZ=CH x01- QS uMѻg exxTR&pԸ;"?7 Oƥc|ni)GFJ}Qp0Noanfa&=ӸrZ13B?XweAT*讝H1 ]MTW@b<.^a hM8Cjn1Q  {SbS⸟yۅ/a ^lQ jzXuLLm29B`dYBTIK]D=P8 g M~]y=uL@ͥ*= 8%E;,r/{;~ ʮqdv6ʒG^b։ALr/t=_A)uLэwh+mDe97?vaPVSJcN9G9sTy*@{@Tא]vpRHsȴ>L ([[\VAyŶy`LKAX)|Cqf~yUdRO@%A*70k+ig IS5­ޱo368Bl?)RUCOǗsL|> endobj 2362 0 obj << /Length 2363 0 R /Filter /FlateDecode >> stream xVMo@+V~5[R&F!,!A*m ʩ X}̼y;b1xRc !f;$6•>0NMeٻN ۗgc%#smkUcT(-әlU•&͌IDFX`1/W0iTw0fףKOtts7S»]Ζg=J-1Za>:-|32&u:Zw>XUs| endstream endobj 2363 0 obj 768 endobj 2364 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2362 0 R >> endobj 2365 0 obj << /Length 2366 0 R /Filter /FlateDecode >> stream xVIs0+ޭ!6tǩIs;00v$_ hNMc|=UaQX?h;A"@8WVHS4vo%unH]#UjÅv6 wڹ}`{j)G1DZ`?d14 8I2??}3#|U+CDO I†##!͓TRhI؎$],LBMh<88ᛛ)aLd>tƞKJEWуqiFw8덟gDPDT Qʜ2qaD`dbD %,lz8iY5+ǢTpVyl .CG'\ %dFq28WOI<|O{֊[?P8*D6(#$;0Y-@bUs 7^e"*_ljR8%u 2,`R۾[b^7ݗ91t _8FO1La4p+ nma[IE.wnGA"WNera2;fc~Pd"d*q̯( 2n^%NZp4nζ% -t2tzx6͘rc-M r?\~[u~hg1=]^j:].E99vuexwh3v`/IB̃x*Ƭ/? endstream endobj 2366 0 obj 785 endobj 2367 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2365 0 R >> endobj 2368 0 obj << /Length 2369 0 R /Filter /FlateDecode >> stream xVKs0+VU/ִiǝIǤ=60N}W 095Vo?z4P|OG9;㱒1Pu,bLnԢO-f۴"Z7w(Qn_4W+΍Y}W( >S%Տ 6w+ayyzi'w~7.ܣ,YpYdǟ"E͎I†# *:HI*8;]"?ux<+Z 9LP0Q#PZitipmlce*Xc 999x/A@>JRoYqsf>%ei>T.OqfQ#lDZ]* >qA$8"Ei嗷EZݾ̤"-GaJI:RoD !2bwPNMB`qTmV^(ITxd!,W0DQ|:GI n0GSd}`,9DrFY瘋hNTP2f#zj6&TV1-TQ4h0 C.n/v⹋Kr< NŘ {h1J, JLa)Zz%֖ ʆ:nm-pNp G2yO9`c&Z06 >iutЎrzC:nWs;_bvs1wIRަTJ,&Ve?T3|-RZQb]$e7fUz} endstream endobj 2369 0 obj 767 endobj 2370 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2368 0 R >> endobj 2371 0 obj << /Length 2372 0 R /Filter /FlateDecode >> stream xVMo@+V~4iJj8l1}g`S ؙyv`@8HnC̲[WVtA@_53V=_+o^ෑOψ[ר 'P(,;FrؒMi0im\o3ߍ`<*! ,Qd 4)X]MpDPPg&^'Oơ'5+y.Hm:`r™a*}>rr0żɔsyj`ln?@ڛ/H´aT0W;}݆yqKh%B$%mkd]@4[T]DDIdjs2Т/0゘STN~y+$Ĩ灙)JI,([w4E~^/^BkyQ #o*JU?+[Dɗ~/3uk2y ȗ3E5N oV9 T0o}9'&gZs\[ k%`ǁk 5dR6/pS)ϴ>(^--E+hfz!vgjQF@|SfU2u}~H0j3?+z]TB؍7ZzT1nq5ޤ8XejU¥"LBFoBzh6gj?5]޴O N[w2q0{LG@ˤ=`QoqzGٷڄQⴾp;NzgU endstream endobj 2372 0 obj 788 endobj 2373 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2371 0 R >> endobj 2374 0 obj << /Length 2375 0 R /Filter /FlateDecode >> stream xVKs0+VU/-iӎ;6i{3EbJlc<ֲ~ix`FH R 9TM1،Xeܴ 73b WQkZo_rNax</QK9r6 .bT-0٬OzJb5=& E+?[{Z%EMPN% c֘86Bώ+zL)]1d"D:Xm5I:cҡB`8Bԕ4ZSٓH WJɔBTpV FqC.r)(['gIIjy,,(Os$Ȏ$r4I Y bC54 L^ta*g7QjPQSJc.O9sRTdr~kl[4fPW2NO䡙%.2mGY+JSwcdXr&pt/rs(WŬ ;[i1Z$q5-=L&W"JJĭRpQ'VuuŽVI@\iڊcC>Zӑz)"TP'hToW=r~|;.L__Nn^Jõ=lNZbsG8y.oG{pY5?{x endstream endobj 2375 0 obj 766 endobj 2376 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2374 0 R >> endobj 2377 0 obj << /Length 2378 0 R /Filter /FlateDecode >> stream xVr0}+CT@(oIvܦd&x cm]&1={<[ (4\b !f;$6…<0LM(]}g#|bGQq~[u B7 zFa8I%q5 .\ zW_aϒ哗I Co= ?YZ΂7M/Wǟ"y IV#U *5 %JydDaNH?uN -]p&(eο@hkΔM.վivy3Hf1ηIhR(J1RRqHí>D+WkQG]DRnro^ 1~p&q\ ɍy 9_'aKHjAL0 P$dca1 } Y2D̼U+.@W&P .Å]9'3JM] KUU\J` d]iɰ mɊ*'vV‡i1 #F5=[|OfozEs\{ mfʸ`0kZ!Znjni(U([ mCL EQ2\9de[HBc W!μ Tx0j_gN#1v/.O^fjv%J|RU&F?l{#~Z2Kbĭ$gWV~ endstream endobj 2378 0 obj 772 endobj 2379 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2377 0 R >> endobj 2380 0 obj << /Length 2381 0 R /Filter /FlateDecode >> stream xVr0}+CTݸ1Mq'M^fL04yj٣J~.`e> endobj 2383 0 obj << /Length 2384 0 R /Filter /FlateDecode >> stream xVr0wWgU@(˴Iǝ4&3 "a14_Y5{=z<zui<Nl &Q) uMYAx#10|3n(܂g2 W"CqpoS 7|X?8Q nG0Nt(MVn[13B?XW%eAT8*j;x n4b@1*:\B jyVt.(),9:\&OrsVɴGr"JD[Pۘ 6[s]cSJyw_"! !2?<4dĴQHG%%IWYCC¦N5:  !Sbصr_y%@Ll*/@\2_K+028LY٢%[ FK ?,g܃jAW t)*_e毣rRLJ0tstG+_ȼ V/J~rc)1,p^҄CC[U XiE|kvX$~D`jUYj=2B02Zta/j:{kfv ,J"ke}j!}ν' 5b ୻:cڌ bH>dH[}~jGc|Gn=Sgg{r~q}fl59-5b}.C?;׋#zٺN: e endstream endobj 2384 0 obj 790 endobj 2385 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2383 0 R >> endobj 2386 0 obj << /Length 2387 0 R /Filter /FlateDecode >> stream xVKs0+VUAIӎ;uNg<䄱 @Sx^BoW+= (>.alImۚY*4\pĕ)'c7GYM>&$ӦZCfa%d1d l? LGq89cOpV(:p *T1lt^]0S\Jezp,9DpFU'tpvϟ)( taәv6Bj,i&Mm,4#[f[nO/J3{&n, +%7̸D0U{@> endobj 2389 0 obj << /Length 2390 0 R /Filter /FlateDecode >> stream xVMo0+^ +KECSE8-J4wIHz60xf޼yuP 9$ 1\[< C^1Woʴmd_j'cܵ]R(<;gB4]S%՟P8D x__e6͗J (Uuo"e|WC'IFwۍ$kN JTHS,:9biRoPYiC@p™K)dqcϰ>_"7Ce@y*3또c4{| 1y2k+yXI{ej9p  }f%k<󕲑1nh&$;6ʋAa LDՋD0L4^+0KO62 Jq?ZέOoL.Ϭߎ~tz]>\^\߷Ӡ9B sF5hsu<0_p6a[6_c>Uq endstream endobj 2390 0 obj 763 endobj 2391 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2389 0 R >> endobj 2392 0 obj << /Length 2393 0 R /Filter /FlateDecode >> stream xVKs0+VU/-I;M'0!x0 w6hNMcvO^,Sqpele \91& Q\icO,g7tDtx_VjQj=yu,`1ߕJeqLDrKa͑N (THғYtv|ȹ*A,*:ؖHN82fSk3!p}!L8w \fTC1:TAgQE.vmxA 5.%jm漦Y^$5%r=ƽJ!ߌ "))*;?&]cLR.<,z隟gI!K?GP&%a0 P#Y:Q-Y>hoA1 QhNF(6K ,69y#L*W_"\'C 9'3J]NFy`)(7$¾3{mtd@z ՁXzA3 6'E'K$V}vIòs;*N;TdZ.ՠҀ2{Wժ,fl̃J]IլRvJ;m=-Y)^z 뒲y7Ul!ĐdlbQiOPoJs.o8uzW7nn%8򽔚Yet{\~`GQax#IU%Y5_Q endstream endobj 2393 0 obj 774 endobj 2394 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2392 0 R >> endobj 2395 0 obj << /Length 2396 0 R /Filter /FlateDecode >> stream xVKs0+UAnMvҙt !xx D;]!6iOMcE.!^Z+v7Eq wZP`D͊Ez}N~?ܢպ{@ir~[^ƺ G$>~qQWj #6!XK8ӢZ:+r²VoY;׺l3O66I#8%k'\*Q#Q*"u|rE䴩ZQGlJ2e:#*>q]us. ΔܖI'qRP\麏6Qsց\%K^u6;.:=qO9f&r|#ȏpѨ/zv̄$'|_bJ|>֗EkU.Zj]5nHe#V 4-I[` HA$rGx4lx=lFϪ4'*9DpFӧWp<eh1|?^~@Ejs=Nγz)]Q6yq[㹡\ 0eo4S< y/a]z}娠K1u @(p[)7.{S$&SavN/g8NonO' Yuk8NUJMó2mu߷CF!eƬh\ endstream endobj 2396 0 obj 745 endobj 2397 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2395 0 R >> endobj 2398 0 obj << /Length 2399 0 R /Filter /FlateDecode >> stream xVQo0~W҇z16m: *"( @6IH8|w}>yqPyit W' =T+Ѓ?zƲ+v4*  ߝGP_Ǹk G]P(<9B8R<pϛ[zUiAeR=B{9j|uȺ8nT)QX]M..XS2,hz ?! g. ƍ5f"B`|.ġ1k *dT u<ANjv54됡(Rj2TS+Y^=8{ H 7F' ͸KFͯhIld{ E/@aFyqrtr&fL˚Xa<%hLE> :QE/E,eU3͞ +go5 s_2^}%9'3JBr0c xfx+N_x5&%wGa:\.'2)Lm<]";pw0V;I7Y\wnۀΡv\\# ̎Ez2W>GB],rwfvE'VXa@4d}Y22FKS <-c=., y٤ڂέOOLo/^Ny2_.a8jAstڣlj[-է~`N(m(>ic'?_ޙU}o endstream endobj 2399 0 obj 756 endobj 2400 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2398 0 R >> endobj 2401 0 obj << /Length 2402 0 R /Filter /FlateDecode >> stream xVKo@W̭pv_~lIӈJa!cbM6`7&6b=㝙o>ŀ}aWq7KcrN[l$FuiEf0XϴK[n'QotW# Sa|wqK\xDpe.0vQ·OnV΂OCYTǟK2zh[( X]MpJDtehFFX/3NvqA Q&(^L/7:k$=q nU#oqf>qu&q%r=F2ʸ r|#EW}P yI8TŢ(UqO(g Y݅9dI6a8u7I{q53 |!+Dp2E[PNM&w<„y#UmWʜs"9Ԯ G8CpG$ \鼩(74A5n6lj@VNX;=Qmn![I/vqXl !mcSF:\ 2tߺ?Vm R.q^L3&6AjmC2;Az!iȣEsjp%j2u/7Q%Ki|w]Yn(z6Yp6~Eq6_2]stt?+hK+AKM:ZоONF:9I;OI̪҃ endstream endobj 2402 0 obj 773 endobj 2403 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2401 0 R >> endobj 2404 0 obj << /Length 2405 0 R /Filter /FlateDecode >> stream xVKs0+U/1L&!x0 wӞvow%;Ct62vEI]7ZP`BEz{N۱v?ܡٹGir~;Vq\7ƒs:?( \OQ{{qp{4z .X-*+r/p'fW+Ow IŽ#յ.U( (\3}zZ2uuc*Ӑ3@Ar™a -@cSd!0+&8W}wL΋u^A<(R`1PFͰe>zd(J<ϳdM> endobj 2407 0 obj << /Length 2408 0 R /Filter /FlateDecode >> stream xVMs0+UAIL:&d<| gӞˮjg /獌`"+(0?FcQkoi;6"N[.G&(w,NQYgBQq%5o.&߯o*O2YCǏ|.m?Xw5eAitHv)]"[̖*-bD= "k"xɋʺ``}A|˽h01DPozb:s-}PU{Ek]4:P"e c(q[(Gq60IQl>%* *n,{8^}0ۼ~ꋪUV3>s"8i+@8X 2J=4&3oK7=!X{AuL;YMln¨Ly\~{G㩡Vi6~sr0[H*ߗT٫#fmd M&u>E.`d+%ƅXo3wρz^gxt3S8No~I{:6 #a#R쾌n:hl{=ƄQ|S&~?3~U endstream endobj 2408 0 obj 739 endobj 2409 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2407 0 R >> endobj 2410 0 obj << /Length 2411 0 R /Filter /FlateDecode >> stream xVKs0WU/[VnMvL20!dcDlt,0nNMlIk߮sI!\9;Ay"z@8[-o4bv}~;3-wc} T0<;#@-<>Qi <7d (aϞ`˹d1 EQ(BH -(']'Suq*AeћKUY>p(a?̀SjO'3<ΘRQW] pl ZL's K>݆5RcF`p#v4Jd#)|)=[v|TyU֎O}.s)B)[k&Q5I_7a^SAwdnv8f5( L! Mn5qofKgU0KuoJ)`l9KYEC8 ʠM1l^L6`V']QṾ&(&u`!,)&mcĺ,Զ=*PV6_A!.qi[0ʚdgOqe2 尽$GO$]]6cFbSH/1I5GC7FW_9W:|w~|s98vexwZq`oG¨{'nY5_ endstream endobj 2411 0 obj 769 endobj 2412 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2410 0 R >> endobj 2413 0 obj << /Length 2414 0 R /Filter /FlateDecode >> stream xVr0{s* ! &M3L2I̴8XvX}Wm S1CJa@:57?,cspeb&Sjf,WyNPr _r5:-"Sq0s#h "}j>p8u6˸H xUqO2j2r/!IFFKp  ([˳ZcuvV$e:&XǙ:"@p™K)d@fg̼xOC7#3|P(XWA֦b.@Re6HtZH)M$,_tDxDPP2ꔠ/4.Vn~ŋEƸ D/wMӬPk(RA]7I:O0Vi68)򬟇 [~U/LXA<`ȚQbGƛET,.C0 5ODXtNWf#kp9Qm;-B:'pQ+u*lrb!~0~j2#1l pq'i}VT[i@\FM{a2waaUB:y?[w9\XdMꭽ-})9J(MmVj QR5wb?:8^X@wpl p8{6qW>@nR\wsk`/v7G.qev8nu}2N>OО(5h}c t7ƄQ4ޘoG1~ endstream endobj 2414 0 obj 781 endobj 2415 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2413 0 R >> endobj 2416 0 obj << /Length 2417 0 R /Filter /FlateDecode >> stream xTKO0 W0QôCҵRlm`ߓivdS:jql'XD9!\= w^8 a 4ekmq"7RZktq_r^Tlvtݲ53m-%71w4 yEgvpFy C6OJ| ϢD /LE@k4 Gdn'eawaaEs:0˒]Q~Y,e_wa벨>hR<ԝ`Q2Q#$Ug P }TJ%Eer=e)EFХNug,q=OTQ4L1_NQOi0mse#p欚 jU= endstream endobj 2417 0 obj 379 endobj 2418 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2416 0 R >> endobj 2419 0 obj << /Length 2420 0 R /Filter /FlateDecode >> stream xVn0+1KR+sk6h{I=4Aʴ%&%PKDg{#geo1#S)DHhh 7؛^ac۸~{p6!{mһ?Tmޗ=! >  2{QHW\ɜW١ҟ޷tұOI臚5"(n@ǐhk̒wljR-7;M)h "J|i8r$ Q`k4!~θ]pI!*rHTl7[*hbE1FQY6壐zWbqXD,s=t'؝yz=7cbE 2,T2%cSg>;d#ڳZBt8zCIo5*W %QBQ@|?(+8UDqSmp=szDPyMj&'( g?K ftKQk':J źrlo6#|L2ljm,ŰV*{t*>LkT xV L/G3z:qԕgWv[ܓTȘsf3n֭j QӌC~,莹,Ŕ^꯬(OA2!21怴eۡ7P0@SӝJa_8:|@=P93?ON+7غɻL@g\ޙU$9a endstream endobj 2420 0 obj 777 endobj 2421 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2419 0 R >> endobj 2422 0 obj << /Length 2423 0 R /Filter /FlateDecode >> stream xTn0+hEIZtZ9Aڴ-J/r&a3`n:;)DHhhᖅnr>v;cs Í= _;n,£׺$bð>/! v1D% , q?| ⤨AO2fM|͑MP)崌x 1q[[*٭܂N(։ڤ^,LuȓMk9t 1\tK%b"s/+J)!D+U䥁R7 !yPeS}"Nu (" o^?鼨Ҫ3!Ʌ]4vL_T.wj( Q߇rWgJUPHRr[4 G!g""̽ du/H E%-\)S9!03{5`R 9N0uV?g,1&1T~ڌޛUI>0Q ;prCy^/> endobj 2425 0 obj << /Length 2426 0 R /Filter /FlateDecode >> stream xUMo0 WF}YR/Ænˊء- QNQJ:NkRh||z#H$ bBn CsaCzؘwEߣ;ɮ9ju+lK}#$R2."2)\$k9?"d)}u~ɏkrPU|US3աLm >KԐ1%[rlVyvqQMM:oaZYP .9r24Qz_b:dG:ʭfO9eKy澜l"_C6~*xa)bq&Koʴ\ cu.Cag=;.5SImrYc # cULwj̘C50m*ǭ/^F&%Fn"NHpdpN-B/Pj[d+O͗yEM"[^Zh {$$`ي @B ƉJ9q>aVsOgU|3yO2kth֌lH8ܩSޝA{Vx CC?4Wgہ9~~‘كS > endobj 2428 0 obj << /Length 2429 0 R /Filter /FlateDecode >> stream xTO0~_q w8m6iUDE(+DwΏBR4Hrw;?2HiXX%d 8qy⡵~a 6+Cʮo#}A d*ťAz+i#![w[;?ra,mo .QJVͯ=I?&H!zjQ'~MQ&%nnk[uO"ɥPy+t"\D2qR}rd-\9gMBlP2ńںAĆ')qgZpZr—t~/ :P #)AlUxԇ*Qug=n .`EM;j'>F1̮b؏ޝyE OG&%ά/n! endstream endobj 2429 0 obj 504 endobj 2430 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2428 0 R >> endobj 2431 0 obj << /Length 2432 0 R /Filter /FlateDecode >> stream xUr0{LfUZ rlt^ Lr͘8i1 x,>=VjS;H0y]0A04~0)osGQ?Ï(| n :5xρs Q|L!0 l#-58&=BpY]אZ7| >';; َZ~m6$ij7d v q@Jɭm̫ҀV(gYb!Jv ,bHqJɈ p>:K&(a62 Q 1*]\IWBaM 1z5l/MUcDQd.KQ.j@%RhX 94_.  IX(%MFFlzC26d5\~=rfVҍd^q" ҼFdIizB0n~*Fiƒ@Fi2tx"=-4ФqlΜB_u=e(JJ8C#pԥnf#fs0> endobj 2434 0 obj << /Length 2435 0 R /Filter /FlateDecode >> stream xVMs0+OU_ [δ3fiqQl$]!1Ƥ&ǒeуǀJsX-@q>$Gرh3 `FI}wwNAzx7!Ó5k}SQXzKNZ!?(pHaoHM?laQ^jr ӯ^Ă7U_e]?Et_F[pJVW%U!h[q"߹Sgp ,Cp&(eQ,<&$ MЇf>Aࢪ:ʠRIJMC tPA`uP4˸lz v-Vi(]DRWp~Fƴ▇2HJEMey4GQ+ 7kVe~4AJ7s9m8]$8]igg=r⿛M t/4Zq}(ߑ=XG XDI^erATXvL"Y.Sljy9<`ʭ6ŻԎ@}VŨ L:6u㖋,8Bܼ xdI=$vլ]]A;qk߾lxr K„"30X*$SJk mf{ _7O\q^Y:0_a/Xvs 'O+GfEv߅t5 ׁu-Ǿ/HH⨬gЖfªJ#ox]iDJRT;_ґSߡԞ_D#8^ϙHe)p(8zP|eU/Oʛ endstream endobj 2435 0 obj 838 endobj 2436 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2434 0 R >> endobj 2437 0 obj << /Length 2438 0 R /Filter /FlateDecode >> stream xVMs0+LUPnG:δMiI0ߕ'6 f}Zq0xA*Y67M,GhPtw?nFg?}ؙp Px\\<FDF&x= ^F( AC"r?.^|*u tY fw,3χ//2޸VHDbm=U J4:D/Vs}|s٩C~dU,t;v&r™aB&c"z m\ꦵ*^ҹi9"{.az{n}S(F!Z Ax!\CWS&oe17UQL}&d,c5Mp)ݴT (]UJtbf[uy6GT!HN82h= vL00쁇}yn\eYdE ѐ%( %Z'ۼXWv0GՒhj5:幨 "KD8}6CP yIEPjy0'7%> endobj 2443 0 obj << /Length 2444 0 R /Filter /FlateDecode >> stream xVKS0W0STlYR:m/0x0%Q̈́WG;K!Z߮e=8!)#ak# (0oD\GԵ5+jukm`չօvjw ʹo;S|8w`!*X}Ĩ,?~,!\d\9*uq| wK1#e|YBVCO.wHTV!#a{]*mIdOOZP\}Q0&6C>vB 66پJ݆[4Y%pFً&N T+9—ң~ P`B;N~Qqm \Ja5.bB YBPfw{ҍ9{ЋV"߳ W*ҠrD1C[ vG({*\Z/$y03b7G fz 9>(}ʚanm5npjO;\?'qC <)ڂKN[Ѽlߴ㢿2UV.> endobj 2446 0 obj << /Length 2447 0 R /Filter /FlateDecode >> stream xTMo@+]X6ǴMVj47. 91C{JE}vfn _%mI0*C2@jA!  v7k~E%btx۠37 |S!,$pDHnUJEXX("Hp u$ys2XIzcZm?FE4iB WPkwz&{qȬc$H*Dɉ> endobj 2449 0 obj << /Length 2450 0 R /Filter /FlateDecode >> stream x͔=O0wa9;vA`jڤ&imHί^' Ѝ"ޑ}A> endobj 2452 0 obj << /Length 2453 0 R /Filter /FlateDecode >> stream xTMo0W19Z6H=$QvYĚ,;,ޚ`'LҸ6{v0F Bˀlj? Etǹx_1-a}#g !c_b[!޽J GY~IZ{3'u\?@}'*!?X.7^;18*@"7Suh!"Dٵn[y]du΂:- QP%B@cd ed-ĸ ~M[\O|M > b0a1K^\\#.H 0Dֆ2ҡUQ*4ߙp:\eTkT(\H[k6="aҺy5> endobj 2455 0 obj << /Length 2456 0 R /Filter /FlateDecode >> stream xTMO0WxvbǽJH EmFJ]磐vo q[O~733HOJX~ JO!j!= lj?Eǹp\l7s ?&<7H~)moBVe!J%y.\R@|2ő-Fkojŕu^T;c@ͭ23u`Q.{HVMB߫rsA IQCV(Pt> endobj 2458 0 obj << /Length 2459 0 R /Filter /FlateDecode >> stream xTMo0 WJIeۀݲء-4q\X2QHc'nk I @zoݢ# -u-ACHK [tyc}~m!7/ {x"tMXwgTR5fw}]Zy"zT!WmIx WYZ,so&OdAJOԍṀ\SMCU'ʦ.V6+,3 \&V3 {!xK2(_E\DyR)غ* m$`+ J reEA0Π(mrȐT#4S8tWC|3]3 xu Î(=CefyYWvi^ }k *.*:Ë B/4X玿x9z]%@,[®N=&QH|ÉE9614](~Wc :d|˃V;<XOUu_kL endstream endobj 2459 0 obj 516 endobj 2460 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2458 0 R >> endobj 2461 0 obj << /Length 2462 0 R /Filter /FlateDecode >> stream xTn0+.I}k@onʊr$EKKv[0g9; @zo`Վ=#A)$R "2%c0}a6>0v'CIx YWn ޲L+m_RVe!J)yvSb yoK79t|g.e̍1kXW0c44MBN{p3vrNW <\j^eojxp9 endstream endobj 2462 0 obj 470 endobj 2463 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2461 0 R >> endobj 2464 0 obj << /Length 2465 0 R /Filter /FlateDecode >> stream xUMo0W̱H8-bZRD&a;I잶M=7ɫÀ;{(BLz\%¥lcԮ}Z%DP;/jÙ3-pBO]:,ޘpAxȢ|w>D*dN ~ŖEp)R$ϴ>epJT[\ԔRQ>e'f464].<- gR\uƖ==ν9W}y m]l6F4"$k Xa 3)0<*mCg~ j0N I\0y+_qq5<"RwVD]/dUhCR vե߻([͵ PR0l7^48C[)Tr'qX51w?ndE N?>^-z ݞ0i!Lq laQ5DJ-Jm}V?qd(k(;Ww?7}M& endstream endobj 2465 0 obj 595 endobj 2466 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2464 0 R >> endobj 2467 0 obj << /Length 2468 0 R /Filter /FlateDecode >> stream xTMo0W̱=IlsJmFC*THBWw|@h`o['xy-mL>$DeLpv!/{8}v!l7o9pϞ Ex Y%>Q!xQ!,Mʾ ^y,=ʂJ-iqtwHg2!}`iS%u: 7~LQ kԡ:tThQ5,vn^r7A*jmԍ DKq2:KM_S)1A#-JrK(Mf0 pk5ҐHMIn rUT;[mMig/ҏN/T#d&b[SG]~>P@lyb"k5&(/ACaFdO6E?Mf<}+5=E 7 ,RkU_Xw endstream endobj 2468 0 obj 464 endobj 2469 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2467 0 R >> endobj 2470 0 obj << /Length 2471 0 R /Filter /FlateDecode >> stream xTn0+۹Jm޲EC[U(K(j)wl -,޶(=yoo ~1Nj^zL1$t "Re~&~v`%Cfw$\/֕orB?7}Kؗ+ !YIѣXId wgE^H]ܰdԩu ‘7~,1<(@"7VCCDՋޗŢ)rq6ϏM[wHY$B! jtV\&̔LS =ku@W9ٮΚlS5бZR^iI1ǐ}cz.]S4CQC`̝ݟy`(<74P_| #xl# Y)S~Q; =@[*_:]#|4@O8PA82/5Sr;"^by endstream endobj 2471 0 obj 470 endobj 2472 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2470 0 R >> endobj 2473 0 obj << /Length 2474 0 R /Filter /FlateDecode >> stream xUn0+."ܚPԈPljKwKR@01gwvX+` Z !C \1ܰ[=AbS~nm 6kd%! p"҆ ͇8B|`mLKKi!bR-yoEʒ ɮtk?J%/YNYau z5ZD)"qe [ǜyᖍE#&`KDN<@{:׊aD.}4[AC4 -W勈=[ ,ߕiQV1kHQC(~*9)Mds)09WHYk[H,ٺ Q j.q pum{a4'Eb}X>iwPVO\]JUIY'/PL2-c!‰)(&#?L}>1_,S8>"yfW endstream endobj 2474 0 obj 527 endobj 2475 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2473 0 R >> endobj 2476 0 obj << /Length 2477 0 R /Filter /FlateDecode >> stream xTMo0W̱=qJ=D$讳 H lK{jg3~`ƙܱ`$x (X8L؆8bX>[BWGur-&૊ aާݧBzdm> endobj 2479 0 obj << /Length 2480 0 R /Filter /FlateDecode >> stream xVMo@+/X6Sj(°Ql [wfmܪRchoߛ7c י]搬>@q~0IEv3jwݻtX= [7QXxo#GhdOI 4~nh 7E 4o!}2LZ}-e7s> n)QSVAM))eUyzCIKS;{,Cp&(e2 !?8Wc?wf&|ZbM@gDy' {&'oǼ( ZP[t$)b/Rt|WEVIEPjMz滤Hђ1~uY7fizy,4{]O; V2eel&=R4sLpRTAmbX8M1zd$ͦ.RY:-AY!_/"ϜXMILVOm-r8OWb9QQVf)2ԸВ¾ Mtr'ދ,aK:1#S&10ߜQ|bV( a{/RG_#U{c endstream endobj 2480 0 obj 630 endobj 2481 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2479 0 R >> endobj 2482 0 obj << /Length 2483 0 R /Filter /FlateDecode >> stream xTKo0W̱=?8Vm*mC> ;ư .) F73gƅ} 0TLo,E_粫I],c:PM=U-"^.˦ӆ/nruk>EP:- QPF00=_)9|:w+( ȠqE ! Xyw[ I)LʼnJ(J/EY5fzXͭIeHBRqhl}8Td;{OQ5[yBUvql'V(Ѧ]uL!k،: ƙVG})}_@(x@MU?k› endstream endobj 2483 0 obj 484 endobj 2484 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2482 0 R >> endobj 2485 0 obj << /Length 2486 0 R /Filter /FlateDecode >> stream xV]o0}WoMäh{ n@]ېHX+MkC;{=>G (^gnPbݷ1H!'$1v~Ϩ[i7&+ FsǰBxDFa}̢O10 ݣ1%R"]Ҭ!36o ]fNoәKzp*3GAz.UԔRъUڐESTe2 gRL倐eR$qdjpl(P`2 oDy@ UTe#hIJNx@'*̸ r#EHͬ.VfR$Z+tUcչɍc1p`b> ]u{X4`Z9f&zPAGP n-X6?{niK4FN gݢ\lUb}T[vz@IiТ_BBcSf0Bu %1w]NkƐ$l>{,㽍?F;0F۳?MSȜ~#P(I{RғoWZC endstream endobj 2486 0 obj 612 endobj 2487 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2485 0 R >> endobj 2488 0 obj << /Length 2489 0 R /Filter /FlateDecode >> stream xTMo0W̱=qJ=T$.EZ ҏ1M`wQOM~3~` ?+a]`$x (,/Яqdߘc#BxVDU冰eSC!6B+Kp%NKys]l]4ۼ{{'vNv|e;]}H g5-ӃgHj;hQ M#l{orɻNВKBAu 菊8֭fNHp;+ W-T wy!*}qg["rD̬2TJq2CqUH'L[X$XRq*< mxhk QO"kS/!ɟ^5vlga\VGD]}AA]nڮv4.À?;Y1?ѵrɜBZ2_U! endstream endobj 2489 0 obj 487 endobj 2490 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2488 0 R >> endobj 2491 0 obj << /Length 2492 0 R /Filter /FlateDecode >> stream xUMo@+esT("6Q1 8îz vط18 gnF|ܷ-@F}pDHpn }nEWα2@\ <Ǡٮ#^|SV$pGHOֆ"ib&]2- Ik@-2\Lg^FУ/Y|H4ԡ;ThQ.;?,캱f\Lp)c|h6h-I7%)\ y(ʅ7,,-K. n`b"gn+OY6L8`3:6&qCHTP.$SSgZ> endobj 2494 0 obj << /Type /Action /S /GoTo /D [2334 0 R /XYZ 72.0 720.0 null] >> endobj 2495 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 257.88 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2494 0 R /H /I >> endobj 2496 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2494 0 R /H /I >> endobj 2497 0 obj << /Type /Action /S /GoTo /D [2337 0 R /XYZ 72.0 720.0 null] >> endobj 2498 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 256.22 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2497 0 R /H /I >> endobj 2499 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2497 0 R /H /I >> endobj 2500 0 obj << /Type /Action /S /GoTo /D [2340 0 R /XYZ 72.0 720.0 null] >> endobj 2501 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 266.21 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2500 0 R /H /I >> endobj 2502 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2500 0 R /H /I >> endobj 2503 0 obj << /Type /Action /S /GoTo /D [2343 0 R /XYZ 72.0 720.0 null] >> endobj 2504 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 264.55 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2503 0 R /H /I >> endobj 2505 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2503 0 R /H /I >> endobj 2506 0 obj << /Type /Action /S /GoTo /D [2346 0 R /XYZ 72.0 720.0 null] >> endobj 2507 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 262.6 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2506 0 R /H /I >> endobj 2508 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2506 0 R /H /I >> endobj 2509 0 obj << /Type /Action /S /GoTo /D [2349 0 R /XYZ 72.0 720.0 null] >> endobj 2510 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 235.95 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2509 0 R /H /I >> endobj 2511 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2509 0 R /H /I >> endobj 2512 0 obj << /Type /Action /S /GoTo /D [2352 0 R /XYZ 72.0 720.0 null] >> endobj 2513 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 234.83 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2512 0 R /H /I >> endobj 2514 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2512 0 R /H /I >> endobj 2515 0 obj << /Type /Action /S /GoTo /D [2355 0 R /XYZ 72.0 720.0 null] >> endobj 2516 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 252.04 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2515 0 R /H /I >> endobj 2517 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2515 0 R /H /I >> endobj 2518 0 obj << /Type /Action /S /GoTo /D [2358 0 R /XYZ 72.0 720.0 null] >> endobj 2519 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 241.49 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2518 0 R /H /I >> endobj 2520 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2518 0 R /H /I >> endobj 2521 0 obj << /Type /Action /S /GoTo /D [2361 0 R /XYZ 72.0 720.0 null] >> endobj 2522 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 246.5 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2521 0 R /H /I >> endobj 2523 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2521 0 R /H /I >> endobj 2524 0 obj << /Type /Action /S /GoTo /D [2364 0 R /XYZ 72.0 720.0 null] >> endobj 2525 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 242.6 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2524 0 R /H /I >> endobj 2526 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2524 0 R /H /I >> endobj 2527 0 obj << /Type /Action /S /GoTo /D [2367 0 R /XYZ 72.0 720.0 null] >> endobj 2528 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 271.5 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2527 0 R /H /I >> endobj 2529 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2527 0 R /H /I >> endobj 2530 0 obj << /Type /Action /S /GoTo /D [2370 0 R /XYZ 72.0 720.0 null] >> endobj 2531 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 249.28 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2530 0 R /H /I >> endobj 2532 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2530 0 R /H /I >> endobj 2533 0 obj << /Type /Action /S /GoTo /D [2373 0 R /XYZ 72.0 720.0 null] >> endobj 2534 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 250.39 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2533 0 R /H /I >> endobj 2535 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2533 0 R /H /I >> endobj 2536 0 obj << /Type /Action /S /GoTo /D [2376 0 R /XYZ 72.0 720.0 null] >> endobj 2537 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 259.28 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2536 0 R /H /I >> endobj 2538 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2536 0 R /H /I >> endobj 2539 0 obj << /Type /Action /S /GoTo /D [2379 0 R /XYZ 72.0 720.0 null] >> endobj 2540 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 269.27 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2539 0 R /H /I >> endobj 2541 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2539 0 R /H /I >> endobj 2542 0 obj << /Type /Action /S /GoTo /D [2382 0 R /XYZ 72.0 720.0 null] >> endobj 2543 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 260.39 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2542 0 R /H /I >> endobj 2544 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2542 0 R /H /I >> endobj 2545 0 obj << /Type /Action /S /GoTo /D [2385 0 R /XYZ 72.0 720.0 null] >> endobj 2546 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 278.16 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2545 0 R /H /I >> endobj 2547 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2545 0 R /H /I >> endobj 2548 0 obj << /Type /Action /S /GoTo /D [2388 0 R /XYZ 72.0 720.0 null] >> endobj 2549 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 301.5 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2548 0 R /H /I >> endobj 2550 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2548 0 R /H /I >> endobj 2551 0 obj << /Type /Action /S /GoTo /D [2391 0 R /XYZ 72.0 720.0 null] >> endobj 2552 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 254.82 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2551 0 R /H /I >> endobj 2553 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2551 0 R /H /I >> endobj 2554 0 obj << /Type /Action /S /GoTo /D [2394 0 R /XYZ 72.0 720.0 null] >> endobj 2555 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 254.84 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2554 0 R /H /I >> endobj 2556 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2554 0 R /H /I >> endobj 2557 0 obj << /Type /Action /S /GoTo /D [2397 0 R /XYZ 72.0 720.0 null] >> endobj 2558 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 243.16 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2557 0 R /H /I >> endobj 2559 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2557 0 R /H /I >> endobj 2560 0 obj << /Type /Action /S /GoTo /D [2400 0 R /XYZ 72.0 720.0 null] >> endobj 2561 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 250.94 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2560 0 R /H /I >> endobj 2562 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2560 0 R /H /I >> endobj 2563 0 obj << /Type /Action /S /GoTo /D [2403 0 R /XYZ 72.0 720.0 null] >> endobj 2564 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 229.83 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2563 0 R /H /I >> endobj 2565 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2563 0 R /H /I >> endobj 2566 0 obj << /Type /Action /S /GoTo /D [2406 0 R /XYZ 72.0 720.0 null] >> endobj 2567 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 234.84 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2566 0 R /H /I >> endobj 2568 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2566 0 R /H /I >> endobj 2569 0 obj << /Type /Action /S /GoTo /D [2409 0 R /XYZ 72.0 720.0 null] >> endobj 2570 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 236.5 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2569 0 R /H /I >> endobj 2571 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2569 0 R /H /I >> endobj 2572 0 obj << /Type /Action /S /GoTo /D [2412 0 R /XYZ 72.0 720.0 null] >> endobj 2573 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 258.16 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2572 0 R /H /I >> endobj 2574 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2572 0 R /H /I >> endobj 2575 0 obj << /Type /Action /S /GoTo /D [2415 0 R /XYZ 72.0 720.0 null] >> endobj 2576 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 252.05 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2575 0 R /H /I >> endobj 2577 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2575 0 R /H /I >> endobj 2578 0 obj << /Type /Action /S /GoTo /D [2418 0 R /XYZ 72.0 720.0 null] >> endobj 2579 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 373.5 227.21 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2578 0 R /H /I >> endobj 2580 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 373.5 539.998 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2578 0 R /H /I >> endobj 2581 0 obj << /Type /Action /S /GoTo /D [2421 0 R /XYZ 72.0 720.0 null] >> endobj 2582 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 258.99 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2581 0 R /H /I >> endobj 2583 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2581 0 R /H /I >> endobj 2584 0 obj << /Type /Action /S /GoTo /D [2424 0 R /XYZ 72.0 720.0 null] >> endobj 2585 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 242.33 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2584 0 R /H /I >> endobj 2586 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2584 0 R /H /I >> endobj 2587 0 obj << /Type /Action /S /GoTo /D [2427 0 R /XYZ 72.0 720.0 null] >> endobj 2588 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 239.55 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2587 0 R /H /I >> endobj 2589 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2587 0 R /H /I >> endobj 2590 0 obj << /Type /Action /S /GoTo /D [2430 0 R /XYZ 72.0 720.0 null] >> endobj 2591 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 250.65 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2590 0 R /H /I >> endobj 2592 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2590 0 R /H /I >> endobj 2593 0 obj << /Type /Action /S /GoTo /D [2433 0 R /XYZ 72.0 720.0 null] >> endobj 2594 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 233.69 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2593 0 R /H /I >> endobj 2595 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2593 0 R /H /I >> endobj 2596 0 obj << /Type /Action /S /GoTo /D [2436 0 R /XYZ 72.0 720.0 null] >> endobj 2597 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 228.14 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2596 0 R /H /I >> endobj 2598 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2596 0 R /H /I >> endobj 2599 0 obj << /Type /Action /S /GoTo /D [2439 0 R /XYZ 72.0 720.0 null] >> endobj 2600 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 269.8 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2599 0 R /H /I >> endobj 2601 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2599 0 R /H /I >> endobj 2602 0 obj << /Type /Action /S /GoTo /D [2442 0 R /XYZ 72.0 720.0 null] >> endobj 2603 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 224.82 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2602 0 R /H /I >> endobj 2604 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2602 0 R /H /I >> endobj 2605 0 obj << /Type /Action /S /GoTo /D [2445 0 R /XYZ 72.0 720.0 null] >> endobj 2606 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 237.58 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2605 0 R /H /I >> endobj 2607 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2605 0 R /H /I >> endobj 2608 0 obj << /Type /Action /S /GoTo /D [2448 0 R /XYZ 72.0 720.0 null] >> endobj 2609 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 227.04 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2608 0 R /H /I >> endobj 2610 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2608 0 R /H /I >> endobj 2611 0 obj << /Type /Action /S /GoTo /D [2451 0 R /XYZ 72.0 720.0 null] >> endobj 2612 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 241.5 191.81 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2611 0 R /H /I >> endobj 2613 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 241.5 539.998 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2611 0 R /H /I >> endobj 2614 0 obj << /Type /Action /S /GoTo /D [2454 0 R /XYZ 72.0 720.0 null] >> endobj 2615 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 232.88 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2614 0 R /H /I >> endobj 2616 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2614 0 R /H /I >> endobj 2617 0 obj << /Type /Action /S /GoTo /D [2457 0 R /XYZ 72.0 720.0 null] >> endobj 2618 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 243.43 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2617 0 R /H /I >> endobj 2619 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2617 0 R /H /I >> endobj 2620 0 obj << /Type /Action /S /GoTo /D [2460 0 R /XYZ 72.0 720.0 null] >> endobj 2621 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 242.89 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2620 0 R /H /I >> endobj 2622 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2620 0 R /H /I >> endobj 2623 0 obj << /Type /Action /S /GoTo /D [2463 0 R /XYZ 72.0 720.0 null] >> endobj 2624 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 230.66 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2623 0 R /H /I >> endobj 2625 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2623 0 R /H /I >> endobj 2626 0 obj << /Type /Action /S /GoTo /D [2466 0 R /XYZ 72.0 720.0 null] >> endobj 2627 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 241.21 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2626 0 R /H /I >> endobj 2628 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2626 0 R /H /I >> endobj 2629 0 obj << /Type /Action /S /GoTo /D [2469 0 R /XYZ 72.0 720.0 null] >> endobj 2630 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 221.78 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2629 0 R /H /I >> endobj 2631 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2629 0 R /H /I >> endobj 2632 0 obj << /Type /Action /S /GoTo /D [2472 0 R /XYZ 72.0 720.0 null] >> endobj 2633 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 246.78 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2632 0 R /H /I >> endobj 2634 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 157.5 539.998 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2632 0 R /H /I >> endobj 2635 0 obj << /Type /Action /S /GoTo /D [2475 0 R /XYZ 72.0 720.0 null] >> endobj 2636 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 257.59 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2635 0 R /H /I >> endobj 2637 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2635 0 R /H /I >> endobj 2638 0 obj << /Type /Action /S /GoTo /D [2478 0 R /XYZ 72.0 720.0 null] >> endobj 2639 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 283.97 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2638 0 R /H /I >> endobj 2640 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2638 0 R /H /I >> endobj 2641 0 obj << /Type /Action /S /GoTo /D [2481 0 R /XYZ 72.0 720.0 null] >> endobj 2642 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 242.59 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2641 0 R /H /I >> endobj 2643 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2641 0 R /H /I >> endobj 2644 0 obj << /Type /Action /S /GoTo /D [2484 0 R /XYZ 72.0 720.0 null] >> endobj 2645 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 268.97 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2644 0 R /H /I >> endobj 2646 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2644 0 R /H /I >> endobj 2647 0 obj << /Type /Action /S /GoTo /D [2487 0 R /XYZ 72.0 720.0 null] >> endobj 2648 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 238.16 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2647 0 R /H /I >> endobj 2649 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2647 0 R /H /I >> endobj 2650 0 obj << /Type /Action /S /GoTo /D [2490 0 R /XYZ 72.0 720.0 null] >> endobj 2651 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 264.54 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2650 0 R /H /I >> endobj 2652 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 85.5 539.998 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2650 0 R /H /I >> endobj 2653 0 obj << /Type /Action /S /GoTo /D [2493 0 R /XYZ 72.0 720.0 null] >> endobj 2654 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 218.72 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2653 0 R /H /I >> endobj 2655 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2653 0 R /H /I >> endobj 2656 0 obj << /Length 2657 0 R /Filter /FlateDecode >> stream xMu9;4so_2ꁗLd. q`J:TO,zy^ß>ɱn~O:~~x|x}տ~Ŀ^|!U__/oY_ǫ/_zy_~o~xuW~_?o?W_?_ŗY/wV*׷OwT}7?Wo}滯|Oc)bǧ߯o=SuzHN2222222ɲe%zY7mnAuzJ Օ!8Nr$IS,{RzwS,Rz]j\KMAAAIII,+YVdȲe#N,;Yd9r$IS,כRzS,Rz "Mx222222:y~g6׷j'_E/;o\ߪR'][U꠺Q=UR2222222ɲe%zYcQꤺKFz+d9r/R-qebX)qe"Q2222222ɲe%J,Y6ldɲe'A,YNd9rebX!yebXf,bE,eeeeewur^ۋWv݂w||opw[G;_IAp-LײZV"XE`&]v"8Dp)S'Zy1uZu\k!Q̸.Zong%n۔+CqRTwAuPMS,Cj\3O\Sr=5,,,,,,,+YV~zEN=nJT']qPT I,Xb"Pb"R@]rF& $$$$J,+Y6ldȲe'N,Yd9r53Z,Dj\srMN.bf'Reeeeee+;~r]Aa(?} ܏R(T.: ꠺Q=^'BMS,frm˵Cj\=.b6{HMAAAIIII,+Y^ף\?[uq-uRݥ.SZJ5YNd92\=˵S,frmZ,f,,,,,,,+YVdȲe#F,;Yvd9r$I,XR)kb6{H-kdddddd(宎YG) F)O_|"wO::NY>%_{P('յ ET>IuDT^M5L5L5L5M5M5Mj5z^?Qb+by|PON8,Mu4iT&IumS$յQrR][U$/6PnaaaiiiiTVSmLj7nTS:Lu4Ik 夺PNk' 夺H^HufTTTTTTT?wσy'oݯ~_}?86f7unr=c=c=c=cMMMMQ7=GhmӣozM7=Ʀscnz=8_svw)g'ԕ!gIu|vN-re9ŲbYN,E,KR2222222ɲe%J,Y6ldɲe'A,YNd9rebX!qebXF(bE,eeeeeee%J,+Y6ldȲe'N,Yd9r<2C,<2OS,eBAAAIII5T1QG/oۿ}㻗ifwu{ݧF]>6f7MMMQ7=GhmӣmzM7=ƦccnzMǞG{qyĹG{qyDe#6=b#6=r#7=r#7=GmӣmzM7=GcclzM1w.}9x*//X,_OWˇk2iy$յrR]K%/8SnaaaiiiiTVSmLj7nTS:Lu4I_TlIuզTm uܔjjjjjjjj5jT6SmLj7nTS:Mu$յrR]k%?IuLT:uIuZTTTTTT-s80/Y7ӿYwԉ{|"CS~ԡ<,oOW')'N;夺wTTTTTTTVS꼂lu+by|PONzaS:MuZ&@9EPNkATM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IuTIuT׺ Ujjjjjj]Gy0xJm?ヹ+w/hn@y|J^M+7jٴr#O;TK!RHS S S SMSMSMSZMj5fTvSMu0aTNSAqj'IqjRBQL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5R̓T Y˯7oo?||zpWa~^~yyʻBY>)?Ay!59TTTTTTTTVSayX,by|P>NrS:Mu$59T@TrR]IuM(7000444jTVSmLj7nTS:Lu4IyjIyj'f!,TTTTTTTk<b`77߽ws=xGƔW׭1iy5<,ojjjj5jT6SmLj7nTS:Mu$ukL9[cOR]Ɣ5T׭1ZMj5jT6SM0aTNS:IuSNXT׭1夺n%/n)7000444uk|W9w_ϧ߽Ͽ}Ïr)c/tU7ݞ2fSvf76=ڦG}clzM16={2y|zFwy|zN)c]n#6=b#6=r#7=r#7=GmӣmzM7=GcclzM1<>=elnSv=OOʞǧt鑛j*\oVoo~xz{Fw}==˯iĕ֥<-7)˛{rR]oJ^HuTTTTTTTTVSLj3fTvS:Lu4iT')'֡')'!夺:TTTTTTTVSZMj3fTvS:Lu0iT')'֡')'֡T[jjjjjjq<ƃDY?M%>~|%b"ñk,!yZ%%$˛5Toc jjjjjjjj5jT6SmLj7nTS:Mu$XBrR% ?I6Toc I6TTTTTTTVSZMj3fTvS:Lu0iT'm,IzK@^H6TTTTTTT%<惱:Gc??E6u٦<,oOʟmȫClSFN rj9IZNR-TK!RL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IT 8H5NRT$(Tjjjjjjjj5jT6SmLj7nTS:Mu$/8_ϼe iyCyX,'S^-N9'SN픛jjjjjjj5jT6SmLj7nTS:Mu$ud夺p$u夺w:rS S S SMSMSMSMSZMj3fTvSMu0aTNR]'SPN IuZA93,$/NTTTTTTT 1<C|_bۿⶾno!oOo!o!O;TNSZR-TI$rj)Z Bjjjjjjj5jmU۶sȫ۶sNm9aS:MujAqj'IQH5 F10004444jT6SmLj7nTS:Mu$3.|V߾gٙ(sV,ɟṓf9>;s''ggxnaaaiiiiTVSmLj7nTS:Lu4II;9>;s''ggxnTṓjjjjjjjj5jT6SmLj7nTS:Mu$ggx ύ$ggx ϝTṓjjjjjjU ~_?}|G憐x}5Џf|˫C5<-夺FPNk!yjjjjjjj5jRͫ}<-Y>)jNS:Iu #('5T0rR] aZMj5fT6SM0aTNS:Iu #('5$5T0rR]M5L5L5L5M5M*<m|ǯdۧ~>||Ç/;n8Z?n;Nug@yX,_wWMu4Ikc夺9PNk夺@H^HumTTTTTTTTVS sv΀Y>) (ʯ;rS:Mu$յrR]M%?IumT{_AVSZMj3fTvS:Lu0aTNR]U('յwETNIukBJ}:Ag kK}yo~|o߽կ~޽Ϳo~wyۋ ݏ!ZByZ)_<,oZB9)VS8kG|=PS(yX,J^-7iT')ZB9)Z"y!յ"rS S S S SMSMSMSZMj3fTvSMu0aTNSVPNkE')ZB9)jjjjj)wy䠽<~?/ԯK遃rwc]S>).)ʯKb.ZA9ZA9R]K1(70000444jTKy;,˛FW%1iNS:MuZA9>;k#?Iu-ŠTmCIu-ŠTTTTTTTVSZMj3fTvS:Lu0iT'Z!Ik)夺bH^Hu-ŠTTTTTTT T @e<oޯ7w#uywr?! ˛ɫ8.i R=DrS S S S SMSMSMSZMu=hw;:p7"yX,gH^-H4iT'ޞh"9ޞoIHNgHN'HnaaaiiiTVSLj3nTS:Lu4iTonToq$C]$'#^ /z{lrg9_˓X_?I*uk܏%.u*uPݨPUJre9Ų,E,KR222222ɲe%J,Y6ldɲe'A,Yd9rebX!qebX)Q2XF! $$$$J,+Y6ldȲe'N,Yd9r<2C,<2OS,eBAAAAIIϦ ww?mxcfOgӛO/o׏ܵWywg.뇮ay|R~J^-$յrR]+I('յrR]+I$/VPnaaaaiiiTVSmLj3nTS:Lu4iTJIu$$յrR]+I('յrS S S SMSMSMSZMj5fTvSMu0aTNSVPNk%'$ZI"y!յrS S S SMSMSMS|s_f;T^v7׏3槙+OvAS~<,o4iT:#WT:#WB\M5L5L5L5M5M5M5Mj5zqNNNy?,˛Q,4iT:#rR]gRN\ 3r)70000444jT6SmLj7nTS:Mu4I\Iu+I\IuK93r)700044K<端}wOwK|rqQ/u7'uAuEyZ)S S S SMSMSMSZM=mF~]gQ7'uAuEyZnTNSkPNk'ZA9jjjjjjj5jT6SmLj7nTS:Mu$յ\rR]5$?Iu-נTr jjjjjjwy|p/]ďz\GG:렼~X7'XnTNSz3IN1z3IN1Toc&M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu3QNk$IkD91夺Ljjjjjjj5jT6SmLj7nTS:Mu$5fTטITטrR]c& 1lt_,L0/L{zȗ񺮷ףC_~@rZwޒI:[j98ڋ#Ik/夺H^HušTTTTTTTTVSjb#oiy|=NY>)_ZnTNR]{q('յrR]{q('յGBk/ZMj5fT6SM0aTNS:IušT^OR]{q('յrR]{q(700044g㗻u~0~i??֮S]uOyZ).)˛ҟjNS:IuۡT׺IuۡT׺ u;jjjjjjjj5jץq;uOyX,_Wץ?iNS:MuZC9u;PNk夺PnaaaiiiTVSLj3nTS:Lu4iT׺Iuۑ$յnrR]v$/PnaaaiiiGwyƫ/}.,^W|Go߾|Own4zm^n(vI>(_ $O;kaay|R^Mj5fTvSM0aTNSl*IT꧳ 'OgST?MVSZMj3fTvS:Lu0iTNRmTo!?IiPrRmTo%7000444jTVSmLj7nTS:Lu4IMm '6 JNMl)m6[J-͖fKiRlQG>ȯ_VGXǷ__O|5q?iOżA<-yMu$rj9HZNR-'TK!RHR-TTTTTTTVSZMj3fTvS:Lu0iT'Aqj'IqjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR̓T /܃usv}݂vn8hkMZZ)ay|R>A4iT(rR] Iu('5 QnaaaaiiiTVSmLj3nTS:Lu4iT(rR] OR] Iu('5 TTTTTTTVSZMj3fTvS:Lu0iT'Q夺FAFAI^Hu(7000444`t36=]弾r?ʯ gNuLyX,[('ux'[('ux 夺oTTTTTTTVS.:̶Oʯ gʫ™S~]8S0iT'[('ux'[('uxT-jjjjjjjj5jT6SmMj7nTS:Mu:rR]PNIu"y!ux +`*'=\ޯknP>(AByZ)AByX,S:Lu4Iku夺VPNku夺VH^HuTTTTTTTTVSLj3fTvS:Lu4iT'=Z#Iku夺VPNkuZMj5jT6SM0aTNS:IuTOR]{('յGBkuVU/au èO͇y_FIfy|H^0rR-'TI$RHR-TTTTTTTTVSLj3nTvS:Lu4iT 8H5RT$8I5NRBQH5VSZMj3fTvS:Lu0iTNR̓T (\(74jTVSmLj7nTS:Lu4I IuY!I IuY!y!udZMj5fTvSM0aTNSTב:rR]GVH^HuYA>˯{7ndxzO]-E^~i'X^-?[] 6rR}0`#' 6rR}0T/ M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu9>_T/ I€T/ M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu9>_T/ I€?R}0`#7000444gNN<,˛夺.ꚺH~ꚺPNkB9 ZMj5jT6SM0aTNS:IuM]('5u$5uTEBkBVSZMj3fTvS:Lu0iT' 夺.ꚺPNk"y!5uTTTTTTT?_%qg/4ns$s(kc(O;kay|R9IN1 VSz]Ǩ_szY>)_[$4iT Iu=ATc('Iu=A0000444jT6SmLj7nTS:Mu4I1 z '0PN1 z co>t|~yW/$$O;aprS:Lu4iTA:ȃrR]yPN  <(70000444jT6SmLj7nTS:Mu4I Iu!I IuA9<(7000444jTVSmLj7nTS:Lu4I Iu!I Iu!y!ul]Y>}_|}_|?>_wtʧW͸~/?v.{uϏCOϯo|x}տ~ĿϿ__/oY_ǫ/|^{=k_< 5])ZG endstream endobj 2657 0 obj 14468 endobj 2658 0 obj [ 2495 0 R 2496 0 R 2498 0 R 2499 0 R 2501 0 R 2502 0 R 2504 0 R 2505 0 R 2507 0 R 2508 0 R 2510 0 R 2511 0 R 2513 0 R 2514 0 R 2516 0 R 2517 0 R 2519 0 R 2520 0 R 2522 0 R 2523 0 R 2525 0 R 2526 0 R 2528 0 R 2529 0 R 2531 0 R 2532 0 R 2534 0 R 2535 0 R 2537 0 R 2538 0 R 2540 0 R 2541 0 R 2543 0 R 2544 0 R 2546 0 R 2547 0 R 2549 0 R 2550 0 R 2552 0 R 2553 0 R 2555 0 R 2556 0 R 2558 0 R 2559 0 R 2561 0 R 2562 0 R 2564 0 R 2565 0 R 2567 0 R 2568 0 R 2570 0 R 2571 0 R 2573 0 R 2574 0 R 2576 0 R 2577 0 R 2579 0 R 2580 0 R 2582 0 R 2583 0 R 2585 0 R 2586 0 R 2588 0 R 2589 0 R 2591 0 R 2592 0 R 2594 0 R 2595 0 R 2597 0 R 2598 0 R 2600 0 R 2601 0 R 2603 0 R 2604 0 R 2606 0 R 2607 0 R 2609 0 R 2610 0 R 2612 0 R 2613 0 R 2615 0 R 2616 0 R 2618 0 R 2619 0 R 2621 0 R 2622 0 R 2624 0 R 2625 0 R 2627 0 R 2628 0 R 2630 0 R 2631 0 R 2633 0 R 2634 0 R 2636 0 R 2637 0 R 2639 0 R 2640 0 R 2642 0 R 2643 0 R 2645 0 R 2646 0 R 2648 0 R 2649 0 R 2651 0 R 2652 0 R 2654 0 R 2655 0 R ] endobj 2659 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 2658 0 R /Contents 2656 0 R >> endobj 2660 0 obj << /Length 2661 0 R /Filter /FlateDecode >> stream xUMo@+eskJU-F H`J]=x3oގum,wCqdpq? nX-н~nm 6pĻ#tE&\GyӞ|W6ޗtGi' L %~%4B祭>Aͻ*\J:e73=l]{g$dz;& lMɋlaΊvsaLpȩ Ds2 C:@aB>#%eJ 6]Adv1KWZ޳ASA;2);9RQh!w,3)D&u}Ĕv+͂P5CY慥n*N_x ?2bpݑ>8Q+E-a;Xs# >\Jɓ7v]4L endstream endobj 2661 0 obj 545 endobj 2662 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2660 0 R >> endobj 2663 0 obj << /Length 2664 0 R /Filter /FlateDecode >> stream xTMo0 WQAw]1xHlv;ߏvoq/zG&9;a! 4- s;aw!Gr=qD]冰fR*^GYHNwpaYҬ]svgv*UBJ!2􍤯y1;@"7Sݡ@3UQ-ݏڭy嚧*om:bN@K.BTҿhA+&ڠbߥ4cB2E+ P,g ,]ukQx;';kyQ֛#6XͭIeҒRTB*Q?Zb7S6> endobj 2666 0 obj << /Length 2667 0 R /Filter /FlateDecode >> stream xVn0+rњ[ E{(DhIc J}E圚؆I 8o)>;~L ybB<8Q?p"}Ә+bFvam"}g!ݹ{hqN;]unDȇF`|IO|>q.jpwq/+Q@"6Z6t&Gr>X7Mi}<7 mp F=u 1Bx'F y}6JTY![m&"('b''vrFf oJ,d^-!k乩9@=F3kUot{h; J{oַaqW(s(_˪}!߲#c#hV> endobj 2669 0 obj << /Length 2670 0 R /Filter /FlateDecode >> stream xTMo0+?8ǪI*m$" ;+ݥ=5ߌ1 dcqd0WLw,Vsa_^!|no 7jP{Cy#ӵ!zxGHC42)ܔ29['> endobj 2672 0 obj << /Length 2673 0 R /Filter /FlateDecode >> stream xUn0+r(X4-C B{H@h[L)$Xܚ؆I<G5JsH6coc8`$GsC׸u+vO3ѡ(|nњ݇'s7o@車y(DQZ@h !uQhns6=D߼h/S;lOxGƝ28% kj.UhԔRыRV/syYڐ4N$' J&rt.v@&y.8W9xYG4vCeCijVH8T_/(DZBv2.g\ٱ"1! KxcOA#%4k^AYd'LOCGiU֦Ze~]]+!]t61f6uReev4auP:!' 5Sj:bpL`uJ8Ѧ;j{0,j&tS$2K& וS2SEBpbE5^"IU OkcK ,oSYrk,$Ƥdݯ3lo= F?<GsMV( ^c)7Uu)1 endstream endobj 2673 0 obj 662 endobj 2674 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2672 0 R >> endobj 2675 0 obj << /Length 2676 0 R /Filter /FlateDecode >> stream xTn0+b9p#45fXJPc˶rK" "7<2H,nI+ هDb@h.{q373{xx,0% ax@]ņb3K!6AnG9HHZg%|.V!_C׍o?Bv.L,E_粫I],vVUZ"AzSM }Xa7}ڄ^#*R(DAhzK[0ƁR)o^!o*@usc׾1e)y,1Q;̿PMьTwD sF=iN9B*1Uo{~[лЖT;gl:RK > endobj 2678 0 obj << /Length 2679 0 R /Filter /FlateDecode >> stream xV]O0}ϯ4m Mg?̠pj\]#!nQk3'*mƱodnKkQb~L\brZ)\Mf2 u!5g&lZN}m]8l+cAOuS=JYeе!8 Ӡ g& W2- A&6s[#wY-!@ /<TRfZ6w1Aض*S{Oz{ 9ܭHW>q0?Ai10/]yD$ 6Ons *[(:z9+^U8.g8ˢ8 JYeTΨ;{w5N"'uu^"~mF们'vvzs#6 kYʩ[5**ۧ3{zn.ePEm_圝_?Ώx,oƩՓ2'7q*#ZjHRA ՘}曍 9}>2g=z8]'2Y)qNߛYquRYy힚d :r,@5pN(wF7#~ endstream endobj 2679 0 obj 733 endobj 2680 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2678 0 R >> endobj 2681 0 obj << /Length 2682 0 R /Filter /FlateDecode >> stream xTMS0WPW,p`&qL_ئߕ?vV3o'&:u= #ASHx>ͥGpq ~nE֭~?q!'[ &܃ևl5K?Unv<Ûr_Y) WM0/馈2Iړ;/E8٩tIvu#oxW> endobj 2684 0 obj << /Length 2685 0 R /Filter /FlateDecode >> stream xVr0wd/e>']5OH2ld D}xJib{ \8GP =ӇP0.F!d| (0'VsOߝ{&iՈyW,O7(|'O܀ p˙>E'k=NYI\TRu7SN;UïI/t\'l[e80詡:hAA(EOyhV2KZehE1QNYCߢ(7wcT0C Hd&'LYБ!:$agMU+HE-Ȝ-# xīZnSbB3'B7W-q{@x- Te*eQJ]Xy/T5<&2KYd5H jSHkvt8;֛=ֲ0;pU tw"i0e6^zzMzS)ƝKN.}Z&16z/lx?Ѭ̼Vu3[˦7acf]QڴHfvߗq) hc&vPnZ2N`QuaefJh$ !+=*]Ǿ@i?/^D2W+=-U\1 Ad%sm9QRxs)sJ\o6Mj֐,ݽViۊ"]|%G-ۑ9޾EWϧG7VUSb endstream endobj 2685 0 obj 799 endobj 2686 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2684 0 R >> endobj 2687 0 obj << /Length 2688 0 R /Filter /FlateDecode >> stream xXKo6WVUzoŶM)ТI^DBd#},kƁq8Ï3F~g!.QBPh"rCP++]@!.{ŌRζǸ*[ό00 9t:Ç Mņbh^^b#bX/wxbi龦'}vs7;t)O$'d҂=!۠A<kݾ j}ETCǺ;DwurEYa(t:Eݙ&#@%Dq$VFr1;;-[z ~]~䄱$M+_w}R#dPz-\am5Ӭ:HfiiK'q"$%=Q ?e6}+F UDq=qO_8k[3t$j81ǪbNFvx%TЉ4 J*"m? M[G[-Nڈ6Zcז-%hl6m9d"<1.hF 8x >dcJQI85C~id=Ԛ)Rp(3Tc~}jA E$ة"{2`հ:#>dcq?!<_ЧLq9R-'OZzԘIJEםh8+6P0zdIIe/O؟<w"9O $qөiaZ ЄFo{x."Oَ 9D4Cvg&~WNa%KNn(Q5#*5(<?*X0EJjκcS{,T6 ik+ n?nG0 YUEq" xB[;Kkz-KWTD2h[H P,֣j,aM> endobj 2690 0 obj << /Length 2691 0 R /Filter /FlateDecode >> stream xUn0+bn)=5"4KؒmjX>Hb"={LH+;h#`uM ~pńK: ہv++69cvN |u)S܅'.&:|SV<>K"󤡗43)씴p6]ehW${;^7WAVѬ2Ϣo];e$d> endobj 2693 0 obj << /Length 2694 0 R /Filter /FlateDecode >> stream xTMo0 WQ lzmQHlv6ߏv/zHj ~1V|ö&HPQ Bsܲ_=Gcv_[{~!\{BGz O’]B"mC̆cWFDn^C[ U'JY;srͮ[ВKV:ܻ6P"IiFSY| Q@SM]]üؔk׸EȄ4# 5S{LAWuOG[Xˤ%A T\j;"8 BhD[k)6d! O<;eXyD릚>UڗOEqb,:E?ja70s&5"';TG?D endstream endobj 2694 0 obj 489 endobj 2695 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2693 0 R >> endobj 2696 0 obj << /Length 2697 0 R /Filter /FlateDecode >> stream xVR0+f_bG.:eeDc˔##qM!ҕϽGGDz'Hylc s 0ܠhwjHm]+d FiuKbD+nΧF!JQ !!$&jR/8(.o |3^꒵o8Rbhn) S}uR*ZQ2Sֆs[-t6P 3A)ù&&\0+Г,9o*[l u:T9PJ/`YOE7a'C;i|ߊNyhAKdJ\eq)W4YIm cie])4JW6j1 v*~*JeTVŕ3Q@ :OŗS*,&Ȗ*Tu2XIK.K9dR/L M=ӣ *Q{gɡsG.!"Y5_Xx,^vfzUB9t!|UlL g`AE:gFïLQVw@А0aG\ٔ8W&)uaȹXN\N%DrGCQu$ٶ^4.{м׶Y>lo7{=kǩ46}rS{4d<..Ԧ+1zXA5͎t:jA Z~V* Xg(28bl^Kgm|!1Hcrz;2}0JǼ7V~ۍ endstream endobj 2697 0 obj 771 endobj 2698 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2696 0 R >> endobj 2699 0 obj << /Length 2700 0 R /Filter /FlateDecode >> stream xTKo0+J;~qJ=TZ-jIhKPY ʿ&>S1ofp@ZnF&x1Z!F!Nns t~yi =+C &eo*6* K[*אAly[o7Mi{ |FEEG=TMWt9ƒQؘHă_8)Gطڝ~WE2FSx*ؓxL+@&,BBSUqdfV(Ѯoϻ>PJ/-(0)պ7F͵c8K9}⽫T Yuѕa endstream endobj 2700 0 obj 502 endobj 2701 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2699 0 R >> endobj 2702 0 obj << /Length 2703 0 R /Filter /FlateDecode >> stream xVn0+h EsKHE !Ufl"Hr}Z,Ye6,3qHb@{a=Y C9.0pڊ_P3#f۴}m%kxjwҺo!rQ:iJ\!#$DpD'-& c¬P/ SW#UW{epJ<:8CPRJE#J?eQiC|q\sD` S)0#'+ν=eKuhux(Smu0isf9<,5rxM&iV5G6/DSĦGlQ;;Qǁ׷BIN.̮(s#]\*)R j1i#TtԮbTqF^12&mU-Cꤜ 8Fuɴ:B8weXs@>UeoTh.* ̻Asv֬ajt^׋՜ұJ.mp4oU1 Oَw-?jK endstream endobj 2703 0 obj 768 endobj 2704 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2702 0 R >> endobj 2705 0 obj << /Length 2706 0 R /Filter /FlateDecode >> stream xUKo0 WeÂݡ+ 7QFކQ~$8emX (a ZAD} #` v ԟӇ{ڭv5 'hu`6 B_7 },҆DBGh~Z'}smWyATo |Lz _Y__EGƝ28% {P<Ш)m5W 9LP0q2ɹM XMh H̍s]gcL P)QPm{> endobj 2708 0 obj << /Length 2709 0 R /Filter /FlateDecode >> stream xT=o0+nlG☱R[C%DBJ$Pſ'@[!|֓K٠4,+ &<3ca `{hw$5AX/ቌ܃! aNCrC?zH}'4Tp4Z  y:I ECLF+tPWY_<}T *CuVe@%_eQ_b[|IBWzJF'THN9g"pv|28Z6?ιj. tsG"Ou4y$-Q1[QTmE\T}B-V>TmN ulK}&2^)9/Y5<'4G]1n?]4h0gߕ j/d~ endstream endobj 2709 0 obj 418 endobj 2710 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2708 0 R >> endobj 2711 0 obj << /Length 2712 0 R /Filter /FlateDecode >> stream xTn0+ $%R1@ZӶPYR$EK=2Lb @zb{0FSHDeHpB_ywǵpl;+gvwO>dBMՆa71) ke,D\I%ܽ[f"!NƵ!nR%S(5kŴ}LQ ꩗QCED5ROw}tieyk7AR(DA TB{'9~HiO'aUVl@O m )ڥ+x(wUZE(/^F]B Zko:(&kP{F 5ZF}Ь9z!P?S}K;) Q`n邈i닯L๠x`('ݺdS*i%Y.?Q"ݹNBRkz̊" pf"E?a4\,WK8<\Ƌ+ꟿm䡻 endstream endobj 2712 0 obj 498 endobj 2713 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2711 0 R >> endobj 2714 0 obj << /Length 2715 0 R /Filter /FlateDecode >> stream xUKs0W1IT=lʍ4Cɤ$!0 Ć0]w&O׷kŀsn8Lc 9 1f Kb@ }N͉yv<ŘCފ, _GD;ruк9B?oKFSP ?#)r/d>G`#߬_T0"Lfu/IV<cFDbMAE)[RI<i /z̹9 gRqU.J4sY`8zFπ':MarH {X0k*4L Que%=\Boʸ 65"3(lZe$g+%@r( hA V3cpg;ચ&{NoHhwл' Vzҗv/8M T^&:*㨴Fp`崉b2edu/s>-ǥaփ8M\7>?vQ -+(#%$HtiwQY}w W ܿ|F̩w~ h Mˤ5\3K7zy␒Lc’Ąζa^"ye0vcӖyQjzct^C7i4sxFQUڷMY58 endstream endobj 2715 0 obj 678 endobj 2716 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2714 0 R >> endobj 2717 0 obj << /Length 2718 0 R /Filter /FlateDecode >> stream xT=O0+n|9`P1i"v$c; MH+[9{횹V[1 B,Gpp}gnTC MâkGp$ݐFgB𪴍_:ϗ^s _L-O( "1-,olר0Aa~8h2ժj"`8ݔ aəHdQ`䐷zՔF`Vkh ^W /U)42J rSUX͉S3ӆD!ё? 1Yrb~F嗿KaHy1x0i.U^ endstream endobj 2718 0 obj 339 endobj 2719 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2717 0 R >> endobj 2720 0 obj << /Length 2721 0 R /Filter /FlateDecode >> stream xUn0+%bvIJ[zHaX@IP(2m %G.l=5 sA`CqL8QNUslv[+~XwwŪӵKk1"X;u/#J}IG@y%)!<8*Tr ]T#+*VygqU02EC[>"FuDE&6΋挶`KDNe\:AF{5(=Mp/H 0$? 1Yq0( I3ҕn+nQF>C!s]$=qކgD2*]5ռRMN9yI%۔{q3#+2MG^@u. F? 2Y1.?tQUo:`n`0LBtQf`KAEZGjotI:r 뗵>xzpVm'ͯM0k(#2ͭk'I> endobj 2723 0 obj << /Length 2724 0 R /Filter /FlateDecode >> stream xVMo@+C"%cVM*P) JqT{m#ap|`S2˛yft^ ,Sm ]ÄK ͅ b/^U'+N >E`ϮN3]YW QwMɯ Yde GV2I-d Ѯ5YEglU鯼Е6#:>8 n#r<8.|&$Eu|a.<S6*r(6 %{Q8]7I&g/~DyBV~oi㼁#sX _K}VEJ$K4]篳ԴOzߪhi^n<_RT) %1]1QPdT8m5.;Q*ȵVy/Nj(Ip@T$qJ$ 8S)Ȩ{M:ޙ5206mnicuY\-C76kQ7[ /:CTrD=Wep۲{anXKQң)Qܨ?` -(a# '} Z ʤ0hk@V+5ɞ=+=Ւ>36#j'^£66ڝupb&g۰6b};2?.xcU4Y endstream endobj 2724 0 obj 729 endobj 2725 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2723 0 R >> endobj 2726 0 obj << /Length 2727 0 R /Filter /FlateDecode >> stream xVMs0+{&QNN&g2ؖcMB0iOmci1x^A*˭H"> endobj 2729 0 obj << /Length 2730 0 R /Filter /FlateDecode >> stream xUKs0+ЙڇxHGڙ2MLIc waӞѮǷ 0x]9$;1TGj /vwa ¡ù{@ >:ףDʍ9(DkK u0 <fJ%DJD?PwVu__Aٹ>({b\!9h*PRJݖH, U<Źf[O g. 8㠇-$Aृ{"@'{K**[)!)kثrKUs؈ AI a|>ʪNPh@0 l3O_"/~M|>auZ @ vU?D0W6oil?j* gxa;p!$0L;z2mMVթl͒TVwϒ8ϟtXxo9*ɴF9ވ650;;Q'fN>vaϣm*>V,"Vmj0> endobj 2732 0 obj << /Length 2733 0 R /Filter /FlateDecode >> stream xTMo0 WF;nh ۡbQpԖ?NR:v\ ,^q$PSh%T(uD셧5t6 F ܉'BK#89񇸿 g(y~Sʩ֚f"/KL ³Pβ VR "1;xX}n{W2 ߿nmrȷr'ȿP.)MҔt7k `E̲53_CU2Yf4[SvO<3дE첪[S}5ر/xݵy\Rz\3/7ìW' u Sֽ5'koT9SH8(qۖqM:{>g>nekD!7+K _oPN(v*f'U:Rq endstream endobj 2733 0 obj 422 endobj 2734 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2732 0 R >> endobj 2735 0 obj << /Length 2736 0 R /Filter /FlateDecode >> stream xUn0}+汑m.]]J }h H w$4Ӷ&gx[ (>S݉CY-@pC0pacE)+1zn?VnQj] B܅G˸ |D)nChip'6tfp}ՏhWjr7sxS7yï ǟ MG4` 9.݊J|6S4K۵*۲RFcp™M)͜Mo\Fg"p/,9c,bƀ<,8*ǴڀeQXBC b%Z l$<-0aOy+Ӳ3 h¨Gm' !]P::ysBFGH|ǨصO.cǬVrbH8k#?l '0^?2VN9mqpF{IK4_JVʇyIOҥ9frbԸusPGvSSn?}9INaմXOU'm-A3h1VP_#sڄQ:矼k^YU<%O endstream endobj 2736 0 obj 617 endobj 2737 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2735 0 R >> endobj 2738 0 obj << /Length 2739 0 R /Filter /FlateDecode >> stream xTKo0 W9vSۭU BA-t &tҎkkފ ln 1RiQhsGy:pTr J=8>NgDƯ]˯dWkw@/%:aM#rw< C2_8\m`yF#G]$x[fM$+L>K5`. FGʌT|C-Sc5X4+Y[8d'[6ډբT e[YUձPbN'띟iM=(vt1:_eˑ9u P!R~8=v: endstream endobj 2739 0 obj 377 endobj 2740 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2738 0 R >> endobj 2741 0 obj << /Length 2742 0 R /Filter /FlateDecode >> stream xTMO0W̱0qǽ`@UH(Bݒ.MB8 g??x% }%&bUc ڐP$ኅM`G7bY~&V6;@8W׌2ÓkbJ\E !ZYZjPj!Ǐi a{StT+,5LQ;}L n@( [wxa"Mmiٯߕ-}Ɔ$o yKQ%w<&2]'|2- rN3$fy<=7xٝv>P6?eSzfźcҚڀZ+?'e^}ⴭ';$NV#·2=k OEw#WdlU6#}?HEbX'ӻ:1o1( eغ<;o/vյ{r endstream endobj 2742 0 obj 467 endobj 2743 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2741 0 R >> endobj 2744 0 obj << /Length 2745 0 R /Filter /FlateDecode >> stream xTMS0W1PW+۲rkNIL b8N[=+l4zڧ]mv;c 4C.T )dfa1;=F?c]~:ƶ!l7C8p&.fM}rzVٯ'-f> endobj 2747 0 obj << /Length 2748 0 R /Filter /FlateDecode >> stream xTr0+$J|ktziqC18}%vS`桧}3a>sT<7AD]5 np3t+~9c a;y/΢3۵2 w aN>%B6Pv+T,8Tp.I 4$j;HeT02x}>nI}L#=uFG*mMv.T(S6&}^2dl  DfSBMR(.)Op^kH%]n4TiYj^CV䫴3 IF/aVpu ѓ~Vӓ6I z6IQ9%~bRՀ? #dTF5eaQ*J??&B orm +g@QhJI[Rjre*mfZJY?h=.ox%aGڤw(} -wڼ't4O7v:p endstream endobj 2748 0 obj 508 endobj 2749 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2747 0 R >> endobj 2750 0 obj << /Length 2751 0 R /Filter /FlateDecode >> stream xT=o0+nLGREomfD@$kӎQrGQR,q&#Nw|bm$ra!' ".c @;Cb߮>c~0Bׄt=-&B]iCزO5m 2ƤJBʕ4pwuclyl}w%T vhlFҫy[h˺%4-gaI-aG ̗_&L﷪;2%s5Gzy0j8 e(SS -N7<qVlot endstream endobj 2751 0 obj 473 endobj 2752 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2750 0 R >> endobj 2753 0 obj << /Length 2754 0 R /Filter /FlateDecode >> stream xSn0+B֎T- jI(+@Tkh!zl"#v5G;ÑP@s6HcQ & u `}Vm8!vI o$'d7hhp74n1%e7klfN+z*lAwrj ;ǔRGc00O"낟!FW<&>4Eu뼩ΰ d7ԡ\vsu-V(NnHA.r[⤆(Ȓ E)?4I`SCh Ȃ>t^W1,$7k[%2sʠ!2];'LmK {kO{S^̷~,m EuR\[ -$ endstream endobj 2754 0 obj 367 endobj 2755 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2753 0 R >> endobj 2756 0 obj << /Length 2757 0 R /Filter /FlateDecode >> stream xTM0Wq98umJ7R˪H&F|a ΋f_"H8 XlȤqP7,V<׫O؍ d ?"!| ]wl|WVm}#dOԒ((D R& l7wyi(c|ͲFͷGȾF^wׄ$YmiRْ iih&Pd[poll)Ă .) B3 ^gBsFT]T 4,d,In߻b[UG5rLѩ1HۏD9|UgsA R9ycmh1 E1|Q^!ҷ"wޖ h)2MWZ6S,Qunty1s_ʆو:|дöC۾:ANT GXg5M endstream endobj 2757 0 obj 507 endobj 2758 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2756 0 R >> endobj 2759 0 obj << /Length 2760 0 R /Filter /FlateDecode >> stream xTM0W⎝ĎSFaYU68lbT;_ tO l=f̛7op@zG~QZ|cl= 4#o1ptqHi#"!a~%ܕndv0df:t>@#TrΪ4r}k 59jZ!d|v*5ivB-vҎٟ̭Z].% &xHzS >tK&9J<{*:O`iŶ(&fnǼC_H+JWȤtw>U_(dZ%ZKt$i׮r:ٸ(i3? ,BN>T-kq@#L&֊jen & %dz^[^BHP+{V>40C@MM<ʚzﱓIOJQ~s 1v7)YrrFJ^MXU endstream endobj 2760 0 obj 537 endobj 2761 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2759 0 R >> endobj 2762 0 obj << /Length 2763 0 R /Filter /FlateDecode >> stream xUˎ0+r׏ĎٵCt"b2B DI*y3 s_>~ P|~PlASEXHxpâ݀yvcn~OψOИ,b $0 XZ JˈR"? <}J3sE=wz n+ϐ %' ?X:&]%EjAO%jP-:{]1\X3j3v4Z|;uIMYn*>!3nj4'%~.msEqVoλ؅O^'gPH)Eyb[eUG=i3*V֒ǭk|2e| 0Dơ uT;_cȬ3%4fg&n'cj+.1@;fbm+ {7J'og0 uaL5+SÐȦQJ[:^e`:)¥{ȳ)Aڤ^՝:r# 鍖Gf'1.:sQOP;Wտ endstream endobj 2763 0 obj 595 endobj 2764 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2762 0 R >> endobj 2765 0 obj << /Length 2766 0 R /Filter /FlateDecode >> stream xUKo0 WmImi]PDNmE(?򰝮v4IHQ//RsXV@rE1ՍTϨX2FE; nPݣ6C}As {@F1:.D("(GR"kqn-/nf+wLZH0O7q{ Ok|M8$dܳ%S"ώCSJ]WWjE-l6yjzo> endobj 2768 0 obj << /Length 2769 0 R /Filter /FlateDecode >> stream xTn0+h5M\|knaӶ[r$C-^7& 8ÙyPGaЖl=As $'o10 H-&eUL)e1" d/Yf(#r`^r~ɏkrV`U?k ZhR jr.)]pJ41șhZϊ|<^ԯ+_f1 K=K"4,3R^J9ח,rֆE( 24%J@nb[eUj{fTvi*tP 4NHPmOrAœzҊ-QFZQ=3}?,_\mǹ awK4㧼 `(Aw=+x10`挻jVf [:.i2rc=ӍNqPP ")§Ξ\ <2w=9)3Kzж݈K?4vɼupa/}1 Da endstream endobj 2769 0 obj 566 endobj 2770 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2768 0 R >> endobj 2771 0 obj << /Length 2772 0 R /Filter /FlateDecode >> stream xTK0Wc[>J7R˪Jac'@{noq@#?I%`:gO3 )~a_Gd#/sSxZw]49#o2PD>!DJe)"r Mgw#m]`!nSq}~z- z% JJp2I:;m*Y%j3g*;[u OrH> endobj 2774 0 obj << /Length 2775 0 R /Filter /FlateDecode >> stream xTˎ0+vCt"u1FN^jfst/B1m $8aa8/ux۬wd"ãCO%juhr"?6e9>}K"dcj(&H3/_JlYGj;ZOUx E"{j,c+H endstream endobj 2775 0 obj 524 endobj 2776 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2774 0 R >> endobj 2777 0 obj << /Length 2778 0 R /Filter /FlateDecode >> stream xTn0+`vo-=Ս0`IDߗbGS0g͛0@N¢ eF; !TLRUʥ<0\kܓʕAs l4w-CFQTЭ]^lM͙Fؘn|=1;&|vN?:♜! biص^LsF?Z{-Fǔ4]jYP׊sN%gOO2d^ª(aqJ?E}%Jtn ??oG!Wl}cUIU endstream endobj 2778 0 obj 521 endobj 2779 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2777 0 R >> endobj 2780 0 obj << /Length 2781 0 R /Filter /FlateDecode >> stream xTKo0 WQCRn iY (QNeeE(?ٝZ%I=OR  !xDLpkDs~G~~n!K1. a|IOb|/-I<B% ]mnUv;4[̚di<@#Dr7p}- %k j|XRwj I׊VI&N*G#k[u斏/YJtFHA$!IOZG%8NR\:! 5Xni`) QK=G-/#5$$Iu-u׽>:DŽiNuv6/}ፊ^osa"h{b";RD XDEZKƮ$rɞdzy+qW(61:?4ə~d.қpd഍Tx<}gU u endstream endobj 2781 0 obj 534 endobj 2782 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2780 0 R >> endobj 2783 0 obj << /Length 2784 0 R /Filter /FlateDecode >> stream xUK0WGbZ!F !@8lbZ @=u7AxAH ]Rc/!p 1n ۱~E:=z|wC4iUyK`.OZR'c@0K^)בҦ|l'} ?Ӌ,uDO _P˒<ŀb$l+f JZͼ̂JܬB7tS)Ym6otjI b*d32` B\8\4ueB`9wZU*Sy#s9"Ӵf`vʔ^e0zuVim%(wS:쬿#SD"R [PαH*dPFan%uQբ.] 9)jßJ]ղW|lO{ʢ0Fy`JYuͅDHt?@pCjG$ (iygUH endstream endobj 2784 0 obj 587 endobj 2785 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2783 0 R >> endobj 2786 0 obj << /Length 2787 0 R /Filter /FlateDecode >> stream x͔=O0wa9;_ $Ra5NbI:ﱝVbw~=av,\HR sĢXHydqc\۱kcp\TNLVkKs#$}1,OUi :uN?{L7|9<$=C*Od1( "1V7U8ږnJΨv J(L[" cthT] F59] jeLV*0hۣ\N7OG9(?b)m.'GlM\ C&ol(ӯ·7 p endstream endobj 2787 0 obj 339 endobj 2788 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2786 0 R >> endobj 2789 0 obj << /Length 2790 0 R /Filter /FlateDecode >> stream xVKs0+'xr{t3=$9Xr_GM{jKOix`sن%a?C$nYo `툲q߶;9wsgЅCxt=ʻ 0,wsͧ mI b^+}e!0Ow0}R }e^65.¡PS=a $#fʕ eL0~C-2]Hq~KɲO(1&&}\hO [J.LjEy*k%QeXk'til&$;20(2v򫭐모zj'#8I"w!Ivv{wQȎV- bSEC.oqoI[̒M9^y^Tpl3XeDK8((J..p1 :kTЀ6+覤sXYY#S(+A!*ӅؤES G"Fbպv9% 0k.j@Rжj!hZ@"d_\F&Norq ,#3P;ᶵs^=:фע,~r(;RPg*T.$/J-BdTIpBY~Ffxbw1]zvh\0ѷAG?^XU{G endstream endobj 2790 0 obj 727 endobj 2791 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2789 0 R >> endobj 2792 0 obj << /Length 2793 0 R /Filter /FlateDecode >> stream xVn0+ KR(斢 PEqLBmɡnP-rh2,j73͐ÀunoRq}mc 9y>0A ES;cU^h3X'u(|pnn:GN^;WDʍB켙:{(L'B !! .WaOY'i pbr ӏλUF̯ Y6ǯ$e\,4.pJ$6վ<8UQQJZ6$K/.<צ嘴N8s)e(*tah?D8}a t]ˌd=ƒ/].6y7PuD@)&uٙ1:-UƳI{iy|&|b#2k-#3|E׆*q]'ΎK -x! :, =5f*~-5\F[G&c"`"\"8kz6<"&C&ZC} 񞈍)L.3qd5K>mͭyޘ쮛,B6ۋddÝS-^+9ק/(;xI(`pH7 񲀻fE||"p s혇dyoVNϏqA/ϋ_}UtU%do8U$zjem>7c|ɜ>I a3ȓgV^?<; endstream endobj 2793 0 obj 722 endobj 2794 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2792 0 R >> endobj 2795 0 obj << /Length 2796 0 R /Filter /FlateDecode >> stream xUn0+5M"[Eb)ش"ZBhjdhi1xܠB{l 웘hnQ?cxi?&O= _/]. QHOBK+" C-h"x.Qwgߊ$IL}W*KU0Rn5!p)Ҩz_?1)Q(BcH)]U|YE>k ۖPe5HN82LZaTk=j `0 `81=aR3c%AU%/*zhx WF*LD?˪d^tLDRL_&@`$ШerhpCY\f Z[k„{#vKS-mZ-?8Q[w9nYIi=pSgzIs3:U4^̊ Uv;.WZS dv]Dm\D24_sF}7s Vy ;uԻo{wgp|,lr9 2^nEEm^- ˦%{=yy'^gԵk1Ѯx;2J wDJo\Uw_ endstream endobj 2796 0 obj 668 endobj 2797 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2795 0 R >> endobj 2798 0 obj << /Length 2799 0 R /Filter /FlateDecode >> stream xUn0+h5;\$JE zspjS8X=5 |'μ <H :l~\1ܰp9vca7Y/z߽{B a5눷|W!ϱ!^Ҫ)(TB&E&?*+”{x_P%,ԛڿȺp4~t  i*f{ <{p"]: S%Ago6iQ3s Xɳ@3r3 Wز$7#T˚ʡ]giaȸt;*jx_Lҁ G;uZf$L29+c*S6ʬu"e#RIt\}p0hn6fSi>|bjS)zIpN(fi# jL$sF损xJXIT$p^YԠ\] ɶ) i,Nױ9 /tQt}M1l[l/9# OF^ o{ ڦ endstream endobj 2799 0 obj 611 endobj 2800 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2798 0 R >> endobj 2801 0 obj << /Length 2802 0 R /Filter /FlateDecode >> stream xUKo@+T%R] C*Uzsf!+p7,OnOM.|0<[d `YA cp 3f/zD=H?j]ꭩK#>EI2yb2;"Ot+)0NߑDJ8jKjnuj'^JLjh >YVfqYl*fpζ5 0+F H(iQ/zf#S ݫvd`1Oj? endstream endobj 2802 0 obj 625 endobj 2803 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2801 0 R >> endobj 2804 0 obj << /Length 2805 0 R /Filter /FlateDecode >> stream xUN0+ V}U7H,;E}'!@Wd4}À{aqؕ}1` 1?#ܱ `A8{Mr(|wnM k$b9c78J^<۳_uU\h%uF0YoJ]jӠ6{gO> endobj 2807 0 obj << /Length 2808 0 R /Filter /FlateDecode >> stream xUMo0+JkC=j~i۲CS( &n!&m[b3 oތOX@p0m`6[4A^5sڍv96AʸGkv^]5wōBb\g?b \KKL鋃[$JObLPM?X Mp TvƸNʃK=JV%^N 5,TՏ.u3R1C`3 WA8~ RE@.*H$s T2 B 8e.v8ە*UZuPo:9]S«}6&YӼJ&Udv6fĢ +uLT Rb ,08Ao$Pe"KѳB/eZquz ! ZU~."js+[Ե6o}[\(a~cyKYeЅ{ڹi N43b(YdT~>@5y0,,TUde/i=?!I$t>x, 5Z"oGVpHFdgjtɟ# +PE  0qYn/`ZO)uCzT/YKȋHB.i[H\{+ ܵu-i~dBCp/[';)} endstream endobj 2808 0 obj 726 endobj 2809 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2807 0 R >> endobj 2810 0 obj << /Length 2811 0 R /Filter /FlateDecode >> stream xUn0+ KR EZtA^!΁hYGk;,r&a 8oc{!9,q1d 8#<8 IE[tk vH OwB|΂b`1QB"IFRrY w?ۢ(21!|&P{}˾p8zZ? S"@PRJ}VVfi˶wkKl '2 $ ]p.N 5&Uh-صV=tAcd' J$qaћݘҌTy&lF"E*eӽ|Em9:G ݳ0&eX>uŶ֍=GgĒ$)yō&kvVPkcTaPӔDrX6ˮܸb8$xl]4G ({#2rDʺy< saզ6ăeک<ߴ;ڗ~j̦IݻD$QNWie3(WPZ@UE5:'p@Zuj1wΪi-FQ[xfpF9R'Y∾Z)uu$QN.H/>oUq8 endstream endobj 2811 0 obj 640 endobj 2812 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2810 0 R >> endobj 2813 0 obj << /Length 2814 0 R /Filter /FlateDecode >> stream x͔=k0w!Iז-D!d0vbɔJ)tlO<>av-IRyENcp9bQ ,> endobj 2816 0 obj << /Length 2817 0 R /Filter /FlateDecode >> stream xTn0+.II}kѦ@o*6D:ENnOM$$FrvvmD{!uԎMR1aNo0_q~F&B=xxaGBCiCXE_m!_X)D'{pw5ߩ+Nbk~G-?Sb# b'H_FB=C"|u/G{;S:ݘ٬Uc` bFq }O0P[=c/v<\*6ڮYy)xea#4M bwlvSL)F5㾿jMQuWrw '$Ftsʸ/ᄊD4Jz^٬SVX,!̭tpPre!CQFbF)Z[i̬S^JbyeԽ~R eSo7ʩ ~Pch9 xF c ~bηc(IvЈcmjxչ4 endstream endobj 2817 0 obj 554 endobj 2818 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2816 0 R >> endobj 2819 0 obj << /Length 2820 0 R /Filter /FlateDecode >> stream xUM0+qskZ[(H=* Nb@MdISw!yĜa =pPDL4gJ5#ctȪ:B;(a[WS^Y妕O2y8@c\0\:(z*хqsѸ> endobj 2822 0 obj << /Type /Action /S /GoTo /D [2662 0 R /XYZ 72.0 720.0 null] >> endobj 2823 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 242.59 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2822 0 R /H /I >> endobj 2824 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2822 0 R /H /I >> endobj 2825 0 obj << /Type /Action /S /GoTo /D [2665 0 R /XYZ 72.0 720.0 null] >> endobj 2826 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 268.97 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2825 0 R /H /I >> endobj 2827 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2825 0 R /H /I >> endobj 2828 0 obj << /Type /Action /S /GoTo /D [2668 0 R /XYZ 72.0 720.0 null] >> endobj 2829 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 225.38 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2828 0 R /H /I >> endobj 2830 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2828 0 R /H /I >> endobj 2831 0 obj << /Type /Action /S /GoTo /D [2671 0 R /XYZ 72.0 720.0 null] >> endobj 2832 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 251.76 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2831 0 R /H /I >> endobj 2833 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2831 0 R /H /I >> endobj 2834 0 obj << /Type /Action /S /GoTo /D [2674 0 R /XYZ 72.0 720.0 null] >> endobj 2835 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 230.94 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2834 0 R /H /I >> endobj 2836 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2834 0 R /H /I >> endobj 2837 0 obj << /Type /Action /S /GoTo /D [2677 0 R /XYZ 72.0 720.0 null] >> endobj 2838 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 257.32 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2837 0 R /H /I >> endobj 2839 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2837 0 R /H /I >> endobj 2840 0 obj << /Type /Action /S /GoTo /D [2680 0 R /XYZ 72.0 720.0 null] >> endobj 2841 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 237.6 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2840 0 R /H /I >> endobj 2842 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2840 0 R /H /I >> endobj 2843 0 obj << /Type /Action /S /GoTo /D [2683 0 R /XYZ 72.0 720.0 null] >> endobj 2844 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 263.98 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2843 0 R /H /I >> endobj 2845 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2843 0 R /H /I >> endobj 2846 0 obj << /Type /Action /S /GoTo /D [2686 0 R /XYZ 72.0 720.0 null] >> endobj 2847 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 217.05 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2846 0 R /H /I >> endobj 2848 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2846 0 R /H /I >> endobj 2849 0 obj << /Type /Action /S /GoTo /D [2689 0 R /XYZ 72.0 720.0 null] >> endobj 2850 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 243.43 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2849 0 R /H /I >> endobj 2851 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2849 0 R /H /I >> endobj 2852 0 obj << /Type /Action /S /GoTo /D [2692 0 R /XYZ 72.0 720.0 null] >> endobj 2853 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 262.6 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2852 0 R /H /I >> endobj 2854 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2852 0 R /H /I >> endobj 2855 0 obj << /Type /Action /S /GoTo /D [2695 0 R /XYZ 72.0 720.0 null] >> endobj 2856 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 288.98 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2855 0 R /H /I >> endobj 2857 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 577.5 539.998 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2855 0 R /H /I >> endobj 2858 0 obj << /Type /Action /S /GoTo /D [2698 0 R /XYZ 72.0 720.0 null] >> endobj 2859 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 237.62 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2858 0 R /H /I >> endobj 2860 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2858 0 R /H /I >> endobj 2861 0 obj << /Type /Action /S /GoTo /D [2701 0 R /XYZ 72.0 720.0 null] >> endobj 2862 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 264.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2861 0 R /H /I >> endobj 2863 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2861 0 R /H /I >> endobj 2864 0 obj << /Type /Action /S /GoTo /D [2704 0 R /XYZ 72.0 720.0 null] >> endobj 2865 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 232.62 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2864 0 R /H /I >> endobj 2866 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2864 0 R /H /I >> endobj 2867 0 obj << /Type /Action /S /GoTo /D [2707 0 R /XYZ 72.0 720.0 null] >> endobj 2868 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 224.84 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2867 0 R /H /I >> endobj 2869 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2867 0 R /H /I >> endobj 2870 0 obj << /Type /Action /S /GoTo /D [2710 0 R /XYZ 72.0 720.0 null] >> endobj 2871 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 251.22 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2870 0 R /H /I >> endobj 2872 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2870 0 R /H /I >> endobj 2873 0 obj << /Type /Action /S /GoTo /D [2713 0 R /XYZ 72.0 720.0 null] >> endobj 2874 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 254.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2873 0 R /H /I >> endobj 2875 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2873 0 R /H /I >> endobj 2876 0 obj << /Type /Action /S /GoTo /D [2716 0 R /XYZ 72.0 720.0 null] >> endobj 2877 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 229.82 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2876 0 R /H /I >> endobj 2878 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2876 0 R /H /I >> endobj 2879 0 obj << /Type /Action /S /GoTo /D [2719 0 R /XYZ 72.0 720.0 null] >> endobj 2880 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 481.5 189.038 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2879 0 R /H /I >> endobj 2881 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2879 0 R /H /I >> endobj 2882 0 obj << /Type /Action /S /GoTo /D [2722 0 R /XYZ 72.0 720.0 null] >> endobj 2883 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 218.99 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2882 0 R /H /I >> endobj 2884 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2882 0 R /H /I >> endobj 2885 0 obj << /Type /Action /S /GoTo /D [2725 0 R /XYZ 72.0 720.0 null] >> endobj 2886 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 221.77 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2885 0 R /H /I >> endobj 2887 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2885 0 R /H /I >> endobj 2888 0 obj << /Type /Action /S /GoTo /D [2728 0 R /XYZ 72.0 720.0 null] >> endobj 2889 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 216.77 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2888 0 R /H /I >> endobj 2890 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2888 0 R /H /I >> endobj 2891 0 obj << /Type /Action /S /GoTo /D [2731 0 R /XYZ 72.0 720.0 null] >> endobj 2892 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 218.99 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2891 0 R /H /I >> endobj 2893 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2891 0 R /H /I >> endobj 2894 0 obj << /Type /Action /S /GoTo /D [2734 0 R /XYZ 72.0 720.0 null] >> endobj 2895 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 421.5 200.633 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2894 0 R /H /I >> endobj 2896 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 421.5 539.998 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2894 0 R /H /I >> endobj 2897 0 obj << /Type /Action /S /GoTo /D [2737 0 R /XYZ 72.0 720.0 null] >> endobj 2898 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 244.56 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2897 0 R /H /I >> endobj 2899 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2897 0 R /H /I >> endobj 2900 0 obj << /Type /Action /S /GoTo /D [2740 0 R /XYZ 72.0 720.0 null] >> endobj 2901 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 397.5 194.552 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2900 0 R /H /I >> endobj 2902 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 397.5 539.998 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2900 0 R /H /I >> endobj 2903 0 obj << /Type /Action /S /GoTo /D [2743 0 R /XYZ 72.0 720.0 null] >> endobj 2904 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 216.78 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2903 0 R /H /I >> endobj 2905 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2903 0 R /H /I >> endobj 2906 0 obj << /Type /Action /S /GoTo /D [2746 0 R /XYZ 72.0 720.0 null] >> endobj 2907 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 216.22 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2906 0 R /H /I >> endobj 2908 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2906 0 R /H /I >> endobj 2909 0 obj << /Type /Action /S /GoTo /D [2749 0 R /XYZ 72.0 720.0 null] >> endobj 2910 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 219.55 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2909 0 R /H /I >> endobj 2911 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2909 0 R /H /I >> endobj 2912 0 obj << /Type /Action /S /GoTo /D [2752 0 R /XYZ 72.0 720.0 null] >> endobj 2913 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 246.76 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2912 0 R /H /I >> endobj 2914 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2912 0 R /H /I >> endobj 2915 0 obj << /Type /Action /S /GoTo /D [2755 0 R /XYZ 72.0 720.0 null] >> endobj 2916 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 337.5 263.505 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2915 0 R /H /I >> endobj 2917 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 337.5 539.998 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2915 0 R /H /I >> endobj 2918 0 obj << /Type /Action /S /GoTo /D [2758 0 R /XYZ 72.0 720.0 null] >> endobj 2919 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 214.55 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2918 0 R /H /I >> endobj 2920 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2918 0 R /H /I >> endobj 2921 0 obj << /Type /Action /S /GoTo /D [2761 0 R /XYZ 72.0 720.0 null] >> endobj 2922 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 210.11 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2921 0 R /H /I >> endobj 2923 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2921 0 R /H /I >> endobj 2924 0 obj << /Type /Action /S /GoTo /D [2764 0 R /XYZ 72.0 720.0 null] >> endobj 2925 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 259.55 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2924 0 R /H /I >> endobj 2926 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2924 0 R /H /I >> endobj 2927 0 obj << /Type /Action /S /GoTo /D [2767 0 R /XYZ 72.0 720.0 null] >> endobj 2928 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 287.32 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2927 0 R /H /I >> endobj 2929 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 289.5 539.998 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2927 0 R /H /I >> endobj 2930 0 obj << /Type /Action /S /GoTo /D [2770 0 R /XYZ 72.0 720.0 null] >> endobj 2931 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 263.44 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2930 0 R /H /I >> endobj 2932 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2930 0 R /H /I >> endobj 2933 0 obj << /Type /Action /S /GoTo /D [2773 0 R /XYZ 72.0 720.0 null] >> endobj 2934 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 231.77 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2933 0 R /H /I >> endobj 2935 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2933 0 R /H /I >> endobj 2936 0 obj << /Type /Action /S /GoTo /D [2776 0 R /XYZ 72.0 720.0 null] >> endobj 2937 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 227.33 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2936 0 R /H /I >> endobj 2938 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2936 0 R /H /I >> endobj 2939 0 obj << /Type /Action /S /GoTo /D [2779 0 R /XYZ 72.0 720.0 null] >> endobj 2940 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 228.44 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2939 0 R /H /I >> endobj 2941 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2939 0 R /H /I >> endobj 2942 0 obj << /Type /Action /S /GoTo /D [2782 0 R /XYZ 72.0 720.0 null] >> endobj 2943 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 258.42 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2942 0 R /H /I >> endobj 2944 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2942 0 R /H /I >> endobj 2945 0 obj << /Type /Action /S /GoTo /D [2785 0 R /XYZ 72.0 720.0 null] >> endobj 2946 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 251.77 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2945 0 R /H /I >> endobj 2947 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2945 0 R /H /I >> endobj 2948 0 obj << /Type /Action /S /GoTo /D [2788 0 R /XYZ 72.0 720.0 null] >> endobj 2949 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 205.5 200.086 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2948 0 R /H /I >> endobj 2950 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 205.5 539.998 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2948 0 R /H /I >> endobj 2951 0 obj << /Type /Action /S /GoTo /D [2791 0 R /XYZ 72.0 720.0 null] >> endobj 2952 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 203.44 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2951 0 R /H /I >> endobj 2953 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2951 0 R /H /I >> endobj 2954 0 obj << /Type /Action /S /GoTo /D [2794 0 R /XYZ 72.0 720.0 null] >> endobj 2955 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 205.66 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2954 0 R /H /I >> endobj 2956 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2954 0 R /H /I >> endobj 2957 0 obj << /Type /Action /S /GoTo /D [2797 0 R /XYZ 72.0 720.0 null] >> endobj 2958 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 202.32 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2957 0 R /H /I >> endobj 2959 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2957 0 R /H /I >> endobj 2960 0 obj << /Type /Action /S /GoTo /D [2800 0 R /XYZ 72.0 720.0 null] >> endobj 2961 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 197.89 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2960 0 R /H /I >> endobj 2962 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2960 0 R /H /I >> endobj 2963 0 obj << /Type /Action /S /GoTo /D [2803 0 R /XYZ 72.0 720.0 null] >> endobj 2964 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 205.65 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2963 0 R /H /I >> endobj 2965 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2963 0 R /H /I >> endobj 2966 0 obj << /Type /Action /S /GoTo /D [2806 0 R /XYZ 72.0 720.0 null] >> endobj 2967 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 195.67 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2966 0 R /H /I >> endobj 2968 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2966 0 R /H /I >> endobj 2969 0 obj << /Type /Action /S /GoTo /D [2809 0 R /XYZ 72.0 720.0 null] >> endobj 2970 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 206.78 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2969 0 R /H /I >> endobj 2971 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2969 0 R /H /I >> endobj 2972 0 obj << /Type /Action /S /GoTo /D [2812 0 R /XYZ 72.0 720.0 null] >> endobj 2973 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 202.88 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2972 0 R /H /I >> endobj 2974 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2972 0 R /H /I >> endobj 2975 0 obj << /Type /Action /S /GoTo /D [2815 0 R /XYZ 72.0 720.0 null] >> endobj 2976 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 97.5 231.626 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2975 0 R /H /I >> endobj 2977 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 97.5 539.998 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2975 0 R /H /I >> endobj 2978 0 obj << /Type /Action /S /GoTo /D [2818 0 R /XYZ 72.0 720.0 null] >> endobj 2979 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 216.22 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2978 0 R /H /I >> endobj 2980 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2978 0 R /H /I >> endobj 2981 0 obj << /Type /Action /S /GoTo /D [2821 0 R /XYZ 72.0 720.0 null] >> endobj 2982 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 210.11 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2981 0 R /H /I >> endobj 2983 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2981 0 R /H /I >> endobj 2984 0 obj << /Length 2985 0 R /Filter /FlateDecode >> stream x_y{~ \JBf}r'%\8.BhH@)=89>7*=7~W?}v}?}ۏ>m{gii1_j2׿ʫϿ{Ͽ?o~xuwO~޼ͷWc/?;ro}O//O7o_w_>}?>Ϳre-=^M (Ws8%m`@l Xv,;KR@    LLL"XE`&Mv"Ep!SN ` ;Q@0 FW!  LLL"XE`&Mv"Ep!CN ` ;`YD0D0D0D0E0E0Esu(市8xÏ]4׳!Py^JIꤺK}RՍj LLLdYɲe%F,Yvdr A,'YNbX&ebX.e"Q2222222ɲe%J,Y6dɲe'A,YNd927M,s2w],s,bE,eeeeeee(3/ #]R뛷_}u})r7sُ>R=>:RKT I,XM,&e˲eŲbYv,E,KR2222222ɲe%J,Y6dɲe'A,YNd9E26M,c2v"Q2 YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YNM,s2w],s,bE,e LL|y]Y:q{$'{sf~PROJTw Fz˵Bj\(˵ $$$J,'{;~R꠺Q=>R=>:&I,'YN\;,˵],. rZ,N 222222ɲe%J,Y6ldɲe'A,Yd9rڂ!XMPbaH-k#E,V 222222ɲ}ta3#~ۯ?^7ywf>f>FzuzH=r5Z,xFj\rg.b3Reeeeeeee%J,Y6ldȲe'N,Yd9r5Z,x],xFj\rg& $$$J,+YVldȲe'N,Yd9r$)k<#X ԻXb3P\222222 wufӬ-/<Խ T=ѣIuz Su/ԕj\r  LLLdYɲe#F,Yvdr A,'YNbR@H-Qr 5:22222ɲe%J,Y6ldɲe'A,Yd9rH-k .k XE,@@j LLLqe97u摭pw~ qJ!> C&*1c2 uHxuD ȸ\c@,!!!))))UVl"D`.]"8Dp /J Ap1/````````*U6l"D`.C"8Epu N η:b   LLyu漟`̟?O=c@;=C}?:nTOÄו!yZ, $$$J,qۜ꠺Q=^Tjd9rsby?^by?Z,Pj LLLdYɲe%F,Yvdr A,'YNby?Z,],Pz]5YYYY&Y&Y&YjnWgQzWV=xqAyZ)?9(˛㺃jS:Lu4iTcl)' [wR]Tl)'8[M5L5L5L5M5M5Mj5dk`R>)?J(ʏ NqmByXnTNSsK9'Jz-夺v+y![M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu=rR]¥Tp)'8\ Rnaaaaii/'XykNwztʏ)˛{bʫCrR][_$IumT m0jjjjjjjj5jT6SmMj7nTS:Mu񋖓TcHN#2$'1jjjjj͝wy`~|{/}Kk.}Kk/}ڏKk?.Kk?񋗪+k\^}WT]Y*Ruek+U\Zqi祵Kk־^Zzi륵o־]Zviۥ]ЃkKե~\Zqi祵~^ZyeKKՕ?.T?..UWxT]YRRuiǥKk>/}^ZhUBNq[BbMnSI`B^- .iyf0u!7iTFe#ղjIZvR-TK!RHS S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBQL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I57R͍Ts#H5wR͝Ts',TjjjjjjUYcD0|i[]_$?"PwʏIrS:Mu$ղjHlZ6R-;TNj)ZVSZMj3fTvS:Lu0iTNRTc#H5vRTc'(TjS S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5M5Mu~/>qbץGh|A|]UP7';夺_HZMj5fT6SM0aTNS:Iu/('5|'5TrR] M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu_PNk|!Nk|A9TrS S S SMSMSMS}y}u>cx營d` q*/UBu,ѥ*.UR5T#KՕ/ڗreKqiǥKk>/}^Zzi륵־]ZviۥoG/U~\Zqiǥ~^Zyi畵?./UWPRW,T]Y"RueKKեKk>.}^Zyi륵־^Zziۥo־]Z~i~\Zqiǥ~^Zyi畵?/UWRWڻT]YJUq%wqiǥKk>/]m{pV~?ӏ?||n]W=кuTf|:*y|Pn<-OS:Mu:rR]UH:rR]UPN M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu:rR]UH:rR]UH^HuTAVSZMj3fTvS:Lu0iT'*('uP夺TAR]UPnaaaaiik}We?ymvǯW_5csƤY>ϹטW5&iynrSmLj7nTS:Lu4I z;'RN R]OTTTTTTTTVSLj3nTvS:Lu4iT_T`)'XIu=VB jjjjjjjj5jT6SmLj7nTS:Mu$XIu=VT`)',Tjl)m6[J-͖fK9].V>z,?>w?7߿yZs/xw7Ús|cby|P~\PwʏfS:Lu4Ik夺NT:FB-jjjjjjjj5jUȺznk/Uay|R~\P^-W!:Mu4IIu`#NIu`C9l(7000444jTVSmLj7nTS:Lu4IIu`#NIu`#y!u ZU2)oj:Lu0aTNR])'յ)PTצ@Ium HVSZ_~y-O;}<,oOGZnTNRTצ@Ium |'յ)rR])'յ)P0000444jT6SmLj7nTS:Mu4IjnNjTjRbaaaii놪*[}0:|{7z Ejf/<-rS:Lu4iTo^Iv/To^Iv//To^M5L5L5L5L5M5M5Mj5՛I^ y|P~B4iT'^_wR x!'۽rR x!7000444jTVSmLj7nTS:Lu4I{/zTo^Iv//To^M5L5L5L5M5M5M>q~vD<n~?gmMmw f˫fTvSM0aTNS|QNkG91TטrS S S S SMSMSMSZMj3fTvSMu0aTNS|IQNkG91ZMj5jT6SM0aTNS:Iu('5|'5棜TטOBkGl)m6[J-͖fKG/6{qڷ|͇/~v|O\<~dP~|OLyZ)?'<,oO=1Z6R-;TNj)Z baaaiiiTVSLj3nTS:Lu4iTc#H56RTc'I5vRBQH5VSZMj3fTvS:Lu0iT'FjnNjTjS S S S SMSMS6>#Or>/^|Pm=?CwϯIurSLj3nTvS:Lu4iTFe#ղjHZvR-;Bj)ZMj5fT6SM0aTNS:I56RTc#I5vRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujnFj;NYH5m6[J-͖fKiRl><>iǻ:Gy/'Lay|R~dy|P~dyZnTS:Mu$!';>d9>d=/|=ZMj5fTvSM0aTNSzd/9'KNIy=Tϓ%70000444jT6SmLj7nTS:Mu4IIy=;'KNIynoVñU)۶ы(˛V,nyZnTS:Mu$5TJT؊rR]c+ ZMj5fTvSM0aTNSV[QNklE9T؊rS S S S SMSMSMSZMj3fTvSMu0aTNSV[I[QNklE9VwUت~|ՋۿPIl͡(oO|!|!O;TS:Mu$ղjHlZvR-;TNj)ZVS6Q>kiy|m<,oOqɫ:Mu$5TrR]s(Iu͡$/Pjjjjjjjj5jT6SmLj7nTS:Mu$5TJTrR]s(Iu͡(7000445s|??{{cͲѤY>)_$ύbznTύbQLrR=7AZM(ֶm_F1N(&yX,bWMu4IF1I(&9$'sTύbjjjjjjjj5jT6SmLj7nTS:Mu$szn|'sznTύbjjjjjtUnfWu8Wͻ/?|ϿyzݟΏ_imur)_?ҒZ>(_?ҒT!S S S SMSMSMSZMj3fTvSMu0aTNSz,9!Cyz,9!KnaaaiiiTVSLj3nTS:Lu4iT%'/޾ |yݫsP^wNy,˛^,7nTS:Mu$ղjHlZvR-;TK!RHR-TTTTTTTVS/ļO[Z>(iy|l:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH51Mك<{w!]?w[~ޕwʏ!fZ>(M0aTNS:IuT׮1wR]('յkLBkZMq=oGQ^ɏ!Nq=DyX,CWMu4Ik夺vQNk夺vI^HuTTTTTTTTVSLj3fTvS:Lu4iT']c5&Nk夺vQNkZA=>w?~횋}ûܿU}X,Rs%_Rs%O;Ton-5000444jT_Rs%J^-Jw_Rs%Mu4iTon-5Ton-5B7\M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I斚+9Rs%'՛[jzsKͅ-5WrS S S S SMSMS}yK}?O`m(7]8.3z1V2ǟ:u)ay|R˫[Nk yjjjjjjj5jT6SmLj7nTS:Mu$5 T4@T4rR]IuM(7000444jTVSmLj7nTS:Lu4Ik@9i;i夺R]M5L5L5L5M5M5Mu~WeG~szd#AG6iy|=VY>):Mu[I|-;ϸTgB^H|ƭZMۣ~%?q yZ)?q yX,ϸZnTNR}~-[I3nTq VSZMj3fTvS:Lu0iTNR}~-NϸTq 9>?rS S S SMSMSypLvڧ|g_;W/>?m9,Q߮w f˫fTvSM0aTNS|QNkG99TלrS S S S SMSMSMSZMj3fTvSMu0aTNS|IQNkG99ZMj5jT6SM0aTNS:Iu('5|'5磜TלOBkGl)m6[J-͖fK7sԏ^V?e?ݭ~b$yĕ<,oO_%q%_%q%7fTvS:Lu0iT'<֎)Z{YݤڢZ>(?(O;a6SM0aTNS:IlZ6R-TNe'RHR-TK1000444jTVSmLj7nTS:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH5l)m6[J-a/ϡ~4s{zww3 3#f|=[j|=[S~>rSmLj7nTS:Mu$ղjHlZvR-;TK!RHR-TTTTTTTVSZMj3fTvS:Lu0iT'Fjl;NjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR͍TׄrR]:wR]:IuM('5Qj7nTS:Lu4Ik?*夺RNk?*夺J^HuGTTTTTTTTVSLj3fTvS:Lu4iT'ڏ*Nk?*夺RNk?*ZMj5jT6SM0aTNS:IuGT~TwR]Q)'յUBk?*jRl)mtGr[>?ynNڶ-xڻ ' AW AuBLj7nTS:Mu4IkK+夺6JJ9JVSZMj3fTvS:Lu0aTNR]{^)'յUT׾WIu|JVSZMj3fTvS:Lu0iT'FjnNjTjS SRl)m6[J-}3>7++w\~~|?Ӈ7y/kCdiַG Z>(_"%O;kCay|R>Mu$sCzn|'sCzn!RrS S S SMSMSMSMSZMj3fTvSMu0aTNRT !T !RrR=7DBZMj5fT6SM0aTNS:I)9"!I)9"%'sCznsԑ Y_}i_ӽ)ojj7nTS:Mu$5TTLTTrR]S1 ZMj=T9Gz%oiyoI(WMu4Ik*F9夺bꚊI^HuM(70000444jT6SmLj7nTS:Mu4Ik*F9;夺bꚊQnaaaiik*vWl}o?g+jnի/;Ωٿ}w^z|s~5Z}׿W>9>O=__Oǧ\l?|ٿվw/&/EYeg͍_?[kE endstream endobj 2985 0 obj 15019 endobj 2986 0 obj [ 2823 0 R 2824 0 R 2826 0 R 2827 0 R 2829 0 R 2830 0 R 2832 0 R 2833 0 R 2835 0 R 2836 0 R 2838 0 R 2839 0 R 2841 0 R 2842 0 R 2844 0 R 2845 0 R 2847 0 R 2848 0 R 2850 0 R 2851 0 R 2853 0 R 2854 0 R 2856 0 R 2857 0 R 2859 0 R 2860 0 R 2862 0 R 2863 0 R 2865 0 R 2866 0 R 2868 0 R 2869 0 R 2871 0 R 2872 0 R 2874 0 R 2875 0 R 2877 0 R 2878 0 R 2880 0 R 2881 0 R 2883 0 R 2884 0 R 2886 0 R 2887 0 R 2889 0 R 2890 0 R 2892 0 R 2893 0 R 2895 0 R 2896 0 R 2898 0 R 2899 0 R 2901 0 R 2902 0 R 2904 0 R 2905 0 R 2907 0 R 2908 0 R 2910 0 R 2911 0 R 2913 0 R 2914 0 R 2916 0 R 2917 0 R 2919 0 R 2920 0 R 2922 0 R 2923 0 R 2925 0 R 2926 0 R 2928 0 R 2929 0 R 2931 0 R 2932 0 R 2934 0 R 2935 0 R 2937 0 R 2938 0 R 2940 0 R 2941 0 R 2943 0 R 2944 0 R 2946 0 R 2947 0 R 2949 0 R 2950 0 R 2952 0 R 2953 0 R 2955 0 R 2956 0 R 2958 0 R 2959 0 R 2961 0 R 2962 0 R 2964 0 R 2965 0 R 2967 0 R 2968 0 R 2970 0 R 2971 0 R 2973 0 R 2974 0 R 2976 0 R 2977 0 R 2979 0 R 2980 0 R 2982 0 R 2983 0 R ] endobj 2987 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 2986 0 R /Contents 2984 0 R >> endobj 2988 0 obj << /Length 2989 0 R /Filter /FlateDecode >> stream xTn0+.E)Лa=A!ȴ-,Qѿ/)QviOM$$F;r5a@qbQ LR9g08}.pl;) WЕ#8~ !!lCJ>=F9Q{ .ns0hm[H53ȗtY0<;}ݖ]qS+Tr$#U^Ʌ*jD!=CEUfq̊$$ DLLH{gxKeǰ4&1n$ o'qm~DnTD'A{M]f;3mS50QfXvʟ?\$ e_ySU;q*9CMZ'/k!}p p,l_ F5:SDhQ..1 ~b߷SdtJުUsI endstream endobj 2989 0 obj 525 endobj 2990 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2988 0 R >> endobj 2991 0 obj << /Length 2992 0 R /Filter /FlateDecode >> stream xUKo0+c+m1綫}H{imUQ$ 46P޶(cG\ ҃WN!@.pǾ=n@k< ?{-k7j"(m#! @؃qO]zjUJILMj_l>lͫZ_=e j1Z`#n5vcgSdZ. ]<> endobj 2994 0 obj << /Length 2995 0 R /Filter /FlateDecode >> stream xVKo0 W&YmiA (N,(iOk )|PCH;4:U,h@}kjWlᘶZE~{Gw%Cxjw᭷8B?6 kK}zj}Fh( v\';XQmVT:3{H~zߒQ>,BĵbH);|!OTRRJ1*]77sxܗ:o9!3RiC3cEX99eHas L_UQBQO*}o1NHDQdIuۿy7ڴr F#"E,e^ <ݩS|CP\;bG(IR lgQNM2;3 L kd68;qpFiؖ2h,YA5+*9 *\O/k|v6u%GK'U끢Lm(kNWe/,9,;*vȈ$!NHjZܺG't`\,g1@*QΆ!s. 2jj1\F-&x oit9@`&(-dtugE3Es6'8^fKCX _̪h endstream endobj 2995 0 obj 708 endobj 2996 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2994 0 R >> endobj 2997 0 obj << /Length 2998 0 R /Filter /FlateDecode >> stream xUn0wJSm:4Hh!NjM066%nZ>vr(UF!L ; _a7cgm< ~2#{1<xfm%>`7'iCp+b:jWpwjyFh#J y\>@3Oj `5|~> j 6ZMyQ#fk,a^M+K#jy}Qsu%4B jG)DQbLl5oϑM JS5Tu+ \M˵>UO'2Sa$Su^ozق'(ci%4s׼]-,rIŮqvr$Qm>̍ڶ昝m!=sFYl;yW)~y˱R2#_LCDSPZJ[` noG FkR4Pd8Z-.*(cǟMhy⧇UQ%JUk^rV(yOvsxS[GbFLVgI%3i6\Xokd=`q_zbs ~_9mtr=YUw8 endstream endobj 2998 0 obj 641 endobj 2999 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2997 0 R >> endobj 3000 0 obj << /Length 3001 0 R /Filter /FlateDecode >> stream xUn0+ ;JhS7#zi-"yD2Dw2Pl]qqŁڐ33z" ) {p3֙BV߃I!,i_c A?ɚ2l2Iumfv,eLU:UwԌ &x)K*h/EBr&< jM@ƜEUrx)E—Ȓ$VݯZc{l$f deH;]J7զ\&‡!}.91G$LR4rD> endobj 3003 0 obj << /Length 3004 0 R /Filter /FlateDecode >> stream xUn0+ |kC#zH@i[E$˱ٹ5 q!8 7M#yzGcCC@47،ش8Cg y_;e A?ZF-xLu^esWTz6ݣ[^uτA `j(.M(BSBt?I`ԮVY׺pR M",YE, }WW[[؁L1b$q=cfJv:+:Sg}~=5,@N~'dVu;FM$&,$䦖pvYIJwysؖxqi 3SdOq췂,ϫZ;XV hu ,MuGKt|Q67>q, 6uaap:F[pkqL"z;I;En*J/90 ۻǟQl&GӋS97ȆB.GB ƪ6?Z endstream endobj 3004 0 obj 589 endobj 3005 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3003 0 R >> endobj 3006 0 obj << /Length 3007 0 R /Filter /FlateDecode >> stream xUn0+ $%QECLDm*wrlqnM$$Fp4Zm"HE;\@6A >ēxDBpq  lXuwq{~E.B]:#<Ǩ_n$^E!!,E2P̟a+Ș피.p}6mLc*`}B{o}/,`{v]b4G2EnU({+dM+W@o b6szْyLIer!!!9EZwCkah4xu ~;"#3K YKs{oH͏1eHut1YUnqsqzm&>Ԥ/ebʗzѬ [q$툺$gi繢tuNëO9?Jޥ]Z? v[> endobj 3009 0 obj << /Length 3010 0 R /Filter /FlateDecode >> stream xUˎ0w9#uk0ήURwQE.ujb dd Duñ h;7p Q q4",pqxC8N=Ѣ?-SЇ`~VcEV҆`,qHIjmfީNHS[Uo琲7Sz1h~j$F!0$ܺX'[P b8ȳtnJfu[/diSlQ0^ ɣ"F m_bA S[KN{`5 YSsL$I,~jזHSL KztpSkU4.޵ܨ0&R!ׇJCcA4[?y{yӹRzF-^5MlJNLFR 괁U@jrFzHhڼ)w){0"ec<:,[-&F-qY# :܆isqW?lG_s[ž+cteUڅ endstream endobj 3010 0 obj 563 endobj 3011 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3009 0 R >> endobj 3012 0 obj << /Length 3013 0 R /Filter /FlateDecode >> stream xUKo W̱nY޺ڇTuHر!Q'0˶bԽ&.'"ctw(tMI+7zߦ\7( ;KM7(r _10 bGm3|") yk"n/[Upc@.7FC?ٚ.?)O'顐s)}p@gF) {z۲*jS߿Hm^"N8 )ess@7eQJʤbdږh p>.wh!҃[7Ym)R endstream endobj 3013 0 obj 663 endobj 3014 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3012 0 R >> endobj 3015 0 obj << /Length 3016 0 R /Filter /FlateDecode >> stream xT=o0+nlܳڪԍRĐC߯?6cArݻK5A5w!rX}p9A 31B*$ ܡH ?LޔSkr@y%Rx砗yr%1@0{]k_-5,vѮL{?X0ѥmʔr}|23(MӺX~+cMS" _Q9w:H\OqL4F3ȃq70 endstream endobj 3016 0 obj 311 endobj 3017 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3015 0 R >> endobj 3018 0 obj << /Length 3019 0 R /Filter /FlateDecode >> stream xTMO0W$Xiw=Tġ 'CBJ8I^7~dg.(Mp<9D A ,\p3t3cc8xkf_xbr#-B~EO!ڼJKKk{E:}æ5wMVw4j^vuDQrj$Ձ;< ʺNvFDogeP'NCy6I: >>"eҴ~[M&&SXY%x\ b{2(RJ'z6EYgH3 \PkIᐎ¤#O (O.r$h.Cue] +㺁,pYƕ&`qOClNN& 3dW]/y/Ǚr<d7$~ endstream endobj 3019 0 obj 479 endobj 3020 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3018 0 R >> endobj 3021 0 obj << /Length 3022 0 R /Filter /FlateDecode >> stream xTKo0+{1cZeVmtR)Y+m}RMby|/tצ`p(2kOwpp@+[^8Q<[ɡ9p޻?#ےݖwǮץz떇zbj(bBya(D Njl8yHO]>AySB} 9@,lq@q gnrMqaIX 0ٶ;aƷFen}myu9fJW!夝"iA-֩Y YDYMdhe2CK>RS RANY+|}rsG<7zQlw`{uG|;2ӊ5aBt['EѪ˟W:`Q endstream endobj 3022 0 obj 453 endobj 3023 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3021 0 R >> endobj 3024 0 obj << /Length 3025 0 R /Filter /FlateDecode >> stream xUMS0W!bPgz&cb9Զm`8=$>kǀu`!9+v1h 0"l `@͈Z%j±wyhxnH'DFa}L_C`|+-2!&>!rkziAv)4 u5$߶8̒u IjUgs$#|ߙd=~ހ.<PFbH М8T (Q$a骘J]/fJ3Ў b8Gq7LSb#{+txa{񮌕.N58&7wiyS[^gp84W# {+亩[*'ۄ:wحm~p.qdYNP޸;NNOR~H΋M BZ[]P=DžM<&QX!ϾXUs=0H endstream endobj 3025 0 obj 656 endobj 3026 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3024 0 R >> endobj 3027 0 obj << /Length 3028 0 R /Filter /FlateDecode >> stream xTn0+rH֢ Лk=$AZ#T[(%C-^T$3g ?(a]O#@q1$> endobj 3030 0 obj << /Length 3031 0 R /Filter /FlateDecode >> stream xXmo6_ j$E%߲+2l-؀(dْ#yxeo؇q`sO$F┓|?{>FbNhbprCʡ #vf4i-cV(y7IyW?'3H>BwU%ُ dv8H4$y8Yǫ. YemFj]"_]!QJYN,ۢ*l!bDYwFكLi80]08CMAӬʙ*Bۿd]e^KWr,M,Hg[]ѿHEbqPDI<H.Gh ٘N1s6* (4,uiE&*mx,CS4}h:AI*4N4 k2Emc*[]Unnr'Kc>_"/5/o@Pvt{Y SXQsZb6S!V֌iH[ rU)0\.$F(fyKTݒj0e²\4HϺϾnբ@'*sXψR,.z7_E4U}VgYDQ1 lF8fbRx2d[lk;)沭T循xnR®.qSc'cxMۤ}Z"G~́6kqQ}lgS,kyM&'8HA^ՊCU^ 0;H2Gt]~a K`xG- bshGvu]u |:)#!#p2ղ4`C 1(8š-`(MdyvEѷ3չ]:++mn=Aaa3 `V!A02-阶{ hi.md8hVp1$ :II4hidUա҅/JD\=:h =~hL ƚς AW&x|aB#&6p8lŦ4LK4 ˌ={L=tJÙ+'eח$ /} v b!}ae(| ,4|%J]#.:gΫփQ?ߙi1huA2q`17vQ endstream endobj 3031 0 obj 1249 endobj 3032 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3030 0 R >> endobj 3033 0 obj << /Length 3034 0 R /Filter /FlateDecode >> stream xVMo8W1snw.)FmPRI[sfy P|_Ks(qcr ..0{E͌\0‡@ >~Box, M*xw j=QSB(,<7/>^RRDOwJE$cR"zPE_5h;ٻؿV3B3n,>[ '%V7s9R RO3NMљ#I႗R+kԺю#eqY~8!,vSJQ%){t{'Y8M t(au!gF@ RJTCa9I>!фi uB5jR;ܰY2Tj2>9I9LQ6΀9 r/ogWmyT[Ĝ"T_En-4k'ʳ@8 IݶE2TתL=8%|y ?QR]֜s 8Q. YlF q,Ѷm"GcS}53N> endobj 3036 0 obj << /Length 3037 0 R /Filter /FlateDecode >> stream xUMs0+ $|k39a$al3ؙSc[҃]===-׭kTa ; 1$> endobj 3039 0 obj << /Length 3040 0 R /Filter /FlateDecode >> stream xUMs0+ |k39a$al35L}WSc[zzZ[7(aY=@qba\"yQ? KS76#( ߂'D3Cx p>XLwō:($\*:!&kpsؼ\CZfM `͞ ~ "% Nɫ$զ|$#LE˯]-@_E*\P p(,SQFD^3i1HN8(2bdqMUFx\M5JX;۽ ߎp籫*(*ײy]%V{^90V&2ۙa"$2>Gl& P(tZ?4<9gSThSzeDŽ wG.gS/msr8Dr<šO6zo΀7Go֙]`J?Ϻ*<?36X[Y?y[fcs¾%4`(6>4dԷJz1ş$bѾ6oJKI9FI> endobj 3042 0 obj << /Length 3043 0 R /Filter /FlateDecode >> stream xUMs0+JB [; 3=$cdG`gWm&``WOOO˳ǀyko2νc 9bA\ FQwC76u^Q=/ .~QXU{7D endstream endobj 3043 0 obj 619 endobj 3044 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3042 0 R >> endobj 3045 0 obj << /Length 3046 0 R /Filter /FlateDecode >> stream xUM0+`[~HeU&5$ISwC~~<<{ (^ Ȉ= B&O맇}^Q=5I[ $s(3>*P$rK\,i*@p™B^nN 19#r ܒdPV)d94yu\YLah^Xf .hH"(䪥}ogI0? 24q;G=t^ul:ADBI8ՌKN;l.K w4Tx)1a#fϺ\hsmq"8 pyǴ 9,=83˦ts@nhnan8hBzN S x%1ŀnIjiC],ui6ҵI}IFu#7 I(m(zdĤ aы'`wjD endstream endobj 3046 0 obj 624 endobj 3047 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3045 0 R >> endobj 3048 0 obj << /Length 3049 0 R /Filter /FlateDecode >> stream xUn0+hrDҷ]ޒ! !mPr}vnOM$Ou^$2L$0ɮ~͒MrHTe 'ˌJ5$fV-ږUDB!' wr!̲Ä&Bʡ:s9w/9/SA ~tw4Pե5x67Ҿu;N²484-> endobj 3051 0 obj << /Length 3052 0 R /Filter /FlateDecode >> stream xVKs WLC=c!dT;Hr2][v[cowzPFH*x!L!'#c sW>u(o]"S`9r}WQX_l0R1$R8d\ۢ^C^/a9 HQJY(Ӊն^ESwN-ۓ,dIv97O! /P (q%2RD‰._֪"Χ)I-qJmL~mY VEj9Bc .l My9k2WjӴ48'( XVOܷtlao˞!tB䃞E-%njWU]sfwv8jkǣյ}DI'pBf{aR7=E$b^6ݿ4߆0Jҽ7/ endstream endobj 3052 0 obj 765 endobj 3053 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3051 0 R >> endobj 3054 0 obj << /Length 3055 0 R /Filter /FlateDecode >> stream xUn0+ M[w$r@iGD96ߡV[ݞXI>qy$K(aYO@q!$:ČRʄN'^;Vԭ2ɯ WFW:T 8P,< ŹO3NUj$ILxgMP5t?ؖ#1HN84.ԈǏ?,8WS\b0\&{6rc7#]Y@(K0̄$EI51U'[nMNV3cvtr󼴛wiOHP]n+0#D1n.j|协Y$'w_w{ϧRM鯬}{),flY9Mk9 F6gS-]>%D5 {m4wϛ D0)OcK{j~:v5@aq1s4:ivɞe[p2"f[zoe;\'3# ? ,/NwyM %=suO1hw3xdN߹ʛ{2dʬ7H1 endstream endobj 3055 0 obj 672 endobj 3056 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3054 0 R >> endobj 3057 0 obj << /Length 3058 0 R /Filter /FlateDecode >> stream xVn0+ KRom =Hc$(ڔCI .\;G3Oͣ9btRRG2j1dfF;a;6(BM)ywӑuJWF!s*5!lszY5_be| endstream endobj 3058 0 obj 824 endobj 3059 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3057 0 R >> endobj 3060 0 obj << /Length 3061 0 R /Filter /FlateDecode >> stream xUMs0+J+oLo!x\#Lm_ĸ95cVzzXN5 ޱh!Opۆ׸)w#v}޶5~xwHhLz6Λwōyn}YZԌKe }Dh7weX1r %>6yyX(8Bj@>e}JWeDCa:KԓL |g+~Ւ~U.}+X: 44ThH$9e6eE%xJ/NZVҦBPPH a9)Wz ܭɦPɰvG 3@(YN(OhC1ѡ1 :u2.Ԅ€,1ߜ6-;n9߰ L8hnKֶ`[Pfi`gWl% Z-Vyrpf;mңmRjLl3IyK/Ϗ6㊢Ly .%{t#R+sQkخx|W T+z^jW|ů?t)&o(d?څP! {:Uu_[ endstream endobj 3061 0 obj 620 endobj 3062 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3060 0 R >> endobj 3063 0 obj << /Length 3064 0 R /Filter /FlateDecode >> stream xUMs0+J+oLo!x\#Lm_ĸ95cVzzXN5 ޱh!Opۆ׸)w#v}޶5~xwHhLz6Λwōyn}YZԌKe }Dh7weX1r %>6yyX(8Bj@>e}JWeDCa:KԓL |g+~Ւ~U.}+X: 44ThH$9e6eE%xJ/NZbՅ2D}zBd9gʱy9k0wk&y)|nbMj2ݑt`L3JsJ76f")PsA fthLaCqf5p|˨;75!} k7|7Mˎ1@7,%*έ:RD.YFZ(q%X[ C&{ByVlU2E.~h0i:v*LR{xͻs lz݈gnT~c6,UC յ}^Ef`-_+(]!ƛ*n)v!TއG  endstream endobj 3064 0 obj 620 endobj 3065 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3063 0 R >> endobj 3066 0 obj << /Length 3067 0 R /Filter /FlateDecode >> stream xVKs0WaQ%![;m:[wz x ,`CHzir(0}}+c@{n!9 ~4XvR?vEެ =O(|o] ƒuW|>%އd B@JKp}vU\AZ.`)h"6NIQJ/ӑ妜YUHҵQ (c]65&a)-sf\*H?e:t[},r$WC g>= FbQL@?.U8cqJP~$h p@J?v1 zq$(r$ |,L'*!"E,ec'f8BMfgbyqX4R_0Y2G1ÐY$Ic ,F:d0vL$S]~2q5Ki$)o8ҁu %+cLRG]Ý*6] 6WgcC2߾ 3YֶiNuǍ-ำ]ښ@mfI׃=-HrVʴV}6t^[7֫C?(ʶjaP]#ºҵ'ڟWGX]8,$G3'iI8˜'v"=q$mpo1aE% r[+js endstream endobj 3067 0 obj 752 endobj 3068 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3066 0 R >> endobj 3069 0 obj << /Length 3070 0 R /Filter /FlateDecode >> stream xVKS0Wd,[Vnt7;=ø<#H +v'z)d"0+c 9.Ģ ?NZ[ M_o?wTwiOʹ6[ΣVW~m>ˋWgcCн+4:&8lQ_& B"0{pۛTb4ڔy5z>@a堟^m m=+ʚ-{ W~(FZ. MaU#,u>kpٵ'iQIpx9ND=r$vu p,^ՙc҉0J+TœWf}ZIf endstream endobj 3070 0 obj 752 endobj 3071 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3069 0 R >> endobj 3072 0 obj << /Length 3073 0 R /Filter /FlateDecode >> stream xVKo0+H 5[jҬCSUH#weg)rF1?wyaj=ScAIT}8*~qwe. : }?`iNn1~oފSՍuE=N܉vtɮbM͛kP/NFd8C1iC5C]X44,#^3/'V@gR#|JB k4M$iye2Jixgy"/ VO{i4éحAZ8fԡcoq[r`ؗ{.s v\3g/_xH g?sL98ɣ?fU}+ endstream endobj 3073 0 obj 941 endobj 3074 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3072 0 R >> endobj 3075 0 obj << /Length 3076 0 R /Filter /FlateDecode >> stream xVn0+ KQ{nZ1CD,J!I[驭7qƜ>~ׯyEdӡz~G:+mj=Ue9JG7w9 (%t\MNd?EZ&qQPo6qupdճf> endobj 3078 0 obj << /Length 3079 0 R /Filter /FlateDecode >> stream xUKs0+|k0CPmflp;aCm7&`[S{e8("C,KC;-~o[iWΩ;E@KphxAg+#MFa|wC`ZCDpo*/VdI@ef=hF)eB+}6yY'6xD`Qhkl G :T-8P, f\4H2k[HIQs&KR3ca5F!j )l Bݔ /y.IEv1!DQE#D(wu^{UsF#b6&w ,V7Iٿ`"$2jڢA7xi<9 s^̠>Ѭ e غG͂[R њ`i=>:򝫔k'!}1 OeJ@묟w ]x90[[ R2S?~۪ˬ XQ6ǝ7n,^i=~D+}G lK_ՙr*=4Bߚ̪{] endstream endobj 3079 0 obj 605 endobj 3080 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3078 0 R >> endobj 3081 0 obj << /Length 3082 0 R /Filter /FlateDecode >> stream xUK0WqWb[>"awJ a㼓 `χgx1]B{n0pڋ qsF>mmg w^Q?" ËWko}S(l+պ+B P{8ps[4@%De `Na"%ьRʄN'Q,.<+` S־W#oLeůJ@E,\PU`'p(LΡ8T!Hbbq,}}2^I *&{|N7?0Cp~` hw4P5 8>Pش N]LQAQMCkxF F* )|&2,vyyΆ H07YA2g! 4%iTY/>Qn@8pLQ@πR 5a#zOmzpYs-8Dr<~GxsBŶ3*NUgCg:Mz2YoVkZޭVȷ2WTŬL8[sg i Uk,KAGKFկ.WK(~%S6?q~U26\%zt\_^YU'| endstream endobj 3082 0 obj 625 endobj 3083 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3081 0 R >> endobj 3084 0 obj << /Length 3085 0 R /Filter /FlateDecode >> stream xUKs0W1a[v鍆B&cl6L뻒]Bsjb~hW߮VO킧@rbQ <$ȧ۪\/n<7togHHGnwlzoЗ D u//l3u MO2$ anϺLur8$x#rxkN IY?wy/Y?{!g^rA{ WH =06U/7Zj;gn\,zlFCzlc%bYK*-ѰY"WxZژ,&dJw9g!cZ&μ|I(IQՋj?r endstream endobj 3085 0 obj 646 endobj 3086 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3084 0 R >> endobj 3087 0 obj << /Length 3088 0 R /Filter /FlateDecode >> stream xUMs0+[; 3=$fag_ llKz֮޾]IOkmc 9x (!YQ {K݌M;O}Aw=( _GDs#x:w.XL7ō*>G($ˣ\*B@{8$[k\AZ搧M A=B$ bR&$p:ܗYST$Ytd7&٢. Ǐ$m.u([pX8 $8U"Q$1e>[S(^3I p&Pb9L8#K ˩fߺnCMUpDH +W9$%q;9d_ljg MJ똫>>*W7i]woLD$ w^l HXᶑX1[b9fmNX M7 bQ0 uGcع2V[qrL|s׸cg r~W~ht譊)Qt&d4~ymYYH .~n OBzeo~'pvW%s΄QFE$+Uu|w endstream endobj 3088 0 obj 601 endobj 3089 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3087 0 R >> endobj 3090 0 obj << /Length 3091 0 R /Filter /FlateDecode >> stream xUr0w/>fs.LAؙ{ͪ ؖt{uttM+D3DE҉Z΋l¨$ZZKXleh62=L^L*&2H8 ETsZ3LT_ C„jlstqsCYp(a\DCͻqGCGEC7͎&0Qhk"Syuc%"5(/*)e[CF/(OTPDL1ږP DžM\~)( Go@/7Vrx endstream endobj 3091 0 obj 622 endobj 3092 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3090 0 R >> endobj 3093 0 obj << /Length 3094 0 R /Filter /FlateDecode >> stream xUr0wԪw1΍gH22a#}xj;]5BǺWGGGg{i8D;HŸB󁻄{Qo]R;"kF?Ӿm!?<;;ƈ{kg=#B7 y|َrIpR\ًfWוI<8B0}@lqc%2!YmGUZ%l}6f"`In5S6qzCـJ ќ2PBLժ.yHژ´ ,7Jy% v W{w;<Z;B|L+u ¬PV1`A#ݯMXAx`M3JRJv62-PuBF}dσ^sEVY'wWaw02sIΫ9AS`ITgg=I)6.K$jCfoMeav/L^d@8q9v76x0hxi@땡k鏽p|L҃n#kZȈ؞w1OSFGk̋5Q0(`a}I ( Tšx.Pv:|D1hWCCɜV7%s'm$<ϾXU{ endstream endobj 3094 0 obj 637 endobj 3095 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3093 0 R >> endobj 3096 0 obj << /Length 3097 0 R /Filter /FlateDecode >> stream xUr0w/H>fs.LAؙ{ͪ ؖt{utt.&0H莆e{4?  >*uMjJ8Fۃ[IG >M+De"$ C'l;/6]>#!Rirkb-&JMy۔3y3Ag #ܪOS6D3p PsgM.+afewf:89!,80`DCͻqGCGEC7͎&0Qhk"Syuc%"5(/*)e[CF/(OTPDL1ږP DžM\~I(Q7P ŗ:n endstream endobj 3097 0 obj 621 endobj 3098 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3096 0 R >> endobj 3099 0 obj << /Length 3100 0 R /Filter /FlateDecode >> stream xUr0wԪ^ >ݹLI&C@&`p8ӿOCm&`[X0x/my0s=p6 KjGdgڷ-D'qrwq^6]xgDF!q>o\`6QZ2؋fWוI<8B0}@lqc)(L(te[Qy p_ꪍH&g~͔9~i\P5 (48T!HbjURl]PI`̴ߚb}„Gl_ttotɀq"9v76x0hxi@땡k鏽p|L҃n#kZȈ؞w1OSFGk̋5Q0(`a}I ( Tš긒^(;>D1P2Mɜ)(')Wȳo7V endstream endobj 3100 0 obj 637 endobj 3101 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3099 0 R >> endobj 3102 0 obj << /Length 3103 0 R /Filter /FlateDecode >> stream xUr0w/ꅄkx$! cflp;~}xbY5ےu'{m8D;hB!+p&v qsfl٧}ڵ D~zGwh^ "]qxVއ>0 -ׄ i |]V;4K b*"``}H"%  NYTyV*ܗjbF ߙd˚_dm@Mj.>5K,y*3NILtY,-~Yd͙cHN8(2b (w4T9y-~4%1׵-n*/l 8RPvN8Lє(8,ߗiم30с1-=-1P-~%FMң͆a-L?jȀ 0z޼:w]ʇaKQǭ%_+)F0)o3B% KUu_' endstream endobj 3103 0 obj 621 endobj 3104 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3102 0 R >> endobj 3105 0 obj << /Length 3106 0 R /Filter /FlateDecode >> stream xUr0wԪ^ >ݹLI&C@&`p8ӿOCm&`[X0x/my0s=p6 KjGdgڷ-D'qrwq^6]xgDF!q>o\`6QZ2؋fWוI<8B0}@lqc)(L(te[Qy p_ꪍH&g~͔9~i\P5 (48T!HbjU:aVk(AԠ܇& ܷ (< :΋}}hpBF=(?!7 K8;ٝOETOH9 tYBU'Q2~k?, }edҽ%rƉx^s =t:vC9W?1I:0CUh k"#c{fü2`XĦ9%2(6dRJztW1hWCCɜV7%slğ\}3= endstream endobj 3106 0 obj 637 endobj 3107 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3105 0 R >> endobj 3108 0 obj << /Length 3109 0 R /Filter /FlateDecode >> stream xUMs0+[; 3=$ 3cؙwj95>kWOOճǀ;c $!};/lcԎشOԵD]g ?£ͻ{@4E< o}W(dާ5F!ZPkU!mSEqB71Ts@lc'QJ$j_$M^5D6M%I&g-[~mrHfr@brʌC%E]}mǼhT'͙]p&Pc\% ! Аs9uG)og5oꦬL XJPĸ5 W6K&HJ0>~khHTZ\Xl"Ӵ꺳`" >e}ďUߚ 3LMBGHb~v֋[y4ks")ݙ3`5_UR0au7gS'Us-8 }x0hY~GYp%>),K')ߦ*emp Vʹܡ8XI! 7TWJHQDL1PƕM\uaѕyycUÞ endstream endobj 3109 0 obj 620 endobj 3110 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3108 0 R >> endobj 3111 0 obj << /Length 3112 0 R /Filter /FlateDecode >> stream xUr0wԪ$c]fH2Ì givl ^]=kc 9p  FѾA5wI݈m3m ~zGw{hx/^gDFa}_`(- _kPDp.nn*Ҹ=D$O2!Yu'UV%D4U9H&c]7)rHҸzCـI ќ2PFLժ.}J=k tb|>' Ts9  ww4wy@x)~f0%ĠY8 x[(šApĠljW&\9TaTž>Tѐh5c-UlOZnɫ9'$Tx$sVu*z2GK`?ܐk[aUJ&?n'df{KAz j'{K_ Ӓ=h2t`2Z}ưV(2"g]hMqlּD T8pd-IR[2C |zt'bѮzb9ۯJNFξ^YUw endstream endobj 3112 0 obj 636 endobj 3113 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3111 0 R >> endobj 3114 0 obj << /Length 3115 0 R /Filter /FlateDecode >> stream xUn0+5EIZtA{K# $TvȒACRm&mϜa@]Fjy0|.­lcH>} n̡չ{@4F܃u8 "Mqs>/0 vKBV("`wW7Ud; 0#bN\(F)eB /:$JCis0L0$n5K6 #I< 8H,s*3NjI,tlIV=ȋVrp&PhE's}3c{d?T0%fp @Y光KC~?JM44K_Y~(7'`'Z*}:RUؤy N avn?zoj`\N4$9URD7LYB'πbavO`SRqƉH{}1ugxk a`) 6:±K&·Q+hjAF ~:6Ҟ''[WK~ԙnX溽$i yx.PY:|DhW&CUW%sVքQf7'Uo 3 endstream endobj 3115 0 obj 624 endobj 3116 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3114 0 R >> endobj 3117 0 obj << /Length 3118 0 R /Filter /FlateDecode >> stream xUM0Wq9k;H=,UH DuP;I )=u7l?<3ǀ{o!9d[1h0"h `{OM;OA᧧= ߼'DsC8x]gFDFa}J_C`IZ.)eBL|.!Cm T琧u F!M ~r$fR te.J]A*U;/@2w&٬׆lG6 g<-K[ &8U (Q$tT<~>F;y.TC g>KFÂDFosx~xc>pi* O7.]n1]>mdD.wUQuFDXʈGR $nJߥyn\wo.I@fGjJ=rM(I>zuKZց*)SKSn_8&̷҅;.r3N961x|'$k׷Kndiתּ]r7pKM4~+Su^:֓?9iiabQ2`EcM8< mZŦ1 w D )|B0a@o#~BcqXߔMXFI> endobj 3120 0 obj << /Length 3121 0 R /Filter /FlateDecode >> stream xVKs0+HN3=t&gz34"4+^j9516h?>$ (^!.0b!­S=nBolGP7GzǫrF)n6esr}KBE$@ٕ3E!O] F#[!H(LHte/3WTeZ[ZOˉd7&eïI ǯ$M^NP6 H,αU"Hbje=2Kj8ya\%(wr smh )4һ*s(JLi?p|ș 8 +eUI"U\u3po4M\ )z"7Nn 40+\9YOΠ:z$ZpU4.kS^0N" 6Gm3SԾR+/8 9.⨟mU)p4dv[lAoyMjV2sOT}Yf!saNV4[|s&VMK[> endobj 3123 0 obj << /Length 3124 0 R /Filter /FlateDecode >> stream xVn0+h CR{n-=Hc8ڢBR گPTͩd['fÀ}aa!=8- SppƋv^Pc_il 5v) ;D3}xv:zF*nλsFa!qCD\ۋb IA@@(peEemsw6Gfp;[0=$s Z 1j?;hF> endobj 3126 0 obj << /Length 3127 0 R /Filter /FlateDecode >> stream xVKo0 W {; `([I%+-_?ʲsIL"E}aI {͇A(yԎصe?~zGw{LF$qlI]Zw&iL$Ͳ(NYrƋB9qo0~X]jEe4eN8ō` ~6kNy8 l5<vHZ+&0s9> 5sИHpOG7 7,nhrW\%9(|6壨t.28}]ԶJyVIsȜ瘸\ĸ!=ؘNMr! _׼5jPaX!PJwi!2ʢAʹU1dxmiDk0EKh;o-t\݆_RcƢM]Ke`%[Ѫ4}om|(CÎBzcw! 6?9=S<O( ^<ߘU{dr endstream endobj 3127 0 obj 762 endobj 3128 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3126 0 R >> endobj 3129 0 obj << /Length 3130 0 R /Filter /FlateDecode >> stream xUKs0W1eKN3x$qmXL ͩ H]}Z= (QC : 1$}g ߃"%D4C< ; QXxy+B44Cʋ$EYR'PY#_A$QJP$r_u^dl~G ߘd_3e?4YjAb%P2PAD|lí˪6I &;#4h'<$W /sKR/Fsc$"?2WQ\zWsFF#b6&cQ,V7IUmwo"LDR9ۅ|_[[qJhH(Lzq9zmO4:u7 ~H+*/Xք 4$K|ZqƉx~qP }Kj> endobj 3132 0 obj << /Length 3133 0 R /Filter /FlateDecode >> stream xUK0+渑!V}Պ Ȫc$Sw!/7'wipS1P7􀻄K+5.ֳ}ڵ D~:Cshgq:Q97/v+B/'9milaC!>!xQJP˶ʢ2ɳ6ecy3L0$[%Q4U  +ˌS$fVUcMMЙr}p9L n`KLJ*~9WshAB,´P1$XFPHw! mQxgQmcipF F=(?< Jlwq]L 2:+{> !0j; Y{=R]P`4oM~h|0aqfOLrs-8xeü%xvj!臖0 .9l>kF2 ߶\S~"QajɯT##;QkT$M!ʐI kt"_9Fۊ V*&r)IW^^YU endstream endobj 3133 0 obj 628 endobj 3134 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3132 0 R >> endobj 3135 0 obj << /Length 3136 0 R /Filter /FlateDecode >> stream xUM0Wq9k;H=,UH DP;vH )=u7l?<7ǀ{o!9d[1h0"ZѮA67OhYO(|:o6"B7 +S},OrAH)bsij]+HNA+$ONČR|,24;K2gI6sܒ.9~qY8p`/o%2TD.ic~6JχT@bp™Jfn{Qpoi Fo7s e?dPRp>4 L]iCQ%ffۑoU͔:(:{jg ә b0)b)#Y3a.sv'fa ~ԫfʺd. %b!rؗ07? ?xZ9,oJ]' $Oa]XUN endstream endobj 3136 0 obj 651 endobj 3137 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3135 0 R >> endobj 3138 0 obj << /Length 3139 0 R /Filter /FlateDecode >> stream xVKo0 WX5=lmnmNeE(<:6 "2)HɏS;Ha ⱊE1ފ*`O}bi;zm'+( ?[.QsݵW$b ̃O#`=\*BTABWaUmbieZ`4*f0; C0J)8x:+ ҵ6A&g]ܖ9$qUx1CB 80 A\ζ6wۃ0n$D캸\N cp@WwolPm҅n36cX?$$%q[$dSg/E5U{W!Q2Q*7b73}懛t4gi&X+jIJ endstream endobj 3139 0 obj 789 endobj 3140 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3138 0 R >> endobj 3141 0 obj << /Length 3142 0 R /Filter /FlateDecode >> stream xVn0+VHXZ(֦ [R=Aڴ-INڿ/&a#pGa"F!L&'@#Dcmv^m4[;{mLlG _{m]j{ ρ :~nD :8 `zh)C88i ) )7 &2Skj KQ (6'm[$PJ0$d@eW:+T3d|?F1nl~vI+@ YތuȬ840-!z*FA =\,* ra*J!PK9<~H44a9w9 ٓTj]o`U9ډlk 45q=tFItXߪUYպ#pqr9F@\|"j[|K8B/}q Yyn'L^2baIڇrϥuŇE$;iZ?Ir̥=`"Ȫh3aװy>'NN&t0߬_Y[ iM rOne)Qe̴pwe2ўE JeվT·dVw5'm dO"yq'Y-lg6& (ZT?e(ɭͬ &npwt닾Rn ec+ͩ e=(K b9zJ,P3>,&)JC՝X,t2Dmji<\Mjq38r#7=Gn8r}w9CqA ϯIqpl#PA5lkF&t8g^􍽷c\psk}U9}dƅ`.q 2ݼ= endstream endobj 3142 0 obj 847 endobj 3143 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3141 0 R >> endobj 3144 0 obj << /Length 3145 0 R /Filter /FlateDecode >> stream xXKo6WJQܶCi ^DlcSߔ,{̈ǙOV^! <,^-DAQ:6IH Eb^elʄC/{*q|Z̤B 2hNfX .CN̟_gBi$ apÎ MN+'ZMk/"svHՀ6ms@(i̮"EL`pȕ&<՝q-f)HI-^ZU%s$,yؚ l&58 bp`i9LrM,D1(s.yDuo3$x{"$ :[/?a8 qPkXěaG=k5p$ʠ']IhIFK*OlXZ%d%'qq;*>>C{ endstream endobj 3145 0 obj 1228 endobj 3146 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3144 0 R >> endobj 3147 0 obj << /Length 3148 0 R /Filter /FlateDecode >> stream xVY6~ׯJR(ЦзM !\Zc%i_̘spo(~ (ܫGV0(QD鹉&)8d q4'jQ=82 {#ZhO50qVj#~^%ލeYH(<aWE[ՃŒ( j':Y Ml47QC/3Q9q!W56R›47VM\2hC٨QcF\lvIx:o5> %1qѪ^ma4{noɯZw\nIB^rWzA endstream endobj 3148 0 obj 970 endobj 3149 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3147 0 R >> endobj 3150 0 obj << /Type /Action /S /GoTo /D [2990 0 R /XYZ 72.0 720.0 null] >> endobj 3151 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 214.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3150 0 R /H /I >> endobj 3152 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3150 0 R /H /I >> endobj 3153 0 obj << /Type /Action /S /GoTo /D [2993 0 R /XYZ 72.0 720.0 null] >> endobj 3154 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 233.44 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3153 0 R /H /I >> endobj 3155 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3153 0 R /H /I >> endobj 3156 0 obj << /Type /Action /S /GoTo /D [2996 0 R /XYZ 72.0 720.0 null] >> endobj 3157 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 220.67 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3156 0 R /H /I >> endobj 3158 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3156 0 R /H /I >> endobj 3159 0 obj << /Type /Action /S /GoTo /D [2999 0 R /XYZ 72.0 720.0 null] >> endobj 3160 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 252.88 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3159 0 R /H /I >> endobj 3161 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3159 0 R /H /I >> endobj 3162 0 obj << /Type /Action /S /GoTo /D [3002 0 R /XYZ 72.0 720.0 null] >> endobj 3163 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 219.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3162 0 R /H /I >> endobj 3164 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3162 0 R /H /I >> endobj 3165 0 obj << /Type /Action /S /GoTo /D [3005 0 R /XYZ 72.0 720.0 null] >> endobj 3166 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 245.67 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3165 0 R /H /I >> endobj 3167 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 649.5 539.998 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3165 0 R /H /I >> endobj 3168 0 obj << /Type /Action /S /GoTo /D [3008 0 R /XYZ 72.0 720.0 null] >> endobj 3169 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 242.34 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3168 0 R /H /I >> endobj 3170 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3168 0 R /H /I >> endobj 3171 0 obj << /Type /Action /S /GoTo /D [3011 0 R /XYZ 72.0 720.0 null] >> endobj 3172 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 277.88 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3171 0 R /H /I >> endobj 3173 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3171 0 R /H /I >> endobj 3174 0 obj << /Type /Action /S /GoTo /D [3014 0 R /XYZ 72.0 720.0 null] >> endobj 3175 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 241.78 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3174 0 R /H /I >> endobj 3176 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3174 0 R /H /I >> endobj 3177 0 obj << /Type /Action /S /GoTo /D [3017 0 R /XYZ 72.0 720.0 null] >> endobj 3178 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 601.5 240.43 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3177 0 R /H /I >> endobj 3179 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 601.5 539.998 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3177 0 R /H /I >> endobj 3180 0 obj << /Type /Action /S /GoTo /D [3020 0 R /XYZ 72.0 720.0 null] >> endobj 3181 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 211.22 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3180 0 R /H /I >> endobj 3182 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3180 0 R /H /I >> endobj 3183 0 obj << /Type /Action /S /GoTo /D [3023 0 R /XYZ 72.0 720.0 null] >> endobj 3184 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 577.5 309.778 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3183 0 R /H /I >> endobj 3185 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 577.5 539.998 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3183 0 R /H /I >> endobj 3186 0 obj << /Type /Action /S /GoTo /D [3026 0 R /XYZ 72.0 720.0 null] >> endobj 3187 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 255.1 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3186 0 R /H /I >> endobj 3188 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3186 0 R /H /I >> endobj 3189 0 obj << /Type /Action /S /GoTo /D [3029 0 R /XYZ 72.0 720.0 null] >> endobj 3190 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 232.32 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3189 0 R /H /I >> endobj 3191 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3189 0 R /H /I >> endobj 3192 0 obj << /Type /Action /S /GoTo /D [3032 0 R /XYZ 72.0 720.0 null] >> endobj 3193 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 269.53 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3192 0 R /H /I >> endobj 3194 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 541.5 539.998 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3192 0 R /H /I >> endobj 3195 0 obj << /Type /Action /S /GoTo /D [3035 0 R /XYZ 72.0 720.0 null] >> endobj 3196 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 293.96 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3195 0 R /H /I >> endobj 3197 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3195 0 R /H /I >> endobj 3198 0 obj << /Type /Action /S /GoTo /D [3038 0 R /XYZ 72.0 720.0 null] >> endobj 3199 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 230.09 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3198 0 R /H /I >> endobj 3200 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3198 0 R /H /I >> endobj 3201 0 obj << /Type /Action /S /GoTo /D [3041 0 R /XYZ 72.0 720.0 null] >> endobj 3202 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 223.44 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3201 0 R /H /I >> endobj 3203 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3201 0 R /H /I >> endobj 3204 0 obj << /Type /Action /S /GoTo /D [3044 0 R /XYZ 72.0 720.0 null] >> endobj 3205 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 230.66 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3204 0 R /H /I >> endobj 3206 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3204 0 R /H /I >> endobj 3207 0 obj << /Type /Action /S /GoTo /D [3047 0 R /XYZ 72.0 720.0 null] >> endobj 3208 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 241.21 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3207 0 R /H /I >> endobj 3209 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3207 0 R /H /I >> endobj 3210 0 obj << /Type /Action /S /GoTo /D [3050 0 R /XYZ 72.0 720.0 null] >> endobj 3211 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 232.88 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3210 0 R /H /I >> endobj 3212 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3210 0 R /H /I >> endobj 3213 0 obj << /Type /Action /S /GoTo /D [3053 0 R /XYZ 72.0 720.0 null] >> endobj 3214 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 235.66 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3213 0 R /H /I >> endobj 3215 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3213 0 R /H /I >> endobj 3216 0 obj << /Type /Action /S /GoTo /D [3056 0 R /XYZ 72.0 720.0 null] >> endobj 3217 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 245.66 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3216 0 R /H /I >> endobj 3218 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3216 0 R /H /I >> endobj 3219 0 obj << /Type /Action /S /GoTo /D [3059 0 R /XYZ 72.0 720.0 null] >> endobj 3220 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 267.88 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3219 0 R /H /I >> endobj 3221 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3219 0 R /H /I >> endobj 3222 0 obj << /Type /Action /S /GoTo /D [3062 0 R /XYZ 72.0 720.0 null] >> endobj 3223 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 293.99 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3222 0 R /H /I >> endobj 3224 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3222 0 R /H /I >> endobj 3225 0 obj << /Type /Action /S /GoTo /D [3065 0 R /XYZ 72.0 720.0 null] >> endobj 3226 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 293.99 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3225 0 R /H /I >> endobj 3227 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3225 0 R /H /I >> endobj 3228 0 obj << /Type /Action /S /GoTo /D [3068 0 R /XYZ 72.0 720.0 null] >> endobj 3229 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 261.77 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3228 0 R /H /I >> endobj 3230 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 397.5 539.998 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3228 0 R /H /I >> endobj 3231 0 obj << /Type /Action /S /GoTo /D [3071 0 R /XYZ 72.0 720.0 null] >> endobj 3232 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 261.77 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3231 0 R /H /I >> endobj 3233 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 385.5 539.998 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3231 0 R /H /I >> endobj 3234 0 obj << /Type /Action /S /GoTo /D [3074 0 R /XYZ 72.0 720.0 null] >> endobj 3235 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 261.2 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3234 0 R /H /I >> endobj 3236 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3234 0 R /H /I >> endobj 3237 0 obj << /Type /Action /S /GoTo /D [3077 0 R /XYZ 72.0 720.0 null] >> endobj 3238 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 285.63 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3237 0 R /H /I >> endobj 3239 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 361.5 539.998 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3237 0 R /H /I >> endobj 3240 0 obj << /Type /Action /S /GoTo /D [3080 0 R /XYZ 72.0 720.0 null] >> endobj 3241 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 221.76 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3240 0 R /H /I >> endobj 3242 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3240 0 R /H /I >> endobj 3243 0 obj << /Type /Action /S /GoTo /D [3083 0 R /XYZ 72.0 720.0 null] >> endobj 3244 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 246.19 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3243 0 R /H /I >> endobj 3245 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3243 0 R /H /I >> endobj 3246 0 obj << /Type /Action /S /GoTo /D [3086 0 R /XYZ 72.0 720.0 null] >> endobj 3247 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 246.75 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3246 0 R /H /I >> endobj 3248 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3246 0 R /H /I >> endobj 3249 0 obj << /Type /Action /S /GoTo /D [3089 0 R /XYZ 72.0 720.0 null] >> endobj 3250 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 215.11 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3249 0 R /H /I >> endobj 3251 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3249 0 R /H /I >> endobj 3252 0 obj << /Type /Action /S /GoTo /D [3092 0 R /XYZ 72.0 720.0 null] >> endobj 3253 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 225.11 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3252 0 R /H /I >> endobj 3254 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3252 0 R /H /I >> endobj 3255 0 obj << /Type /Action /S /GoTo /D [3095 0 R /XYZ 72.0 720.0 null] >> endobj 3256 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 249.54 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3255 0 R /H /I >> endobj 3257 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3255 0 R /H /I >> endobj 3258 0 obj << /Type /Action /S /GoTo /D [3098 0 R /XYZ 72.0 720.0 null] >> endobj 3259 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 225.11 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3258 0 R /H /I >> endobj 3260 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3258 0 R /H /I >> endobj 3261 0 obj << /Type /Action /S /GoTo /D [3101 0 R /XYZ 72.0 720.0 null] >> endobj 3262 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 249.54 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3261 0 R /H /I >> endobj 3263 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3261 0 R /H /I >> endobj 3264 0 obj << /Type /Action /S /GoTo /D [3104 0 R /XYZ 72.0 720.0 null] >> endobj 3265 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 225.11 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3264 0 R /H /I >> endobj 3266 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3264 0 R /H /I >> endobj 3267 0 obj << /Type /Action /S /GoTo /D [3107 0 R /XYZ 72.0 720.0 null] >> endobj 3268 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 249.54 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3267 0 R /H /I >> endobj 3269 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3267 0 R /H /I >> endobj 3270 0 obj << /Type /Action /S /GoTo /D [3110 0 R /XYZ 72.0 720.0 null] >> endobj 3271 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 220.11 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3270 0 R /H /I >> endobj 3272 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3270 0 R /H /I >> endobj 3273 0 obj << /Type /Action /S /GoTo /D [3113 0 R /XYZ 72.0 720.0 null] >> endobj 3274 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 244.54 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3273 0 R /H /I >> endobj 3275 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3273 0 R /H /I >> endobj 3276 0 obj << /Type /Action /S /GoTo /D [3116 0 R /XYZ 72.0 720.0 null] >> endobj 3277 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 239.54 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3276 0 R /H /I >> endobj 3278 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3276 0 R /H /I >> endobj 3279 0 obj << /Type /Action /S /GoTo /D [3119 0 R /XYZ 72.0 720.0 null] >> endobj 3280 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 240.1 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3279 0 R /H /I >> endobj 3281 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3279 0 R /H /I >> endobj 3282 0 obj << /Type /Action /S /GoTo /D [3122 0 R /XYZ 72.0 720.0 null] >> endobj 3283 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 222.33 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3282 0 R /H /I >> endobj 3284 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3282 0 R /H /I >> endobj 3285 0 obj << /Type /Action /S /GoTo /D [3125 0 R /XYZ 72.0 720.0 null] >> endobj 3286 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 246.76 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3285 0 R /H /I >> endobj 3287 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3285 0 R /H /I >> endobj 3288 0 obj << /Type /Action /S /GoTo /D [3128 0 R /XYZ 72.0 720.0 null] >> endobj 3289 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 247.32 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3288 0 R /H /I >> endobj 3290 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3288 0 R /H /I >> endobj 3291 0 obj << /Type /Action /S /GoTo /D [3131 0 R /XYZ 72.0 720.0 null] >> endobj 3292 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 224.55 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3291 0 R /H /I >> endobj 3293 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3291 0 R /H /I >> endobj 3294 0 obj << /Type /Action /S /GoTo /D [3134 0 R /XYZ 72.0 720.0 null] >> endobj 3295 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 248.98 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3294 0 R /H /I >> endobj 3296 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3294 0 R /H /I >> endobj 3297 0 obj << /Type /Action /S /GoTo /D [3137 0 R /XYZ 72.0 720.0 null] >> endobj 3298 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 249.54 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3297 0 R /H /I >> endobj 3299 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3297 0 R /H /I >> endobj 3300 0 obj << /Type /Action /S /GoTo /D [3140 0 R /XYZ 72.0 720.0 null] >> endobj 3301 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 227.33 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3300 0 R /H /I >> endobj 3302 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3300 0 R /H /I >> endobj 3303 0 obj << /Type /Action /S /GoTo /D [3143 0 R /XYZ 72.0 720.0 null] >> endobj 3304 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 237.33 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3303 0 R /H /I >> endobj 3305 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3303 0 R /H /I >> endobj 3306 0 obj << /Type /Action /S /GoTo /D [3146 0 R /XYZ 72.0 720.0 null] >> endobj 3307 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 269.55 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3306 0 R /H /I >> endobj 3308 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3306 0 R /H /I >> endobj 3309 0 obj << /Type /Action /S /GoTo /D [3149 0 R /XYZ 72.0 720.0 null] >> endobj 3310 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 262.32 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3309 0 R /H /I >> endobj 3311 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3309 0 R /H /I >> endobj 3312 0 obj << /Length 3313 0 R /Filter /FlateDecode >> stream xOeǙ=?E-ۋ.4``&EAŒDX*JŢ53~nd˻c^E~ݙK}sûۏ?}/__YO/__J_Ot+|\wO}EO9}f_8s:GXXXXXXXX纱uc:un6ֹosX羱}c:u<7yn|y<_7V+^/Ɗsc˹Xrnx)+^Ɗⱳⱳⱳ⹳⹳⹳⹳ugΊםo;+vVxY}gΊ;+>vV|Y?mx+Ɗ˵6scţlxⱳⱳⱳⱳ⹳⹳⹳ugΊםo;+vVxYG}߉vV|YsgΊϝ+~;D+~)oDƊ;Ɗv;Ɗ;ΊΊΊΊΊΊΊ?NжO_~7^~6JzT'uAX+ >r]!X+ uAAAAIII,+Y7:nTO{R='I5YNd9rBj\W@@}Bj\W@H- 222222ɲe%J,Y6ldɲe'A,Yd9rebX!yebX)Y2Xf! $$$˗9~qgo 1~]K3o;.RU)(TW:PbfRyH-ku5,,,,,,,,+YVdȲe#F,;Yvd9r$I,XbfPbfRyH-k!5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\3r<>r<5󀺈yHMAAAIIIl_FQ./O~͟>|?md߼7'Iui6꠺Q=~FRMIII,+YVdȲe#N,;Yd9r$IS,82S,82N"Q2 YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X!yebX)yebE,e LL|y=߾eK6^NE3(S>f|=rR]OR]Iu@('5TTTTTTTVSZMj3fTvS:Lu0iT'夺#&$ꚑH^HuMI(70004444jT6SmLj7nTS:Mu$5>TrR]#Iu Q$/(jjjjjjq}^'^޻8o.q??I;A’Iz!z|夺 IzTc(70004444jT6SmLj7nTS:Mu$۟T('Iu=AB9jjjjjjjj5jT6SmLj7nTS:Mu$Iu=BTS ('Iu= rS S S SMSMS}{}^'+ox7I}K+e}Fyw;۷4oi۷4fj7nTS:Mu$urR]Ǒ$?IuGTq$IuGTTTTTTTVSZMj3fTvS:Lu0iT'H:$I8夺#I^HuGTTTTTTTTVSLj3nTvS:Lu4iTq$IuGTq$IuG:Dl)mt=tף ݙ_kr^|_o?}pk?K~9!ߗW]SX,Zg/|!O;/|!˛CWMu4IqjAqj'F!(TTTTTTTTVSLj3fTvS:Lu4iT'Ayj'IyjRBYH5^!_|:PZo?͟~o>}/>{}/,TW}R']:X7HMAAAIIII,+YVldȲe'N,;Yd9r$)k XbR@]rM& $$$J,+Y6ldȲe'N,Yd9r$)k> XԧXـb&R HMAAAII5T`=mǣyGI>)_iZ>(_i<-GInT's:G/I=夺SN=ZMj5jT6SM0aTNS:IuT9zOR])'u^B=ZMj5fTvSM0aTNSSN=夺SNT9zM5L5L5L5L5M5MuMtz&:[(~>~77ܾ|kofwA,Nyjjjjjjj5jT6SmLj7nTS:Mu$8H5RT$8I5NR}TjS S S SMSMSMSZMj5fTvSMu0aTNSAyj'IyjRBYL5L5L5L5M5M5MN ׿gHW|{{<,oOoGʫrSgzfoGf{Z>()OMu4iTrR]GOR]GIu)'յ{TTTTTTTVSZMj3fTvS:Lu0iT'#夺vv=J^Hu)7000444eiwy=qwh/~LyI(WTNR]夺PN夺H^HuM(70000444jT6SmLj7nTS:Mu4IkD9I'I夺&AQnaaaiiiTVSLj3nTS:Lu4iT$rR] OR] IuM$/&AjjjjjjjU=>z@}R| w[as%˛aɫaMu4iT'$('u'$('u夺.TTTTTTTVSZMj3fTvS:Lu0iT'$('u'$('uTejjjjjjjj5jT6SmMj7nTS:MuLrR]IPN2 Iu]&!y!uKwU=t.DŽ\mo!Z{#S~g6ay|R~g6A4iTtrR]Nj('夺I^Hujjjjjjjj5jT6SmLj7nTS:Mu$urR]Nj$?Iu/T"Iu/TTTTTTTVSZMj3fTvS:Lu0iT'E:^$Ix夺I^Hu/TTTTTTT讪g}0?~p/zdͺU#AΔ/)˛SurR]i$?IuTAIuTTTTTTTVS¹N>)™j gNΔ:Lu4I 夺H~:HC94R]i(70004444jT6SmLj7nTS:Mu$urR]i('urR]i$/Pnaaaaiio{ Tu?Owj~ۧ^n[ߚ^,iyZ):MuPNk#IkC9夺f;jjjjjjj5jT6SmLj7nTS:Mu$5ۡTlGTlrR] ZMj5fTvSM0aTNSf;PNkC9َTlrS S S S SMSMS]gdz#[(}ۧTo׌h%v۷}fmjmTNS:IurR]?$C^IurR]?TTTTTTTVSZMj3fTvS:Lu0iT'RN뇼~K9J^HurS S S SMSMSMS.=_1o_7wN7'ow;y|PvFvIN^-=iNS:Mueez=z=z=ZMj5jT6SM0aTNS:I{I{ORwrR7BNnaaaiiiowy-_l^uoDKR_~owʇ1iy;ay|R^Hu?TTTTTTTTVS7նs;y;-O;<,oOGZnTNR])'urR])'uXB1ZMj5fT6SM0aTNS:Iu?TcOR])'urR])700044շ2kÀؽRϐÀaF>$6S~lay|R^H: M5L5L5L5M5M5M5Mj50y~liy2 f2 ȫ:Mu$0`#'0`#'0`#'0y^H: M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuuuxaayX,3j!I!;C 'waaaiiiiTVSmLj7nTS:Lu4I 夺PN 夺H^HuTTTTTTTTVSLj3fTvS:Lu4iT'7:#I 夺PN FwU-cM:&>G30vöp fº~˽0wM,M,M[+M*ؕ]ؕ]ܕ]ܕ2uWʴ]+veLߕ2}Wfʌ]+3weܔyr/ܔy r/ܔyr/ܔyq+,2/7=2+2+2+2+SweLݕi2mWʴ]+weؕ2cWf]+37e^nS 7e^nP M[MM]ؕ]ؕ]ܕYٻy]T~s7_nhϿ׭A~&y|P~&yZ)_?x<,7nTS:Muz 夺ޡB9wPN*R]PTTTTTTTTVS]?x;nEI7'oWo:Mu4I*z'wPN*z ZMj5jT6SM0aTNS:IuCrR]P$IuCEB*jjjjjj =ǃB?~>now\wp?fby|PON8,Mu4iT_#9T_#9B/oTTTTTTTTVSo?iyZ)ay|R>rS:Mu}$'՗HN/oT_y!՗HnaaaaiiiTVSmLj3nTS:Lu4iT $_ NIkxA9TrS S S SMSMSMSMSZMT8Qs'oiyI(WMu4IkxA9夺^H^Hu /(70000444jT6SmLj7nTS:Mu4IkxA9'夺^PnaaaiiC/wy`Ogϻz{Mre#/^6S~9:Lu4IC/9^)zȫ:Mu$롗T^6rRzIzy^Hze#70000444jT6SmLj7nTS:Mu4IC/9^NN<,˛S5"T׈DT׈rR]#IuH(7000444jTV,iyZ)aS:MuPNkD"IkDB9T׈rS S S SMSMSMSMSZMj3fTvSMu0aTNR̓T O.y9HZR-TI$RHR-TTTTTTTTVS}{}#{}'˛'wj<-7iTNRT 8H5NRT$(TjS S S SMSMSMSZMj5fTvSMu0aTNSAyj'IyjRBYL5L5L5L5M5M5Mƃx0v]wuXx9~cKr{S3uz@rc.br_~}mP]u˗r& $$$$J,+Y6ldȲe'N,Yd9r8>Z,_oݮO| wכpk|w LLLdYɲe#F,Yvdr A,'YNbz~-nקX^u_EX^s_eeeeeuU57u量r#]ssăwf˫~ZwaS:Mu$5 T0HT8rR]! ZMj}fҍ~X7'X^-7iT'AkXD9q'夺FFIZMj5fT6SM0aTNS:IuM('5O$5QTLrR]S%M5L5L5L5M5M>`ʔW:z>xG3f|˫C5<-'5T̃rR]3Iu<$S S SMSMSMSMSZMTq~X7'X^-7iT'夺fyPNk!y!5TTTTTTTTVSLj3fTvS:Lu4iT'夺ffyPNkA5wU`юQ7!KU iye yX,,rR-'TIj)Z baaaiiiTVSLj3nTS:Lu4iT-꺥VT-꺥VBZM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5R̓T K_G} wu9rNWY>)_JnTNSrrrr/T_.TTTTTTTTVS}\ yX,\ y|Pr/iNS:MueeIBNBNBnaaaiiiTVSLj3nTS:Lu4iT_/ㅜT_/OR}rR}w?/z/U5ti)j|]|ByZ)?Iu]|B9O$/.>TTTTTTTTVSovy'!;9^ҼzyHNN4oT/iM5L5L5L5M5M5M5Mj5շi>y'O;oҼIۇ4rS:MujzyHNN4o'^Ҽ!;9^ҼVSZMj3fTvS:Lu0iTNRe{`n囿\yZ鰼Y>){ N^-u'O;aaaaiiiTu#{ N7'oAɫנiNS:MuԝT/נn'^AIr NNkPwrS S S SMSMSMSZMj5fTvSMu0aTNSzu''5IkPwrR\R\jjjjjjڦUxMgנMt;޿җ_偻;ݝZ>(ݝ<-}NNZMj5jT6SM0aTNS:IݝT/ORwgm?~뇎Wo__n|~[_k}wRn(sR?+^?jo endstream endobj 3313 0 obj 14383 endobj 3314 0 obj [ 3151 0 R 3152 0 R 3154 0 R 3155 0 R 3157 0 R 3158 0 R 3160 0 R 3161 0 R 3163 0 R 3164 0 R 3166 0 R 3167 0 R 3169 0 R 3170 0 R 3172 0 R 3173 0 R 3175 0 R 3176 0 R 3178 0 R 3179 0 R 3181 0 R 3182 0 R 3184 0 R 3185 0 R 3187 0 R 3188 0 R 3190 0 R 3191 0 R 3193 0 R 3194 0 R 3196 0 R 3197 0 R 3199 0 R 3200 0 R 3202 0 R 3203 0 R 3205 0 R 3206 0 R 3208 0 R 3209 0 R 3211 0 R 3212 0 R 3214 0 R 3215 0 R 3217 0 R 3218 0 R 3220 0 R 3221 0 R 3223 0 R 3224 0 R 3226 0 R 3227 0 R 3229 0 R 3230 0 R 3232 0 R 3233 0 R 3235 0 R 3236 0 R 3238 0 R 3239 0 R 3241 0 R 3242 0 R 3244 0 R 3245 0 R 3247 0 R 3248 0 R 3250 0 R 3251 0 R 3253 0 R 3254 0 R 3256 0 R 3257 0 R 3259 0 R 3260 0 R 3262 0 R 3263 0 R 3265 0 R 3266 0 R 3268 0 R 3269 0 R 3271 0 R 3272 0 R 3274 0 R 3275 0 R 3277 0 R 3278 0 R 3280 0 R 3281 0 R 3283 0 R 3284 0 R 3286 0 R 3287 0 R 3289 0 R 3290 0 R 3292 0 R 3293 0 R 3295 0 R 3296 0 R 3298 0 R 3299 0 R 3301 0 R 3302 0 R 3304 0 R 3305 0 R 3307 0 R 3308 0 R 3310 0 R 3311 0 R ] endobj 3315 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 3314 0 R /Contents 3312 0 R >> endobj 3316 0 obj << /Length 3317 0 R /Filter /FlateDecode >> stream xVn:+f KRi t#1rHA_iWm8͋gE' (~94>bxFxfE bSqKƫ7(K &ڢ=ħWA#]f'Fau;CKBӬ*-\t@Z1 ξ$H(,-Ӄ,jWVbgc߯ K tJXx'S A\Œ%k)=b4R7c?ctd\Y'6秉`R(m4+a@\|Ʊ4;[of'הZ(xerQIIQVL hA겪W)2Qtj(SNԶr9C,kggfWo?|f-hqsC$𙴏İUwvAl g-w\L;[ng׸]Z^0,nf(UtDFƹ,GCf'Fh1A'-cs:G'>Z׉=zNTɍ0Lr|4uan thUh(Yu ̗n Gv[4>X ݰt:>s`l_S=pv͜~Y*m{svj4 endstream endobj 3317 0 obj 835 endobj 3318 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3316 0 R >> endobj 3319 0 obj << /Length 3320 0 R /Filter /FlateDecode >> stream xUMs0W1P%YiәޘCa(`ۤߕ?s 5]b }H( 2T7Qkr?}]@lG&+4`> 7S|U 8듴h6R1UEm`%,%Bo$a"9A![Ui//qO2)I6SDVpK`Ȝ2PC%@PbQb/yšZ (uaBd($INze:우Ȅ; s?l)MPaj#oD35,ߗiم B5}452ISNɿ XYc9\V Ԕe:eWuutWK5bPWP9tPfA.+ELH$MϮ\;P θ;ަ%L`|G`~;yvӣ=뉡`Z\`хHa8q[w[:g> endobj 3322 0 obj << /Length 3323 0 R /Filter /FlateDecode >> stream xUMs0+J+oLo!x\#N+>ؖxhWOOO˳'5w6`4 PP\G!5݈jem 񶳇^q?WkW8OVm;iQ3.}cL d D+$:!^k-#Dߺ$B9RA)ݔI-/QO2)IUSVDjVpIɜ2PM!@T|UTbOYiթJ4? IӪ^& 28FAwD=@~-n.%/6GsH'.4gAP׍ٱH6Ԍ!x 0lgJE=ܬ8_ B:\|UŹY'w5Ӆڢ2kϡ m^0dB'&O9tU>)`5w6gndz_w?'iTbMo'"F7nocu\R5x'^(>z\ϯPL1TPh5ML( Rr}ƪ@ endstream endobj 3323 0 obj 618 endobj 3324 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3322 0 R >> endobj 3325 0 obj << /Length 3326 0 R /Filter /FlateDecode >> stream xV;o0+nk ,IQE(jӎ=Qrߣ(ɶ8dm';ߩ0Ͻc 9>Ă <@I~@J튬]LA_^Q]"@rἤFyb"J\CE7˱@xJ~)saY9Xo yY=J#) в#{*ʵIM/PQ2R*b78 a&7gbQͲ'pNG]UwYo&/D@e!ժuQbd2m cD{2ce1P}_kN O{HuGiC(YZ1&YΣ*^nIMdY;/s̱ o }f^k* +YЗ Ll~65äpno$Sd0uERY~:/v 6Cwؾ?(J7zAPѱ"[jEM>/OL]0.$GhdOW)8}N =qvp|$ԙ_Ҋ0J+SgoIo̪m endstream endobj 3326 0 obj 747 endobj 3327 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3325 0 R >> endobj 3328 0 obj << /Length 3329 0 R /Filter /FlateDecode >> stream xV;o0+nk ,IQE(jӎ=Qrߣ(ɶ8dm';ߩ0Ͻc 9>Ă <@I~@J튬]LA_^Q]"@rἤFyb"J\CE7˱@xJ~)saY9Xo yY=J#) в#{*ʵIM/PQ2R*b78 a&7gbQͲ'pNG]UwYo&/D@e!ժuQbd2m cD{2ce1P}_kN O{HuGiC(YZ1&YΣ*^nIMdY;/s̱ o }f^k* +YЗ Ll~65äpno$Sd0uERY~:/v 6Cwؾ?(J7zAPѱ"[jEM>/OL]0.$GhdOW)8}N =qvp|$ԙ_Ҋ0J+SޒޘU endstream endobj 3329 0 obj 747 endobj 3330 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3328 0 R >> endobj 3331 0 obj << /Length 3332 0 R /Filter /FlateDecode >> stream xVK8 Wq%!knn[i)D1۩̠~I=lym "i"={MTVU8HI~hY"Ef‚Z[{Tfau&'oh]=ȅ Y"ʍ&g~g|2fI*2(D(XVsߖt5 mo8IӸ1Hlq_;X]gznyY٭niPOƶ oPZqBHl)xDB.77δECYiOj'a`ϊ !%t6ǶnW&Pa"Y9a"}]WvU@@R([']6(.M[,X64Sq,Vo;2u?Ws޴~Kd&E0]}F2rN6x\ȍ6%WڵŒؾ/OvA?rXG't%UnMjMʥ(K>˲] Wpf֍`Pv;dڪuo֣(zϠQܔψàZ(ALմ?&a] ^>SY[s<>",p<+Gyo̙& k;F'ababRvq21LN%ߚS$0= fY~QŌ endstream endobj 3332 0 obj 885 endobj 3333 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3331 0 R >> endobj 3334 0 obj << /Length 3335 0 R /Filter /FlateDecode >> stream xUMs0+$[;͍gzH2b+[8i}WSc[Czzz,O7*EO=@qr D OhhS?c>v |lDKt{^.]"MqGѻ 0 ǃ\*4Munnꪰ9dv Π2gfzHD3J) 8dyl.J`흩Oˑd7&٢.WօU  /BsˌS)$&\_7T?Lv8XC gUƍaBJg;4 :ƺ"f LMٶ1{C~ʄ /4%RJ/mӖ{WІQIRTrϑ,wWz]uߙ02tr}7;c 9%IL)SW={TD1GO` vrӚ0iGVUD89z$ @W4>3'DC?Ɇa ƝyoedC//=,;ɆN:2SLUŬӺR`Kі-kV+\x2*{CYIbz_L}5q\_w!=z%:yeUSL endstream endobj 3335 0 obj 632 endobj 3336 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3334 0 R >> endobj 3337 0 obj << /Length 3338 0 R /Filter /FlateDecode >> stream xUn0+5KR )ZtA{sc$VؔCJj驉dgf8zP1t= #!\ֳkvGiw5!<{[NwōB}^y(6\q$y.\]&$z L(~NHF)eN'^6N˼VުI3$[%8E Ny,3N(?e2UK+c Ht"Z|ĉE tt˹KIe1G6ϴZ*2el+, qORmwph"$"'hS.6i|B!F# -Q^:J;{CPzdjtB:'1$2 V۹UFY(Ցt(k,cr& SaR7A,E{`3N5 s2xg00Po4{ۏ;=Q?tFG+c'xY"s/@h׺(º6V+IS?lwoPieȨhE) 腪O@)F*길)_DL%r Cyƪ/f endstream endobj 3338 0 obj 649 endobj 3339 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3337 0 R >> endobj 3340 0 obj << /Length 3341 0 R /Filter /FlateDecode >> stream xUMs0+[;͍gzH2b+[8i}WSc[Czzz,O7RsXc 9t $ E ?~ƶ}ܧ :و—5 D]x-&DF!>,w`i$TZk"kM]6̮aT_I(F)eB,]Ei,3ui9L0$[%[rJҺp1lAb%hcqDPHbuL)l-x'ΉsĜp&Pe 09&Rá)3r_ o C_@c][E 䦂lpuY!?ple+oP4MPO[]B> )Rirϑ,wWz]uߙ02tr}7;c 9%$ULISW={TD1GO` vrS0ĺ[q{S]r"g=[+ d0> endobj 3343 0 obj << /Length 3344 0 R /Filter /FlateDecode >> stream xUKs0+Ԫv3=$ 2aw KЮ>}Z<kd!yO-@rbA'<@]kzqvmѮ=Q!FPZ|@b-9E΄QbAH~XUws endstream endobj 3344 0 obj 649 endobj 3345 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3343 0 R >> endobj 3346 0 obj << /Length 3347 0 R /Filter /FlateDecode >> stream xUMs0+JBH"v1ӛd:V03p$aCm&ƶvX"oTaz1 \ E ?~ƶ}ܧ :و—5 D]x-&DF!>,w`i"4i4y?;5: `!D3J)p:U]2;Sw#bߘd_dk@_EZ.>T-8H{ XfLQxuL)l-E'Ήs'Ũ2n| %pd\Mĥ֙845kbPԀ Ln*xζW+pV&l0pM3JQ"Bކ?mw m$U:M%=Qr-m~wUם "(C'9Wy3 \HϔB;q~ճ'OEs$9h*w? v~4nU{oKN#I> endobj 3349 0 obj << /Length 3350 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$ӏioi, sVj t0"csv%?TiqS2ǿʛ0JW,U_gE endstream endobj 3350 0 obj 649 endobj 3351 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3349 0 R >> endobj 3352 0 obj << /Length 3353 0 R /Filter /FlateDecode >> stream xUMs0+~憙L3c A2 mؖЮS5wL8vӀ1DS |L@Kphx/A Q(isB>J%"LDEpHwpwsԥ) 39YAψ zLD1J)8dYfՔf{>S:L0$[v%;rJҹp9I ќ2T`".Eku-MzmS 3">.&0H쎆 i@x-2h- sPDz\^ljMUҀ#vߝpbp 3IRDZIi-MhL$j&me,;;&"R&RvMs`> endobj 3355 0 obj << /Length 3356 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$ӏioi/"`QZ. E$*EBr 7gW-LY*R,N QJY(әum(esjm.'3.~͒MrId4e^ɹ/3N&(R8vׅԽB%N8 Qj+n`%-rn2_m:h)+P$sm9\UZ|UL{ 0\ &) &tmʝ+\oј$R%IUG2gju_ˆ0;ǟl^o>(!&1;CգSTe"54S`m?lO)BF$_lu*!9Dpsv?iUS2?қ0JU  endstream endobj 3356 0 obj 646 endobj 3357 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3355 0 R >> endobj 3358 0 obj << /Length 3359 0 R /Filter /FlateDecode >> stream xVMs W> ЧocΤLqH d_EHINM,[, <q {χ.?vQ/a Ǯ=i_:-*WCx\>ڻ q]~ \e1

{g]![2ƤUXqI@}o4{QqJ(m8;LNEp6ˈW*ImK> yNsg$`^(F^,WuZlM g[u|UNߙt1'dg>n_c,4 ''xY#n', "fߥǚffX4iP3,vȮVZTddT-ȑ 7JH=6ģ K&ӿa5[Kbe> endobj 3361 0 obj << /Length 3362 0 R /Filter /FlateDecode >> stream xVMs0+h4$sk:3=ę fjD2 ڀmVJÀ}aa!=8 cpp֋a~/oz>[Zcߝ¡ɹC4C܇g go Q:VGf^Ǒqyl..n̋-$EYV_ G"F)enNl"yY(X%I2$n5) IS: 5X2cEr'\]Jz_{!e)[f&ˋ3Ѽ&5|g5!8r  o IOɾt) 0@UI*\LLt ) vU(++Ϩh@0G;\sH3/aO<ʰo>B| !?&A*ĒjL֓y8RL.DMYbTQDkxqP+SIʏ3N (&M1Ko Xp nI|v$zar3HݩؙD޿Od˵Hqb'BB &Db]bJ;K;r iy𭉠K2:Q-bdN] $~< eZ endstream endobj 3362 0 obj 754 endobj 3363 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3361 0 R >> endobj 3364 0 obj << /Length 3365 0 R /Filter /FlateDecode >> stream xVKs0+h N3=t&gz3 FDd_qsjblB;.P<.̉ ңs\ p A',@͢ s2DMs /p(|snniuՄ}W(O+\ m/-z~QXl> VGY\W*/vdIĖ}Rʶ.*URjQ_V#<3ɮ~͐M2rtոyZ=#ʌE&\^Z cV#aJ͜9rD HY5c|Km3u]!20CrJ*Dr@I*[,2-3SO!K.5Qť!y!N3XEe5fz񩋽|Q(*K bF86TgF}q^j/) JvP@2R~wE?n,t4ҹc.#>Õtm]P+\KmK" K뵍b]þ5XէOk"=P<H!|b*deRx囃HuiQmmIRcnP+>,JI^!+WNFv&`87:ND)e݅,U7v}^nƦR_k:VAE׃Fe)UodN،~4cWc 94s{>=aoJWnR\u%o(o9C endstream endobj 3365 0 obj 795 endobj 3366 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3364 0 R >> endobj 3367 0 obj << /Length 3368 0 R /Filter /FlateDecode >> stream xUr0w/H>fsLI&Cl3c{ͪ K:^G's9S1D8X nh ?nƮ}ڧ]@l᧗yyw&5[o9!B7 S}i$TZk"kwppws[i8K  9"6{bR&$p:ɲU晅(>XS6_dw&ٲW/YOڅ˱e  'DsʌS%E]ʚⱲۼh9|>' Tr&BB. ^\Nk1 2n2@1Ulxi=+=p:p2GR[V.Tѐhjqbg8I;7&Sns~,6deOh*J]TǹU/Pu.ܚ%0Bw{@=e,x,>*҃5qƉq Uzsw?Hknؤ:(hN!gHE?ȇչ׏:G$B5(KW+2*z}Q |z1h["CE7%s&]DBA.~xXUw!~$ endstream endobj 3368 0 obj 621 endobj 3369 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3367 0 R >> endobj 3370 0 obj << /Length 3371 0 R /Filter /FlateDecode >> stream xUMs0+4>!Ǵ77!d(mflp$p+@驉-]5RqȶS1D틶wN<'!y+jG|Sú̺qK&茶s9!|F?)&碛~ EL 7øXbahs@e!W(JPD1PMɜI(I(Vg> endobj 3373 0 obj << /Length 3374 0 R /Filter /FlateDecode >> stream xUr0w/eN3ݥLq&Cl3c Gdگ0`X51%tGG7RqX@rbI <&> endobj 3376 0 obj << /Length 3377 0 R /Filter /FlateDecode >> stream xTKo0+:mT-Z]Pyh}yؐ5|{s`#w1?\B@D-<ýDi]OW{{4M{nP~Kk-[x7>1CrtDcTpg%$^ɢ>AZg*Y( l!ai F]}PESVA BEq5_W/yӽjFԫ|ȢoH endstream endobj 3377 0 obj 550 endobj 3378 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3376 0 R >> endobj 3379 0 obj << /Length 3380 0 R /Filter /FlateDecode >> stream xUn0+W⸻C]H]ʀh $dR&p:JydiQ+LYcDL[M񫈳Є;}@35ơ E#]nnP&OyZ%Cp&Pi\,0#sm 6͌s5N0&{72l6_ەzZTQA`UQ^lW$E 'D`4 ZȌ ?ċE~d: Iˎ:$ =pv[BDkg(CiS.(+."7NkH?)MQ„}"u)yFn.$~keSbĪk77aY׍*y1iw~Q ܙ]=d<G4 5sK,#:8 ;8Tl *`- &Wh|2(]Y%Pךxş$bM5yx<|(|9+~`U$ endstream endobj 3380 0 obj 664 endobj 3381 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3379 0 R >> endobj 3382 0 obj << /Length 3383 0 R /Filter /FlateDecode >> stream xUKo0W+qۮ!6R` ZH 'N )۶xx1xM4;A}pMmtO]Wڴm5_Ej N"TWX *c\Щ$1Iykls9$' $r5 NYfa-P@]-o*e ؚmv<p( QNni+ g8`4 ZZ\D6-}6%Ծo,޳U{! endstream endobj 3383 0 obj 665 endobj 3384 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3382 0 R >> endobj 3385 0 obj << /Length 3386 0 R /Filter /FlateDecode >> stream xUKo0W̑J[ׯvoڇz(UBB(߱@og/ pm@q$lǟ euR> endobj 3388 0 obj << /Length 3389 0 R /Filter /FlateDecode >> stream xUn0++݌!ͮm.JUe@4>>>=+y @qb~\#\GѶ@F]mջ_mYClK< GDptmw3"B?7 k[]QWʍ1ZiDAB %ьRʄNG)Ve(4!-@/'W YWʂ7C <+ * $F\_(Om>fF'Jjp&PlD0Z)9PHM9j=A;K--)<`gwiJ +#}%A8}Tc$qކZ01 #a>z&/Ȱ̧I1IzI5[;GV-ߐ@KcsÿTD.S?ߵy*2yF;l[)lrYH(a½,;s;H~rSĉqlmiW:~Ilt?k"!rkiVXEt6æ?Vs8[Er|B2)e[$yk6en!]JإK Sϗ̱?Id޿o פwoV=֕/V endstream endobj 3389 0 obj 671 endobj 3390 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3388 0 R >> endobj 3391 0 obj << /Length 3392 0 R /Filter /FlateDecode >> stream xUn0wHS/0nFf$hHy4ϵhiCcc@񹲅("BK}(_Qcz+vdRʄNG)u6<+!@/'sC:q*,x;4r^_a%P̾U!Q$1Eyk̬U^ Y)3Rl.*1'2~gƹ`J5^1x"<& ( ZϽeL.Tрhj𰥃I$:ϖ_̦)1 -&Z,ɪ='dtIJOfx,"ZN@lJjj{Q0묳53/usP]6yb`6]A%=sş$bP2o\eCp{WɻU?,a endstream endobj 3392 0 obj 668 endobj 3393 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3391 0 R >> endobj 3394 0 obj << /Length 3395 0 R /Filter /FlateDecode >> stream xUn0+ ˗Dҷ}CMBm#AKcvnM,$Gp8Z=D (^Q|=x C pIxpECk%u36}(n] Sԧ ՈP(iG BK+8M:亩bYEdT wghF)eB˶7yYԐf6}@/-ٹW΂W&T8+ Rc4(2(mU}Kt䨤 gFbMB׉fq@r.n rM ۲zn\;TQ$ITQpE:#01 מ ~^~6j)էl3۬ -V@ IhiBuq"ҵ `[NUYhޠy&g H=ۑil񶌜Q„#MUsv=q.$M`5 `Nm~Vz^f?;Dړ0mwe ! y2/vӼҸ2iv%ڪm0\AQV,陪=?I{Xߕץr!l}𖋕:b{gUd endstream endobj 3395 0 obj 649 endobj 3396 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3394 0 R >> endobj 3397 0 obj << /Length 3398 0 R /Filter /FlateDecode >> stream xUn0+ KR IZtzK" 80TZ%iC"+&mRC!a@񹴍P6n041?FѶAm%3}ڶ:ơӹG><9x\ō:(^ZʕRRHĵ]Z -n,6{QShWdR tbWM&0:庨Á^.L_d}T)x5LBQ;}]+|1NhT(;eDQtfqWzM-D< '6nmO0 $yx\v\b:!>~)Ԍ I=;s"\ڬ)%( *%$|6)&Da4 JH.fclyL踬WocO<0d2Ѧ! "d8g9ӂu[yPX"g"tS-$'eF]Sw[5 t7+~JBcT7Y|hq?  368'V_ܾvݨ O;kt0D4ӹNctk}JW{Yf2&5m6vQy,\2Ū)s]]eVBn5x ɠJtљkVyhSSC Vw%s aA<[YUpW endstream endobj 3398 0 obj 707 endobj 3399 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3397 0 R >> endobj 3400 0 obj << /Length 3401 0 R /Filter /FlateDecode >> stream xUKo0WGvioz(U%"Ayym[ؙxfe|tPffjAC|.k/h0QbgWi;&NZc{prp㽳 =tQ=ʕR Lrqr_I(!NyRa>뒀QJ(ĺJWeѡe3%d|-,>ҪW+P;~@29ƥ I#^s$*tFyMυmrp9L Xʭ0$|i~dɹ;xU &{v2zm kh]R>,ԾDqwYd9}q)C6jӲp. W)ڱ~&M .y[]sg\uQ.͋qFQL,&7aMV[H,)u>Q„y:]`zK\Eok5M!&v^˻-˺i6ɋN;r{S+'NaD}Y=KtKjr*r#nQCwX%c%eAMWb EOkeKo[`lMc}xx$|(뇨4.ϓq endstream endobj 3401 0 obj 664 endobj 3402 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3400 0 R >> endobj 3403 0 obj << /Length 3404 0 R /Filter /FlateDecode >> stream xUKo0WWb]C[H=ʂH@E;΃< -lO<ky@q$GsE q3fl>mDģ{|B>:\xݎOz_(Z 4h"\ 'E'k%,"ch>A %ьRʄNG!Ve(4!-jߟ/'W-YWJCxW8 *1NUh4Hrs<͞a.I Ҍ\ ]!m9j 9j pDB[vvfme͵4bCQcC5B{M}筫9?1Jp`O?$Z.m 3 HPMoٺ٤8A4gZP8[s9WJwʐS|. 4̯bx6+7bqᯭ`6y>(a½,;q^S4H~F\Sq'sH8 *qZxĴG]wؤVLFZ{~rgiVD`6^㦿RS)d5؀X$K#VQEwPS)3t2+a.-'3<dPvOe͗J]k6E?`._ʹЃ{\ Q endstream endobj 3404 0 obj 663 endobj 3405 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3403 0 R >> endobj 3406 0 obj << /Length 3407 0 R /Filter /FlateDecode >> stream xUn0+ M"[.@oIjӶ[rwHm8&mF7OSue8,vSc8hba\݀7Kflcvc㢝 (лDI Sa_!0 jVpB1F+ g:*l IeR%p( 2HI42IU-4J}i&g_E"T+ y1NU4Hru<֥-yGe$' [9&p\I末i@x.P|d[[rpagwyu!\\;mLPDQP^|_ejNhDD\X3}>Kʙ_7a"$2m[w6z@АHKcjǹo.>olÝ et/O> endobj 3409 0 obj << /Length 3410 0 R /Filter /FlateDecode >> stream xUn +2 /nFfRMUyXJԏF`;K0$yqγd+ӫ˔Sn+f՞2:B*4$Fqn˩E+BmY:=ݮCaM'u'(-,wqo* \ZOe9  Hΰ\΅$iع5v` ĩqh-G3Fҫ/W^Cq?Y҃6/>EO[ lS\l/ &`}IFwN.)Be]԰kdp4P3g_PI"mpn%sU.ܕ'V=i- endstream endobj 3410 0 obj 669 endobj 3411 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3409 0 R >> endobj 3412 0 obj << /Length 3413 0 R /Filter /FlateDecode >> stream xUn0+ M"[.@oIjӶ[rwHm8&m#̛Sue8,vSkc8hlba\݀7Kvl9D,;@!&\x\OO:_(īZ 4h" gUfkH%,*CVhxAJ NBlQyVBK[5?_O׵Szq*%x=ƞ_(PcqBAĄ+$.mXns$' $k9&OIEXG(s!<w[BMd[[rp`gwy!\\;yL(QDϡZdL՜шng\|,6_/DH$e(6b]lV H!(ԏs|G yՖ#ӽl*iX04Ϣxtk=fS%L;41rQ{sB4Dj&fnj]54gf-> 7=&p$C[9J6S jsO+# 9$"TUeAu]԰˗K=uܾii}O1Ѷ?v<>>gr. j# endstream endobj 3413 0 obj 661 endobj 3414 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3412 0 R >> endobj 3415 0 obj << /Length 3416 0 R /Filter /FlateDecode >> stream xUn0+Wb݌!͎6R2` $\IRi `1xM\ ;1!%>+m O-GiV!t6%FU7=QWʍ1ZiDA<,N%KXFE,.00~OAJ Rɢ$0綨?Þ^O׬WNYW҂ UlN<* I tNQcnTBI *5b#q~.4s:A=]vvfM ͵@EINU[5Iy7Ps|Fb6&恟AQ\fmDiω HкuoIђBJXR(Os.7Am;=f'Ʒyh6Ȋߤv6bq-6y_D(a=J,;6HDS1Y1HE$Mؤk, LntQjT06pgiVtD.ͲKtڜMQX]{:2-c(X+X#ҥh'M|IojuO1z;rpP2׏S )ky`Udx$ endstream endobj 3416 0 obj 651 endobj 3417 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3415 0 R >> endobj 3418 0 obj << /Length 3419 0 R /Filter /FlateDecode >> stream xVn0+5M[.@oIjӶr$wHIx5Fj7||H)`@=qM9ੋ190$QHʵ*Vp]Z'9_efW,:21pɯ!D1J)1p:Jl [An+SɁ^׍͡ c+1:s_c|4ƠFHEyl*S>V^GJtTR3Zt.QXȁK6ьx 7TB; KXeUrk?+eQLIEN߫-UVP}DF#cuU _o]E9vɶsgח1IKjrc;vj)u8d1D6j Vty:#bgGTҡ H2㥨\B[mo֭sjtY .+]ˎኡ^S)\J3By cUkEȭe7t/)ˢ(UFRۼؾ2m65[d8wGS6  .JrpVP3qDc;YArx+ba;TUuUj endstream endobj 3419 0 obj 706 endobj 3420 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3418 0 R >> endobj 3421 0 obj << /Length 3422 0 R /Filter /FlateDecode >> stream xTMo +涉PnVZK{h{pGbp8Q@1o@l[A$ 6: 3nL+vnNq4)7jѭ9d =!ߊ.۱s#{?%=H`~>8fI@(f D x,ZɃUme+=MwS?IYY";Mȍ> endobj 3424 0 obj << /Length 3425 0 R /Filter /FlateDecode >> stream xTn0+.IQ$}k6h!-J(%p,Gvzj" 0pw<?H` hQ nYOH؏-~y<=;tpv.6 EZ"(™8Z쭩3?oPN+tׄll#I=Op`HԹ8ntFDiUtM8*a;m] dh'(G@k1yI`%iX*5 0<`$"_ly<&B)FDKuT]mN"ߎN !RnL^»#& /W7&Ζbshu#Rr'_]o-0H(-%z@[SViL7uY㤵Rd/"_$4bmȠO"B-s~a_:Uz E'PΪ/4r endstream endobj 3425 0 obj 529 endobj 3426 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3424 0 R >> endobj 3427 0 obj << /Length 3428 0 R /Filter /FlateDecode >> stream xUMs0+`u%6XMwB|N8PtRZΈ9"%H] n:;UGH_Q!e,U_법 ?AZ-8&DXInL1kkMryJ2SHB-Ma yPJ r k11%k+窂 F.)&-NH8vDgwy8m<5ɒbL!$fwl08|}w4$Bj[TMz'$Q+g^|1brFnTO \LJAdh?8fl^WUЭDIG̦s>e$b{ɤ{m󅅍bjֳaEVM~Q5eiE]Yh6zvS'ߋ˙E+ujt "^7f/(6N1;hzsBåx޼qUsY endstream endobj 3428 0 obj 587 endobj 3429 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3427 0 R >> endobj 3430 0 obj << /Length 3431 0 R /Filter /FlateDecode >> stream xUMo0 W&և{۰nA(PGne{E(&i"I" )b@ J9,S1Pb1!% [/iؑ7w[ \D:Ct5o#]Fa}E `fQZR&5h4<f[} UXGuh; tٔ ǟ"MLG5 L %+nUҸdUEe wu3[V#&N8QZ Z@aT.Q~)9=$Ү]uPm ,jpMC\c@E2(Z7/x,mS#3*I4zu >COqn=| PEY#x R"u 5ǞWzʹzpUkⰒ/\x~R8$R'o%L0DP7|\Y;q{b|QW֍wd\ a~(qmѤϞ9ư1k=Oh@{/lƒ]ZdJ`F^<>LJUfsl<橶ޔms[, kCS =ӕ:|Di!F:vΜT0J &tzzcU!T endstream endobj 3431 0 obj 627 endobj 3432 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3430 0 R >> endobj 3433 0 obj << /Length 3434 0 R /Filter /FlateDecode >> stream xTn0+)qE۠=0"8/-lQD/ű驉(,3GЏQfȣ}Q b1(@¸[# ;5s a行g.=OԚ뉏,P!/i;^(PHtx9<=A=YSgHFA1e,I_)_Iڙ G6QKTUzP#birŢb> endobj 3436 0 obj << /Length 3437 0 R /Filter /FlateDecode >> stream xTMo0W1؋۪[(H9D9]PIJJ=6c?<3an)$<>_CL2ʅ.>N2i?8q_$-f#?Tݞ G\s4$f"'"ׇ=%RBuL3GҪ'G%OP}k #LVFTS(˄c,Lv gq}p +()fx%8+ /,NڦZzmNJ̧(jMg%LӽtY XjT Ԕ2NvsjM]($nBatü1gM"nB#j]$"TɌA~\f{?1篪- C:J9YBU;GՏ7AV endstream endobj 3437 0 obj 421 endobj 3438 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3436 0 R >> endobj 3439 0 obj << /Length 3440 0 R /Filter /FlateDecode >> stream xUMs Wў@ϙx&8,˚(y:/Rl&m]9]F*!xn1 A!*"`0]zi>ѡ 4:]p;qߔoya""L D!$d? Vx@ZYZr J&1# &xDLsum6ϫT!eoLڿzɺHRWd ҆^T^7U:P9VN岰"/F31pF  <&٠C2fLN >mi Ş9Y",+wtd QՙP)FDXi\K}M-Z l ޘxt8P$RҕEW$/|W%^p5 ?\5&>e65œaΨۿ]ڄAD$O\O^[:h=þ_LywXߞLˆ% cc.1IZeòxA#߳h.wf(+9fzs%6ی~ Wv{rgra{tj|h3o)I<b/WVտ" endstream endobj 3440 0 obj 586 endobj 3441 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3439 0 R >> endobj 3442 0 obj << /Length 3443 0 R /Filter /FlateDecode >> stream xUMo0 W&QeanY %Nb [AQHjqok$R>z|[a[ þIP1dnP[y˽Ǯ~ژx¯d]]1hu`>(8lI!YŘEBsεIn-PU]*dFUen7>:kP_URj^W2V߼?SOJO!Q\ c"Xtf-3BBr.htC"Imz _ !3upf6+!+#EXcIOFĀPc8 ScdlrAFYl"*DZ2fnWN̚nF+7}fSATHE:faؐ鋋= G \-v:c$p2kS(:A7AdnYO^SF"4ם-S2N\/f*Ќ^Df IV)h"9by(r_nhx瘻 fez4èVLmagsh<^:W̪[h endstream endobj 3443 0 obj 604 endobj 3444 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3442 0 R >> endobj 3445 0 obj << /Length 3446 0 R /Filter /FlateDecode >> stream xVKo0 WX5I~ءn9JbSY~(ɖcmڼD2$#!c@}8サ GC #!m4E^PQsv5NOOzy7h]=gu?Qzއ!0 MO-OIBJiCB|nfWe)$TL3{"HQ(MF}YcT]|fK3x?11w5 ơ<]c4HX&߉Ή pSʰhuqE8ǀ<~ע9* lBBk}%J5!] .'h)H?du M'g4"i`-> endobj 3448 0 obj << /Length 3449 0 R /Filter /FlateDecode >> stream xUM0+9kqCFfUQb$YK{ǀ&iO݅$'x3< (!l<!1ppǢ{kv5~ (| ]".gЙĻ`6 (ghٻ,#;߈'%o2zm"ڤMmn)_icj3)(΀E~>&ƇєnSC yZu ap{7"hh8_5 Q%` %WV^S endstream endobj 3449 0 obj 595 endobj 3450 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3448 0 R >> endobj 3451 0 obj << /Length 3452 0 R /Filter /FlateDecode >> stream xVn0+h KR+S Czse S% P;nEq{jb&瑳 ԃŀsi_pC19)\CpEӘKjfdqvmѮKYZwnwh5:$b>w_\`V@-$`.Ե! 6a5DyɨLsy Em{X}L8]t]:U;+U(ϫlUu|zq}ϯZPӋS}lt\]ΫCKLnN8)eymdqF<Ǟ9 9Wxв(L:!UP&(aQBf<@lBOy 1I"930Bx> endobj 3454 0 obj << /Length 3455 0 R /Filter /FlateDecode >> stream xUMs0+4>-~3=$ fwl yoWp@sT \ܢh{Aev5_(|nкFu?QDVǯ IZnHT H_Vpsvٮ,.vvԮj}~'2&Z#n`E}Y 3~͒MqhTtc> endobj 3457 0 obj << /Length 3458 0 R /Filter /FlateDecode >> stream xUKo0 WuOtYk1GNdE(˲c/vZ'YȏP|%1N!}uf0gԬ(2up)WɉH4ry4W)RC Q*{;Dž )QQ Uک&bf4$I<$>[SjN>;Lħ 7|WFf9P0$jqb֢C ˵_R+YBZ54hG vFW$ 损>:Ʊ3<.?djU)0'dW\wMMpslؒx7̟f=LuӬAԣT=c:mFM- v3eCUFEp"d6})$գL ? Y1J;bVl uИ =ʹ9hfNጏ,պjU[cyZɤ3#?@sh{UyҎ $\AxǾ2 a@ endstream endobj 3458 0 obj 710 endobj 3459 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3457 0 R >> endobj 3460 0 obj << /Length 3461 0 R /Filter /FlateDecode >> stream xUKs0+dQrKx&$fƖ xCl7&`,~vz P/|#l<ASE1Ɗv ԏԣ}ڵ DnP= D}QX\EH@BWdfɳ4LJ2Xc"#tf*[{]OTw&uͯvY'ǟ$u]OO`/HLʱ8T"P` ry(V2&r™*,)" ^s.̫u:.SXOqe7 zLII^xyfJיZ0%h̓^ W>Ze>"<7!&"RN}eWm9@)R$NB$PG) AeȫlKfUnf{EfOxa=D:ϊҺjk&P5..{<I42rFp!J@!Ķ ~!@CIGJ}G݌ɭMQrɝ0"NFS7ʨVrT?sA!i"\W2{tdRDyl'$bѶ>=eޔ#Yz-8:z <9 endstream endobj 3461 0 obj 670 endobj 3462 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3460 0 R >> endobj 3463 0 obj << /Length 3464 0 R /Filter /FlateDecode >> stream xT]o0}WVZk8oUJi:CF %&jH #ٞB˹'-J3SQP CTH`>a nqWvl/[=!x]Y\ׄso6oJB}Pp}iPC@8bnb QQ5Ҭ/$J$ޛ:@ٰÞU7fլWn> endobj 3466 0 obj << /Length 3467 0 R /Filter /FlateDecode >> stream xVKs0+ĪIǴ!Ɂbl3i}We(l>ݔ@qAd'\Bwsu-Sg+mvó=ZhU5 bޯw$0 MG-7D3I)4ܸjeiGeY6P]V_.( E'v =uPTU7F)˓89羚?u2 GBQӋM ,j^BKdռs™a`Ԃ1A"h5\ |, P}L]b!YsMF%5(J p'%Ìh@\QL3(ز 0!OJ:-x0!QJlh2"hٰ>m&&T|(ONs'>l%(YXpI b,y-ꮵgYoI^g6ǡ5 4aHJ3Ny=!!4 J fZB9U݆8}`P+LgK*׊_L; SV8 C Ǜ䷛զ`$jD09jIˬ_pseδCqM FH!_.-s+@qYwZX0#C"K,ɵ'bh?l';W fzyM^UwER endstream endobj 3467 0 obj 765 endobj 3468 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3466 0 R >> endobj 3469 0 obj << /Length 3470 0 R /Filter /FlateDecode >> stream xUKs0+$ osL!΁`f] KZe0xA%]d !"I!; `oݱmwΩ; L@{%#tnfYYqEX\>Y]c5êut.|\CN˼ɶsau1#f7(ɏR|B"2ZC]|+ .;jy`*: endstream endobj 3470 0 obj 668 endobj 3471 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3469 0 R >> endobj 3472 0 obj << /Length 3473 0 R /Filter /FlateDecode >> stream xVMs0+hOUtfi;3L1f!i}W !ؾ5H>ە'\?dau y>pp CSmj~8CʹG <;px\7ōB|;?y(ם<$(| w XY/UZPRQ_!\H8+Uy]^P5yO*W G'kc+H,}yU1D 2Ue$5n.' Ja \0&@!Mve^AM<̨+x3c)KJ|S0J+ GʨOB&ꬉt3,RͲY'jSK tQ&m!0X-&1`օ*@E}ea]p8F{,.nM-h%ӲRD h'(IN `,}*Vx:\p„~hjYz|rb]S= f7c@/wNcl͖?(ωe;6½܇<]E&ie6WX&Y\U.ʡ;h gl!MQ;~y;ŔNvG\zdK6Ί_?'U 5Qp+[L endstream endobj 3473 0 obj 705 endobj 3474 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3472 0 R >> endobj 3475 0 obj << /Length 3476 0 R /Filter /FlateDecode >> stream xUKs0W1U۲mIo d:-w~Ҟ؀Oէoc@F*;4AC!pڊ qSV>mmg (|]!Ov.}W(lOK库+R={x$tb@f3,w.8YHGS9(k@*;j^񫶬G*xV8 $&e_^\*T(htiͬeL2Gs™)()"" \ kpW&q!6'0V4$۸(!5C Gxh6RCRSC'eZDI$O{YMjmGsa" >ebskcd6"a+%1k*jATLV7@W ("L_~i.!^"89y6-aSA sRuH$:%qmwSnzYnp| ]ʼnEo+m߻&txyq]Ӹv6Xlڸ$YQ2p&.ݢBcapZ2(q_1F߰)t&hpԿzͼ endstream endobj 3476 0 obj 631 endobj 3477 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3475 0 R >> endobj 3478 0 obj << /Type /Action /S /GoTo /D [3318 0 R /XYZ 72.0 720.0 null] >> endobj 3479 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 259.55 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3478 0 R /H /I >> endobj 3480 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3478 0 R /H /I >> endobj 3481 0 obj << /Type /Action /S /GoTo /D [3321 0 R /XYZ 72.0 720.0 null] >> endobj 3482 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 285.66 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3481 0 R /H /I >> endobj 3483 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3481 0 R /H /I >> endobj 3484 0 obj << /Type /Action /S /GoTo /D [3324 0 R /XYZ 72.0 720.0 null] >> endobj 3485 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 285.66 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3484 0 R /H /I >> endobj 3486 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3484 0 R /H /I >> endobj 3487 0 obj << /Type /Action /S /GoTo /D [3327 0 R /XYZ 72.0 720.0 null] >> endobj 3488 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 253.44 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3487 0 R /H /I >> endobj 3489 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3487 0 R /H /I >> endobj 3490 0 obj << /Type /Action /S /GoTo /D [3330 0 R /XYZ 72.0 720.0 null] >> endobj 3491 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 253.44 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3490 0 R /H /I >> endobj 3492 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3490 0 R /H /I >> endobj 3493 0 obj << /Type /Action /S /GoTo /D [3333 0 R /XYZ 72.0 720.0 null] >> endobj 3494 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 252.32 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3493 0 R /H /I >> endobj 3495 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 649.5 539.998 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3493 0 R /H /I >> endobj 3496 0 obj << /Type /Action /S /GoTo /D [3336 0 R /XYZ 72.0 720.0 null] >> endobj 3497 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 230.11 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3496 0 R /H /I >> endobj 3498 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3496 0 R /H /I >> endobj 3499 0 obj << /Type /Action /S /GoTo /D [3339 0 R /XYZ 72.0 720.0 null] >> endobj 3500 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 254.54 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3499 0 R /H /I >> endobj 3501 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 625.5 539.998 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3499 0 R /H /I >> endobj 3502 0 obj << /Type /Action /S /GoTo /D [3342 0 R /XYZ 72.0 720.0 null] >> endobj 3503 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 230.11 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3502 0 R /H /I >> endobj 3504 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3502 0 R /H /I >> endobj 3505 0 obj << /Type /Action /S /GoTo /D [3345 0 R /XYZ 72.0 720.0 null] >> endobj 3506 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 254.54 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3505 0 R /H /I >> endobj 3507 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 601.5 539.998 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3505 0 R /H /I >> endobj 3508 0 obj << /Type /Action /S /GoTo /D [3348 0 R /XYZ 72.0 720.0 null] >> endobj 3509 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 230.11 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3508 0 R /H /I >> endobj 3510 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3508 0 R /H /I >> endobj 3511 0 obj << /Type /Action /S /GoTo /D [3351 0 R /XYZ 72.0 720.0 null] >> endobj 3512 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 254.54 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3511 0 R /H /I >> endobj 3513 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 577.5 539.998 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3511 0 R /H /I >> endobj 3514 0 obj << /Type /Action /S /GoTo /D [3354 0 R /XYZ 72.0 720.0 null] >> endobj 3515 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 225.11 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3514 0 R /H /I >> endobj 3516 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3514 0 R /H /I >> endobj 3517 0 obj << /Type /Action /S /GoTo /D [3357 0 R /XYZ 72.0 720.0 null] >> endobj 3518 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 249.54 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3517 0 R /H /I >> endobj 3519 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3517 0 R /H /I >> endobj 3520 0 obj << /Type /Action /S /GoTo /D [3360 0 R /XYZ 72.0 720.0 null] >> endobj 3521 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 227.33 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3520 0 R /H /I >> endobj 3522 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3520 0 R /H /I >> endobj 3523 0 obj << /Type /Action /S /GoTo /D [3363 0 R /XYZ 72.0 720.0 null] >> endobj 3524 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 251.76 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3523 0 R /H /I >> endobj 3525 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3523 0 R /H /I >> endobj 3526 0 obj << /Type /Action /S /GoTo /D [3366 0 R /XYZ 72.0 720.0 null] >> endobj 3527 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 252.32 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3526 0 R /H /I >> endobj 3528 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 517.5 539.998 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3526 0 R /H /I >> endobj 3529 0 obj << /Type /Action /S /GoTo /D [3369 0 R /XYZ 72.0 720.0 null] >> endobj 3530 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 229.55 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3529 0 R /H /I >> endobj 3531 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3529 0 R /H /I >> endobj 3532 0 obj << /Type /Action /S /GoTo /D [3372 0 R /XYZ 72.0 720.0 null] >> endobj 3533 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 253.98 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3532 0 R /H /I >> endobj 3534 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3532 0 R /H /I >> endobj 3535 0 obj << /Type /Action /S /GoTo /D [3375 0 R /XYZ 72.0 720.0 null] >> endobj 3536 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 254.54 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3535 0 R /H /I >> endobj 3537 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3535 0 R /H /I >> endobj 3538 0 obj << /Type /Action /S /GoTo /D [3378 0 R /XYZ 72.0 720.0 null] >> endobj 3539 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 469.5 299.979 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3538 0 R /H /I >> endobj 3540 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 469.5 539.998 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3538 0 R /H /I >> endobj 3541 0 obj << /Type /Action /S /GoTo /D [3381 0 R /XYZ 72.0 720.0 null] >> endobj 3542 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 246.2 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3541 0 R /H /I >> endobj 3543 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3541 0 R /H /I >> endobj 3544 0 obj << /Type /Action /S /GoTo /D [3384 0 R /XYZ 72.0 720.0 null] >> endobj 3545 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 239.55 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3544 0 R /H /I >> endobj 3546 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3544 0 R /H /I >> endobj 3547 0 obj << /Type /Action /S /GoTo /D [3387 0 R /XYZ 72.0 720.0 null] >> endobj 3548 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 246.77 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3547 0 R /H /I >> endobj 3549 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3547 0 R /H /I >> endobj 3550 0 obj << /Type /Action /S /GoTo /D [3390 0 R /XYZ 72.0 720.0 null] >> endobj 3551 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 257.32 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3550 0 R /H /I >> endobj 3552 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3550 0 R /H /I >> endobj 3553 0 obj << /Type /Action /S /GoTo /D [3393 0 R /XYZ 72.0 720.0 null] >> endobj 3554 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 248.99 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3553 0 R /H /I >> endobj 3555 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3553 0 R /H /I >> endobj 3556 0 obj << /Type /Action /S /GoTo /D [3396 0 R /XYZ 72.0 720.0 null] >> endobj 3557 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 251.77 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3556 0 R /H /I >> endobj 3558 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3556 0 R /H /I >> endobj 3559 0 obj << /Type /Action /S /GoTo /D [3399 0 R /XYZ 72.0 720.0 null] >> endobj 3560 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 261.77 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3559 0 R /H /I >> endobj 3561 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 385.5 539.998 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3559 0 R /H /I >> endobj 3562 0 obj << /Type /Action /S /GoTo /D [3402 0 R /XYZ 72.0 720.0 null] >> endobj 3563 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 237.87 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3562 0 R /H /I >> endobj 3564 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3562 0 R /H /I >> endobj 3565 0 obj << /Type /Action /S /GoTo /D [3405 0 R /XYZ 72.0 720.0 null] >> endobj 3566 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 231.22 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3565 0 R /H /I >> endobj 3567 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3565 0 R /H /I >> endobj 3568 0 obj << /Type /Action /S /GoTo /D [3408 0 R /XYZ 72.0 720.0 null] >> endobj 3569 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 238.44 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3568 0 R /H /I >> endobj 3570 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3568 0 R /H /I >> endobj 3571 0 obj << /Type /Action /S /GoTo /D [3411 0 R /XYZ 72.0 720.0 null] >> endobj 3572 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 248.99 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3571 0 R /H /I >> endobj 3573 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3571 0 R /H /I >> endobj 3574 0 obj << /Type /Action /S /GoTo /D [3414 0 R /XYZ 72.0 720.0 null] >> endobj 3575 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 240.66 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3574 0 R /H /I >> endobj 3576 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3574 0 R /H /I >> endobj 3577 0 obj << /Type /Action /S /GoTo /D [3417 0 R /XYZ 72.0 720.0 null] >> endobj 3578 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 243.44 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3577 0 R /H /I >> endobj 3579 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3577 0 R /H /I >> endobj 3580 0 obj << /Type /Action /S /GoTo /D [3420 0 R /XYZ 72.0 720.0 null] >> endobj 3581 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 253.44 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3580 0 R /H /I >> endobj 3582 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3580 0 R /H /I >> endobj 3583 0 obj << /Type /Action /S /GoTo /D [3423 0 R /XYZ 72.0 720.0 null] >> endobj 3584 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 289.5 187.389 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3583 0 R /H /I >> endobj 3585 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 289.5 539.998 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3583 0 R /H /I >> endobj 3586 0 obj << /Type /Action /S /GoTo /D [3426 0 R /XYZ 72.0 720.0 null] >> endobj 3587 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 212.33 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3586 0 R /H /I >> endobj 3588 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3586 0 R /H /I >> endobj 3589 0 obj << /Type /Action /S /GoTo /D [3429 0 R /XYZ 72.0 720.0 null] >> endobj 3590 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 204.55 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3589 0 R /H /I >> endobj 3591 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3589 0 R /H /I >> endobj 3592 0 obj << /Type /Action /S /GoTo /D [3432 0 R /XYZ 72.0 720.0 null] >> endobj 3593 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 201.77 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3592 0 R /H /I >> endobj 3594 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3592 0 R /H /I >> endobj 3595 0 obj << /Type /Action /S /GoTo /D [3435 0 R /XYZ 72.0 720.0 null] >> endobj 3596 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 209.55 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3595 0 R /H /I >> endobj 3597 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3595 0 R /H /I >> endobj 3598 0 obj << /Type /Action /S /GoTo /D [3438 0 R /XYZ 72.0 720.0 null] >> endobj 3599 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 229.5 300.519 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3598 0 R /H /I >> endobj 3600 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 229.5 539.998 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3598 0 R /H /I >> endobj 3601 0 obj << /Type /Action /S /GoTo /D [3441 0 R /XYZ 72.0 720.0 null] >> endobj 3602 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 207.9 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3601 0 R /H /I >> endobj 3603 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3601 0 R /H /I >> endobj 3604 0 obj << /Type /Action /S /GoTo /D [3444 0 R /XYZ 72.0 720.0 null] >> endobj 3605 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 207.34 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3604 0 R /H /I >> endobj 3606 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3604 0 R /H /I >> endobj 3607 0 obj << /Type /Action /S /GoTo /D [3447 0 R /XYZ 72.0 720.0 null] >> endobj 3608 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 216.77 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3607 0 R /H /I >> endobj 3609 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3607 0 R /H /I >> endobj 3610 0 obj << /Type /Action /S /GoTo /D [3450 0 R /XYZ 72.0 720.0 null] >> endobj 3611 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 231.77 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3610 0 R /H /I >> endobj 3612 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3610 0 R /H /I >> endobj 3613 0 obj << /Type /Action /S /GoTo /D [3453 0 R /XYZ 72.0 720.0 null] >> endobj 3614 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 215.11 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3613 0 R /H /I >> endobj 3615 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3613 0 R /H /I >> endobj 3616 0 obj << /Type /Action /S /GoTo /D [3456 0 R /XYZ 72.0 720.0 null] >> endobj 3617 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 226.76 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3616 0 R /H /I >> endobj 3618 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3616 0 R /H /I >> endobj 3619 0 obj << /Type /Action /S /GoTo /D [3459 0 R /XYZ 72.0 720.0 null] >> endobj 3620 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 237.89 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3619 0 R /H /I >> endobj 3621 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3619 0 R /H /I >> endobj 3622 0 obj << /Type /Action /S /GoTo /D [3462 0 R /XYZ 72.0 720.0 null] >> endobj 3623 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 212.89 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3622 0 R /H /I >> endobj 3624 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3622 0 R /H /I >> endobj 3625 0 obj << /Type /Action /S /GoTo /D [3465 0 R /XYZ 72.0 720.0 null] >> endobj 3626 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 205.11 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3625 0 R /H /I >> endobj 3627 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3625 0 R /H /I >> endobj 3628 0 obj << /Type /Action /S /GoTo /D [3468 0 R /XYZ 72.0 720.0 null] >> endobj 3629 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 206.78 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3628 0 R /H /I >> endobj 3630 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3628 0 R /H /I >> endobj 3631 0 obj << /Type /Action /S /GoTo /D [3471 0 R /XYZ 72.0 720.0 null] >> endobj 3632 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 203.45 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3631 0 R /H /I >> endobj 3633 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3631 0 R /H /I >> endobj 3634 0 obj << /Type /Action /S /GoTo /D [3474 0 R /XYZ 72.0 720.0 null] >> endobj 3635 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 206.78 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3634 0 R /H /I >> endobj 3636 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3634 0 R /H /I >> endobj 3637 0 obj << /Type /Action /S /GoTo /D [3477 0 R /XYZ 72.0 720.0 null] >> endobj 3638 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 212.89 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3637 0 R /H /I >> endobj 3639 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3637 0 R /H /I >> endobj 3640 0 obj << /Length 3641 0 R /Filter /FlateDecode >> stream xMו9TEWͺAv A"!$Zl}}N8ԍgTe-='З7_oۿi?|lhRo?>Ut|_>'z|x7﷏px}7_ylG}n?/߾Oݷ_v|eÿOwy{ϧ߿˻~c/T*>gT?X|?O?~??|y :zzoNqH$}8%,KRD0D0D0D0E0E0E`z9GBJ^?>J^+CG uRݥ~|PddYɲe%F,Yvdɲ A,'YNbyxPQB-G X%_X%/ddddddddYɲe%F,Y6dɲ A,'YNd9(yã.G X%/byxPeeeee䩮5Ώ(#׌kK}^~nkԷRՍ Z,uzH}!XUP\됥˵ $$$J,+YVldȲe'N,Yd9r$)kb(CZ,XuP\+& $$$$J,+Y6ldȲe'N,Yd9r˵Yj\˵Yj\ .b2KMAAAAIIӃS]k/NN}w׏Ӄ uPݨPJqzpazp:22222ɲe%J,Y6ldɲe'A,Yd9razpzB-uBMAAAIIII,+YVldȲe'N,;Yd9r$)Z,Ӄ Xj~8(x6AzJ}vRJܾ:Rb6.H-kb6.@dddddddYɲe%F,Yvdɲ A,'YNbyTڸ X Rڸu˵qAj LLLdYɲe#F,Yvdr A,'YNb6.H-kԻX Re\˵q $$QGZ_n=X'o?<[nߋU[pz}/.uAuzJ}^\Jz$)TeIJlbYv,X],KRIJ LLLdYۯQ/ԷťSRWԷťNr$IS,c26],c}!bE,eeeeeee%J,+Y6ldȲe'N,Yd9r27M,s2w],eBAAAIIIS_ֵfrV9w?~A9<@ŀ:PAuzJnǀZ,"kz 5YYYYY&Y&Y&YVdYu'bԼP꠺Q=JzT'd9r$)kz XԻXbRHMAAAIII,+YVdȲe#N,;Yd9r$IS,s27],s2w"Y2 YYYY&Y&Y&Y>8յ`^9rgK<.8yqǕSJ7'叫=A4iTk>zXq%'ú+9V~\ ~\M5L5L5L5L5M5M5Mj5e u WY>)\ r%\rS:Mu$ê+9օ\wR= amȕTCZMj5jT6SM0aTNS:IlJN#TKGzXr%7000444e$drI Iol.!R+yZ%?&I㊒+9֔\ V\M5L5L5L5L5M5M5Mj5&&WY>)\er%\rS:Mu$z+9V\wR=9aɕTNZMj5jT6SM0aTNS:I JN%)TRzXr!/zXr%7000444*缶\rKwW48Pw+T.ay|R~Xr!ʧNSz\r!' 9W\IBqʅTTTTTTTTVS=Py=?PIaʅZ>(?P:Mu4I*rR=Py=IBBN*rR=Pjjjjjjj5jT6SmLj7nTS:Mu$ 9Wz\r!' B*rS S S SMSMSMS=P9O&AyHږV\B yZ%?PIaʅT+T^ W\M5L5L5L5L5M5M5Mj5 yX,V\ȫ yZnTNSz\r!' T+T.z\r!' VSZMj3fTvS:Lu0aTNR=PqN*rR=Py=/z\r!7000444 S^ˣP\^8+{};fuRފAy-O;c<,7aTNR]!SNBdwR]W"SNRd k)70004444jTCS7f|˫:Mu$Hu]L9+%Iu]L9k)'uqaaaaiiiTVSmLj3nTS:Lu4iTs#H57R͝Ts'I5 f!,TTTTTTk!^PwwR] Iu /$/jjjjjjjj5j7+^nyZ)ay|R>rS:Mu^PNkxA9夺R] M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MujnFj;f!,Tjjjjja3)Uv\O?˧wY7'X^-7iT'R,E9R,%y!յYrS S S S SMSMSMSZMۯ<+;f?A;rS:Mu$յYrR]$IumTf)IumTTTTTTTVSZMj3fTvS:Lu0iT'R,%Nk夺6KI^HumTTTTTTTsS^[}27/zy67Msάy6Š|P>w.bP7';)夺bHZMj[1{Y>)j|얧:Mu4IkA9);)夺bPnaaaiiiTVSLj3nTS:Lu4iTrR]S wR]S IuM1$/jjjjjjںsjkaׇ{i1Wx6aD|R~B^-S~BNe'ղj)Z baaaiiiiTVSmLj7nTS:Lu4IڊC98鷺PNk+夺HZMj5fT6SM0aTNS:I57R͍Ts#I5wR͝TjRBYL5L5L5L5M5Ms^[2_;r*O?1}WV~Y>)_(%>JN4iT'TFe#ղjIZ Bj)ZM9GR>)_=y|P~zS~zTNS:I56RTc#I5vRTc'(Tjjjjjjjj5jT6SmMj7nTS:MujnFj;NYH5 f1000044O^^$@-O@_T>=ѳqs<,oO8j|-'5GPNk!yjjjjjj5j:n6|RފAy-O;c<,7aTNR]Iu#$Iu#('5GPnaaaiiiiTVSmLj7nTS:Lu4IkA9q夺GH^Hu#(7000044dz>ym\"^ |.tÕ9%s<-U>I^,'uxTObM5L5L5L5L5M5M5Mj5.䏗\f+y|Px<-7iTNRTc#H5vRTc'(TjS S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5M5M_׾|8ށpnǷv}᷿w>:ۇ}O_nYOzbO>gO7'Y,nyZ)oLj3nTS:Lu4iTc#H56RTc'I5 F!(TTTTTTTVSZMj3fTvS:Lu0iT'CIu=Jz:TӡT!zx:)}UZ>$_'HR:ArR]'HRNIIu )yjjjjjjj5ju|Kٯm<-Y>)jNS:IK夺NT :ARBIM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu:ArR]'HJ:ArR]'HRNIM5L5L5L5M5Mupj/OF}ّӻ{X,by|P>w.}#z߈ 97"HNRoDTTTTTTTTVS漞Y>)j|얧:Mu4I_6"@N_6"\wRrRrRrS S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5M5Mp>)=_Nɫu'iy|:(˛夺fuH^Hu:(70000444jTYc^QJ*<,oOYWRrS:Mu$YRwRU*9*TgJnaaaiiiTVSLj3nTS:Lu4iTgJNJ!I~Vz?BJ%7000444 $dQ.U~œ1_A-O˻kAyX,鷺cPNk!yjjjjjjj5jz/䏫zay|RJ^-?꽒:Mu4IjlNjTjRbaaaiiiTVSLj3nTS:Lu4iTrR]c wR]c Iu1$/jjjjjjj'U".?ez݇C33jp.ĕ<-? q%˛Bs!ZMs!iy\+yX,? q%4iTB\Ip.ĕTB\Ip.ą\+VSZMj3fTvS:Lu0iTNR= q%'ùTB\Ip.ĕTB\M5L5L5L5M5Ms^x2 ? O?>toSu&[wfyX,byTrR]wR]Iu_$//jjjjjjjj5jT6SmMj7nTS:MuPNkB9 夺/R]M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuPNk"NkB9 夺/jjjjjZqjO.O]7?}V-S>6f|4IkC9;夺F:R]#M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iut('5ҡTHrR]# ZMj5fT6SM0aTNS:Iut('5ґ|'5ҡTHrR]#M5L5L5L5M5MutNUۓNP#gW޾Pf>Msby|P~BIyZ)}<,ojHlZ6R-;TNZNj)ZMj5jT6SM0aTNS:I56RTc#I5vRTc'(Tjjjjjjjj5jT6SmMj7nTS:MuꭴTs#H5wR͝Ts',TjjjjjjHS^d2~H+9y,Q,\. yX,'=4rR=Cz^HxͅTTTTTTTTVS=Cz~B7'{h.A yZnTNSzBN{h^wR=Cs!'=4rR=Cs!7000444jTVSmLj7nTS:Lu4I{h.z|'=4rR=Cz^HxͅTTTTTTTCS^Gy2}nړw9n_2)a)˛[Ay|HPNk;;ڻ#y!յwrS S S SMSMSMSMSZMj3fTvSMu0aTNR]{w('յwrR]{w('յwGBkZMj5fT6SM0aTNS:IuݡTwR]{w('յwrR]{w(700044յwT9>GyzNڕ/%7::/%Y>%?q%_J.z8B^HpǕT~\TTTTTTVSZMj3fTvS:Lu0iT'܏ Ns?z8B^HpǕTTTTTTTTVSLj3nTvS:Lu4iTs#ùWrR=q!IpǕT~\IpDžyCiy)ܶ~+ay|R~Dy|P^wNy3fTvSMu0aTNSFUJURNkTI9Q%ZMj5jT6SM0aTNS:Iu*)'5|'5TרRBkTIVSZMj3fTvS:Lu0iT'Q%夺FURNjRBYLfKiRl)m6[2slHWG{񂵄*~Dxӻu`~(_["yZnTNSTa֒鷺Ta֔:̚rS S S SMSMSMSZMj5fTvSMu0aTNSTa֒鷺Ta֒R]YSnaaaiii|d)oLj7nTS:Lu4IkTG9Q;Q夺FuR]:M5L5L5L5M5M5M5Mj5zSm{mS7f|˫:Mu$5TרrR]:Iu$/Fujjjjjjjj5jT6SmLj7nTS:Mu$5TרNTרrR]:Iu(700044è1.ǥ W]ay|R~Xp!nyZ)Mj7aTNS:Ium:TצSIum:TצS Mjjjjjjjj5j 燥 Y>)?,]W凥 TNS:I56RTc#I5vRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MutJ9M鷺6RNkөTצSM5L5L5L5M5M5MƓe7nĶº&m}~o?G%㹗N7cξ'--/Hf| %m=^אPSIJ^-7iT'7INM}zy!&M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu}zNM}z$>u/^ۺ}?EkO^sZ[Nu:nTO[RM,;Yvd9r I,XFRl.kb6A]rm3,,,,,,,,+YVdȲe#N,;Yvd9r$IS,`Lj\c1r Ť5IMAAAAIII,+YVldȲe#N,;Yd9r$IS,Kj\C/w\#/r 5,,,i4I6:˓9\m\?~9W9[䓗?tQwץItBjvSMu0aTNS_IQNk&y!5TTTTTTTTVSLj3nTvS:Lu4iTc#H56RTc'I5vRBQH5VSZMj3fTvS:Lu0iTNR]3IuM$Iu('5ETrS S SRl)mv:? 6EOW?g+f+y|PxH<-7aTS:Mu+9z8$JNC/TD_M5L5L5L5M5M5M5Mj5C/䏇D_N!WY>)<$J^-7iT'FCz8$B+9 yjjjjjjj5jT6SmLj7nTS:Mu$!WrR=}!IpHTD_IpHTTTTTTTՙOW߮wO&:΅|P~\Nas!˛iT'':rR=Nt^wR=Nt.z輞R=Nt.ZMaz~\Nas!˛DB^-7iT'':rR=Nt.z\I8y=/z\M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muqs!'D|'DBNlj΅T v:}5·?~<_x̵﷧O^~z=H~gZ>(=Pwo,Mu0aTNR]7sQNf.IuE9$/nTTTTTTTTVS=J~{d<,oOo,WGrS:Mu$u3夺n|'u3夺n梜T\jjjjjjj5jT6SmLj7nTS:Mu$u3夺n|'u3夺n撼꺙rS S S SMSMSMS= Ny}|}48:̺?yhg<,oOonH^-ܐ<-7iTNR-TFe'ղjIR-TK!RL5L5L5L5M5M5Mj5յm6{OYɫpVSJ0iT'Fjl;NjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR͍Ts#H57R͝Ts'I5 f!,:yQ_d|tӺ鱗<-O;8f|]'yTIN I~Wz-B$70004444jTW݊lJ~;S~>Y>)_!yTNS~IrRr|'/AN_T(w=S S S SMSMSMSZMj3fTvSMu0aTNS9IesT\79~prRr.d2~T˻/O6ןO6IB^-S7Mj7aTNS:IumcT66IumcT66 mljjjjjjjj5j'Óͅ<,oOO6jds!OMu4iTc#H56RTc'I5 F!(TTTTTTTVSZMj3fTvS:Lu0iT'ml&Nk夺I^HumcTTTTTTT\T9OO?|?rzpVᬐ y|P~8+BwfyXnTvS:Lu0iTNR];)'յPT@IuT@M5L5L5L5M5M5Mj5Y!Iᬐ y|P~8+Bwg\rS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4Ik 夺vRNk 夺vJ^HuTTTTTTTTm;#?}O'oϥ'>6f~A(/yZnTvS:Lu0iT'unZF9unZ&y!յ΍rS S S S SMSMSMSZMj3fTvSMu0aTNSֹQNk;unZF9unjjjjjjj5jT6SmLj7nTS:Mu$H57R͍Ts'I5wR͝TjRbaa6[J-͖fKkvڶ?=?fnMSi>y(퇑Y>)j햛j3nTvS:Lu4iT׈rR]#:Iu('5QnaaaaiiiT֛jBNqT.ZMj5fT6SM0aTNS:I>BNq;]I>BNqrS S S SMSMSMSZMj5fTvSMu0aTNSz\w!'T.z\z^H>Bnaa6[J-͖fKqmd_'Sί6|Rx?•Z>(JwGj7nTS:Mu~+9G~+9GR=܏p%70000444jTG?ޏp%˛AWTNS:Ip?•T#\wR=܏p%'WrR=܏p%7000444jTVSmLj7nTS:Lu4IzB~+9GR=܏p%70004445;Um/Ϳ/Wۃ\yfo/?}Sc^Ovۯ?s7﷏px}7_{~2?/߾Oݷa}fB?ǃůzȖ endstream endobj 3641 0 obj 14588 endobj 3642 0 obj [ 3479 0 R 3480 0 R 3482 0 R 3483 0 R 3485 0 R 3486 0 R 3488 0 R 3489 0 R 3491 0 R 3492 0 R 3494 0 R 3495 0 R 3497 0 R 3498 0 R 3500 0 R 3501 0 R 3503 0 R 3504 0 R 3506 0 R 3507 0 R 3509 0 R 3510 0 R 3512 0 R 3513 0 R 3515 0 R 3516 0 R 3518 0 R 3519 0 R 3521 0 R 3522 0 R 3524 0 R 3525 0 R 3527 0 R 3528 0 R 3530 0 R 3531 0 R 3533 0 R 3534 0 R 3536 0 R 3537 0 R 3539 0 R 3540 0 R 3542 0 R 3543 0 R 3545 0 R 3546 0 R 3548 0 R 3549 0 R 3551 0 R 3552 0 R 3554 0 R 3555 0 R 3557 0 R 3558 0 R 3560 0 R 3561 0 R 3563 0 R 3564 0 R 3566 0 R 3567 0 R 3569 0 R 3570 0 R 3572 0 R 3573 0 R 3575 0 R 3576 0 R 3578 0 R 3579 0 R 3581 0 R 3582 0 R 3584 0 R 3585 0 R 3587 0 R 3588 0 R 3590 0 R 3591 0 R 3593 0 R 3594 0 R 3596 0 R 3597 0 R 3599 0 R 3600 0 R 3602 0 R 3603 0 R 3605 0 R 3606 0 R 3608 0 R 3609 0 R 3611 0 R 3612 0 R 3614 0 R 3615 0 R 3617 0 R 3618 0 R 3620 0 R 3621 0 R 3623 0 R 3624 0 R 3626 0 R 3627 0 R 3629 0 R 3630 0 R 3632 0 R 3633 0 R 3635 0 R 3636 0 R 3638 0 R 3639 0 R ] endobj 3643 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 3642 0 R /Contents 3640 0 R >> endobj 3644 0 obj << /Length 3645 0 R /Filter /FlateDecode >> stream xVmO0_qA/yb&1*m)n)uB ;IR Z}?{ (~%wDDbA'<@Ea@cjVUa_({׷>ϚW|>μ_`f G-OHJi &'aSʢKyZoaՙC:WKX3Xl*;۲+<rNV ",14Be-IYjvdǏ3A)0^$# ɅH<>5YZIHRWXUZ7+H{Dya %a>"kIU74A!I"t0q~6orU N'm弛!)B:Z*qc0$jp7/]=Kƽgu5 rW.RXa7uU䲁刺f?/~;bM^G8c?&1F,6NNUs'J7 8ͻM׎65#=Ap*;ra>Y@[t]t:VA#~ubpDBz7cG맆>a<[Ucsce:Cs4dGKR7u9rplfuF|,<9ŅMK3dv^zT9z:x4ML'Բ* #{SYYײ0Q&l/T4,gA}o]ś.鞻;-Ҙhq{zMy*2FInס7f|=u endstream endobj 3645 0 obj 844 endobj 3646 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3644 0 R >> endobj 3647 0 obj << /Length 3648 0 R /Filter /FlateDecode >> stream xWMs6W( [:I:͍fzs`$TrX|䞚kw]}X _ ?jl rX&gʌ^~(1㎽~Za.oOu|[`8q%B($uޯ&P%dP=x\ωf6:h\2Wm͕T' UiNZ@ g LUq~0.T#H8cD9*ŔG=: îY=l]}8Ag ۶d,*$)Bpw eJʼPlxͦ7-c0<żVK3R.9m|:rp d$H2WL~(\zozWuz^@Gj?]+,ʙKAq3pgy:Q֩&^}UVLtc5r6Fzs)$/M{a]0}Lp-b&Ы3z͟NT q%-]ݯ8Ζkg2.!KH 7];Ŏ*g EiY0C}]ur=+4CThd>sΟܟ.m{,9EyU#T4Y&1"_o< ѢwW o; Tt( G,Nj՗}Mf`)i dRLP Ȅ5 ʆLF jZ#gc<7/M9j毃F]=jl9>U@By=_DQOxgiqSo;h+8`= Aۦ v,s'$~epb~l#Y(7: fTs)QYo,nT̀㩮Q*T1GݨB5Uh,B`(< Ѣlo3jf@E (VR<=^y_=#52}Jd.;E})&oFAgFu5 endstream endobj 3648 0 obj 1084 endobj 3649 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3647 0 R >> endobj 3650 0 obj << /Length 3651 0 R /Filter /FlateDecode >> stream x͔Mo0sL댽U)D9D9K`(6kJ=6{^|NvaCy$@pg[.\/!> endobj 3653 0 obj << /Length 3654 0 R /Filter /FlateDecode >> stream xUn0+Rn-Z 0d (wH$N{i$go}龴8Ha2x n7^i}B;[T-%tEx 6w|W6yk a1x$pBK|7*GXTޔZXT-̿DIbD0KeJȵjj]A]Jޘ6ʗ@wsSZH r:,IڡCR*N4;WWV*PD$.J!Lr^Y$:Bȱ<?C6T!gUn`Vx@˃Vڀ#yh$I< >{TzoJ]gLYD x9Upc9 ՘sqƒvqn?*b4e> endobj 3656 0 obj << /Length 3657 0 R /Filter /FlateDecode >> stream xTKO@Wlgw/nE*EqA9Nb)YQſ=lk}o}>q]rcWDʄ"c>øc>a >6; ·% $8Of@CņN.W![=I+s\!" l.^\jm~}z ُ+!&NPB^onm/H=So׺l{QcXېqK|T[F1 Hs+4|~uM,:^[j!Lp)7^\Q"І?L ͦ)1Ya'"dZ(|u0P )swM4T,ENmڛ\7\9-ii?+_7ku"uy v̡W/SECIiT>@?[R<Ҽ=/era?agj"#cO{|{gU򆝌 endstream endobj 3657 0 obj 506 endobj 3658 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3656 0 R >> endobj 3659 0 obj << /Length 3660 0 R /Filter /FlateDecode >> stream xUKo0WⵝNz>BRU()46[;NHBRmx1 c{9` $_t! !•~GԭsZD3G^\8ƽ@臊2>}Q.[jyHbRJnsV7r Ga~.Vuls"0&"c xJ O-_}#Fe_fZ]q}.(a'+_S ~@Ԧa]IT- a$> endobj 3662 0 obj << /Length 3663 0 R /Filter /FlateDecode >> stream x͕Ko0 3h> endobj 3665 0 obj << /Length 3666 0 R /Filter /FlateDecode >> stream xTn0+PH֢ C.ze[M9"ߡRb&, Ϝ彙}D|_E[ .0-!Nd"b~a ,}aǶ}BlW"o-KZw4w:4>|U@ՓR K Y`#bi%au-X\V*+8­/oaȋ [đdr fQy(l˵o| ԋI3&M~MȦ%?Z4 9nG >=Vj-kw __C/~B/-1H!)F$fՋa D~RAzCɡ !ki4(4 j{_Ծ0VkSiӞ_/_Ob%$j}'eEj5wJct?D3FPIlk9YU\J"z٧[zk7ɴy> endobj 3668 0 obj << /Length 3669 0 R /Filter /FlateDecode >> stream xTKO0Wxgv!aY"Ҵ:BM$#,,&#0Ch Ý a 3 pE?kF'uy46utE_'@ZDdP2 lW'r[6ڻ)+aUհ[^C 1{0ΗW-C`[}[6bOdڔ%?F%iZm0C02gh ˻]J" l ԲhG2Cr zn3ʿX) ZG .ŽN=MY _7ڞ3 endstream endobj 3669 0 obj 504 endobj 3670 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3668 0 R >> endobj 3671 0 obj << /Length 3672 0 R /Filter /FlateDecode >> stream xTMO@WlgasT@B,%k:E.7v˾ٷo!"@`S .z0+!6C ,gfl؏-\F.B]]3b\cԆh6*?Tm"M!,i)iDd4\;:]ۢ~euQ:벂/?$Q1x8 s|YBvw[y(lˍo|] ԋI~0fM}MƋ+CΆ vİcye0eN^Սo[y^4BRH0)RV 7RJ;&),+ΨKҊ8V&̧ 1M`ƚ?/,Ј&ijdU`˓SBbvq.~ON:&a[GCUi"[?*my_rU}رPu> endobj 3674 0 obj << /Length 3675 0 R /Filter /FlateDecode >> stream x͔Mo0 _8P -$,~تlZJ+@k*U끗 FΒ4q&S\+mԺ4ϫ 7Fom"sA\LKRt#N‰cFm#u:rnQ#eI!5cbn2~+KYUUTUT> B1`˟$q{0w|Pzo*3G0PI*4Y29hIԥ9ДN*kN)WMgM+% 'J{OMNm(#|> endobj 3677 0 obj << /Length 3678 0 R /Filter /FlateDecode >> stream xXmo6_6p$EQRt؆%vQ uQ(2- THJ"%k1,N"=sw/3|n%J/!O Eq|/]@.-QvIw5"Y1#~#H ̄WQ"ʍt\~x#Jzge>OCH}1>wMg EdeQ]Yc#ZD 1!<)<&:CIY4UdW5 imQK^d`ݐÖ gSdЧ.`0ν;էZ62/+υq,AШV Q6cdD+ˤAU(mBr+q< BSQ>YݹF80 ,А|enJ(i"B Q@7qTSQ`N( W*=d ?шb„צ]ҫ^SV2cECeUFa&=_翿('>xWS~ӱuW MeTٳfa9#4bdxnC4_,qQeڦ?==f!EԨ ;b`I h/s(G6WΈp񾒐 SPQn=U\*+m)KuR`2`lW@֪:buXQ W訫k}Wmh=Wkn3;.qaS0_C\j7o؆kCy~U4ɿ)l¾3\~5JW-5-۶nV6Uڴҁonk zoOVw-8x_w_a7kzuuv$8J*qo +4#h^a`|#Nd˶j}Er`3E#ar-|:Ёûb+<+ Vp˥.K0옛x|3%jj7 'H֞ [)pe=o I&s?rý)>;7 endstream endobj 3678 0 obj 1131 endobj 3679 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3677 0 R >> endobj 3680 0 obj << /Length 3681 0 R /Filter /FlateDecode >> stream xUKs W1io}3=$Dɿ"Y6e.~ǀse8吭- Gcފ W(;K?ʣݻD4G<w7z7@車4({jyHRRJ<_U* uu#8^Bi Ӥ7jd2.!+Dӂ˶u>bgw-i7& oƒ;pǶoɈQ.85F0E-CrY# 8̧aGaR'~zhy<5 fݠDb׸^@[L0NSebJ(ĽJ׭jHF$1'h/9kM|eiĬ~82f^] ƑH”D *>Ftvݲ' 31 endstream endobj 3681 0 obj 701 endobj 3682 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3680 0 R >> endobj 3683 0 obj << /Length 3684 0 R /Filter /FlateDecode >> stream xVKO0W$0oiom-;$Ivxy}ǀ}q!+A*FCTVtx=9u3nLgߞ(nP>w7^{W{y]|QX,," y.nN~YU( VgV6JN`sKB( ВatύЍh[P jz/|?zW]~]Ȏ?1y5d)G}F],H 3Rq{}b#4bo}r v-aUQߕ)A._ LF$4xIݺ/ W',ӿ!o7^?իDc2L6aJ#e:.s&@QV[0K{'\,ͳ̻'EL?$M!&UHrYqply8tyV B#F@a,FI僬f+MU+a'Q٨Rbkh(d.b e,gcdMގr M;2Y-7?ntӐnpR qZ2;aKq|6t_ =1珱l<̨w,Գ[QGgQ)&Bƒ]LNqGzdKZg;FI29qi<Uw Wd endstream endobj 3684 0 obj 747 endobj 3685 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3683 0 R >> endobj 3686 0 obj << /Length 3687 0 R /Filter /FlateDecode >> stream xVKo8W KRm{ "`%"VUJ%Q/iOm%9o>PDu4gh/0٪h az" pͨk"^A. %c~r#9ƈt8.в4&Y. pط54lOן៕ %2 oDjV5** -Ɍ^:l )лB\dI@-%A9:0Rq2 !ݝlK3M21hHR^vQ bG'KKH k`ooT=I[![ TZT,7CD wBs1$IRs:#7@CI4eSpmP3V?^V _?8"=9~O}| 3 9N2X)j^lo~G(_iѨGQSB(&0;!в[e8bسPImL\4$/؉efow뫾9Sf|$,Sp_#kM0FZeix8"/?~6LO8;/MkPL(%W_b~ endstream endobj 3687 0 obj 823 endobj 3688 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3686 0 R >> endobj 3689 0 obj << /Length 3690 0 R /Filter /FlateDecode >> stream xVKo0 W&ٽmحhal%ة$G"N֤O"E~(?.݃g q( qXY pE/[Qu1=DAu@З;1zzs]p{yS >wcD ZmԲg4&)Y> vaqoU ڴunUSi4jWg%ńDI!LrbFFn*BjT5[[Rػj]ANKwБN}a)0Á).dmro˞E)f4$B@NF9 AҚ1~>ii[ 5bKji,ͦVkpYa~1 Iz'8If!߽(3f3tPYt >3LTM]/ YYя c u=l|f3p88Tm{6ٜ#P:{^EQ❖Iє"/Q./ISLC7eɵڻTr21JHiXq@+>ۤߜ=J!/_HZuSz RfRzA!.:kŒsd QE8> endobj 3692 0 obj << /Length 3693 0 R /Filter /FlateDecode >> stream xUMs0+V`e%@=t[&`l+ ד_p&α iv~(y6JI=/ PNX``7(ϣtZƪUUW(]G %YR`wnn8;GFy(aS"`We^Lv.m7]tš~r:CRd*nV鼮ގiwlZo¶@B .H$)RN溶aI}/]THؤA n XMFRl;о.C3;נKL1V{k&;K ضt9K._%TzY XԞ"ګꐖiUcoBLT~iHjeEQo=G<wȈO(Ͽp5}y {dhRr|ӏ endstream endobj 3693 0 obj 572 endobj 3694 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3692 0 R >> endobj 3695 0 obj << /Length 3696 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=i=L\pV)vVφ IОֆ(_'O ?pA!FS}D1h /Q_q?v'ko͝CsGtzj~WaXeC%'a VpsvbR) QtwVU_WWu_Z)]틉S#+;P8EF?XA^}#EW̼܌SĈ;C73Oy^+xTMJ(jcmj+mkp lKVCT_RicLqὂj1M6C'B4N01OYn= MGq„N3]lm2uv}ItҮx3aY8 7w'3\$ ]/dM?N`B,e.p{kxPKݨa mef,_Tmb4\ˢ4(Idc:?6c:EYNMHu7 5סyE t>p]+xdN_ܛ/Ƭ/,+ endstream endobj 3696 0 obj 644 endobj 3697 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3695 0 R >> endobj 3698 0 obj << /Length 3699 0 R /Filter /FlateDecode >> stream xU[o0~WVZ= ӦPJ=4UDiicHB.M4iZb㧀2W c 9.Ģ HV:Wvrʜ658]B OǕ$cϕ\Sm7ԤP $McJG99ZYP5ĉHS)ʺidkznPL T~Yk*\y}JMOG{^Y41 a"WeV7tN9QKJ .8ndFrHzHEV/RgUA6N]/;1 U z*dТiL>m5ۉ³1bG֪ x~-Ō~K]P[*ӱ71DK\J}31,o;UzFIs<> endobj 3701 0 obj << /Length 3702 0 R /Filter /FlateDecode >> stream xU[o0~WVZ=8ou&UECSU pU!rC{Z Ql;χS@BRȪiX0 ܱp?8 e{> endobj 3704 0 obj << /Length 3705 0 R /Filter /FlateDecode >> stream xTMs0+">@(LiIC"|_ ;) x,YziWb h 0* -p,}nE1~9q Kp{oѕCtcM< cp(B[K  g= n?m;]&i IVmv{HnN;ӽyH2rZLrw>q`H^٥҂ʺŷՍyЗm$K:='1FJ>DD;)q;a@8ti~#Bú1%8 0Pp'6 =B"ecTnv U'+AXΈۘ2N'kw=ޘ IX(%muxnsSF΀' A;'g^?Bt5yfxl"E s¯,i-K"4ЋMdŻ. δߣbWhȜg H MƮMը endstream endobj 3705 0 obj 530 endobj 3706 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3704 0 R >> endobj 3707 0 obj << /Length 3708 0 R /Filter /FlateDecode >> stream xT]o0}WMZ=q-mmbV gCHJHОB8r7~BAEch~7؟(ӯxX{ ѡ]< 0l/Iy'iDbwbĨdF퓴Ĥ-FpV5!|KFy3BY.>QEZi9n&сGPZҩFmeiS y "J%r&NUbq*15@8'9,t[mpՅ:CgJc(9S@`EW@ MRv IKhܓ.f;P8YogZ"D1RH{iKfwH$lv < t~4<)Sz'gFnM/Lp2荍˜Sƈ0We3SM"N L( [Zڨ. T>> endobj 3710 0 obj << /Length 3711 0 R /Filter /FlateDecode >> stream xTn0+.> !ڦmJ}eOD2Dywp@ Y&kwz A䦱lSUúvR!'9Ώ|HJ4՜(ftnL&H:$) dS$SI4re"rS_6ϱw]^m[>C:c\/58?k˦ @3%8bޱE:vѹFʾ::WCq7g]T6{Cc =Zy`.:P8͆>s ^ endstream endobj 3711 0 obj 523 endobj 3712 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3710 0 R >> endobj 3713 0 obj << /Length 3714 0 R /Filter /FlateDecode >> stream xTn0+r))Л=A@۴B[DECɲEFOM$Cfy8׈&,pc9uX^tXKx`w^3*# ߢgD' T(4.2Cx%" 7ߺ"5-}n۪]{ kzP`=.Ӥka3$SkAjDuSomMj=%\[& 9LPʰЇPD]R4”s}l//CVf~BWm|V`^E yV:jS*T gGhJ ij՜HbtbItVKiDR!~|vY1iZ&5Q4FcyYUncڵߝmYVE>&KlH(wSm5ïoaU  Q"}a] W-mR <5#dwBcI/-Gi.yɤ823^FIr0NV5uİ endstream endobj 3714 0 obj 559 endobj 3715 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3713 0 R >> endobj 3716 0 obj << /Length 3717 0 R /Filter /FlateDecode >> stream xTn0+b^4z3"8hȒ"-%EˎWD2Di8ׄ*,J3.5FA1r*K=pX<`QoqX#~%U=yx)Ib>6&Oܥ@VZ eL@F8b/27 䭩\iɷ|7E)ҷhTnt(aoʃګ5m=׮3 isj9"@0(GClwK".Iza̘ڷgᮨ 3IO ƴMۢrmhtODʐcq\ ZeZKEϥk!~re7Y}ôT("3Z犺:[\?u mLJ+I(_1om\5gLy6͋:xY&v^B/e] Қj@1GJ㺧 _ILJ*̨-a>c~p|\1Z\(l甕L> endobj 3719 0 obj << /Length 3720 0 R /Filter /FlateDecode >> stream xTKo0 W-a` vhBIԃ~`v`9EG/ ]X0[%/[ c0Ixp@XUkh ?uB[$]o8NF'DFa|*_S`^Z \BNPf]5kW_P|OGy Yޣ_L4tǟ"]+IuN'vnUjTKl%jzj7 isDe.(-sp&(eŀ9D}}$4$~¹:5PЌ7/K! ƴ.g[plODyى,˂ouݸZr3Gd\ICJjcw!1yL&rވAse,c M[igSXt;QEZ6΃Yx_ 93UB0G+/^Z˕s:ȊK}EڎAgA 4);Wߣ4 q#lڽ9 $?𙠃U _e endstream endobj 3720 0 obj 561 endobj 3721 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3719 0 R >> endobj 3722 0 obj << /Length 3723 0 R /Filter /FlateDecode >> stream xTn0+.> ! *J}eOD2Dywq@⠍E8h؅x^WL'q+3aw?e5%di8&{໊ !XeZnHWdRx ps1} [Tehm@/o}v\'C|)XE~ 4-&=$d*W4Uh-]_v!:9siULp)tHŊ"*!&'s& 0l[7]fc62.JZY==VrՅ&Tsѥ1(Ёs\H0ݶn#I\iVMD]jyr8?3(5[q(碡(cG7,7z|(v,q=M 4ߢ[[csՑ‘;gk!3]_[ endstream endobj 3723 0 obj 517 endobj 3724 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3722 0 R >> endobj 3725 0 obj << /Length 3726 0 R /Filter /FlateDecode >> stream xTn0+ ˗H1Ǣ7B{vhG,)""ߥh9=5 Qq3>f (WqІb=n0P0Ixpbq@ yEzc?&-Edi8&{BFa}*_s`Kj!S ċCn]6z.o})w| ߙɠ/UPJb͓N {+4-IQ׷sw}Hg)1G- p&(eh8ewp{:8~`P5+!!]ކmfb{IC 1X'MʏTsĻŋD:0}.$HTDa'C2*1+"tޣɓ{1Vxp6koWv^a"~&E_u|[2CƖUsI Z>F7?4>vbNwx)b+O7jAi) endstream endobj 3726 0 obj 554 endobj 3727 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3725 0 R >> endobj 3728 0 obj << /Length 3729 0 R /Filter /FlateDecode >> stream xTn0+r)hS7#B{Z,)ܢߡ6GS _"ha^z b&  "o_a :lGTDFwԅA!]Fg)>(뽴)^n!߸mj+Hk[6e ׻oїt[0x:84i[i6m&݂N8%;Vh4%rno}c+RY9qŪ2 gRDG.~"*bC{y"ڤ0r]m_DД(r=tKQV>9HbtbIt "iX)mscVyIMT"]^==Sj6|;XS~:?CZ&i_Y\) c"94gTm7pv }m+hJX 5x[<O|2Ē^ߣ4̷8h?a+1 $JF endstream endobj 3729 0 obj 530 endobj 3730 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3728 0 R >> endobj 3731 0 obj << /Length 3732 0 R /Filter /FlateDecode >> stream xTn0+ McW7B{vhGl)""ߡ;򆞚H(?̛S€}m8,S1C,U$) q+wtX;/3$%w> Ÿ37d/bJ>|K-3qW&!#xqp{1}s[C؍/mޅ;ȿ'_n;=i.Ӥmɸt n$S^ j fK)jnn|5K̑D $' J8ΆGOCsO0 f%t.gnQm Tiv9Q1˄ufT/@5G`$1:3F#(?qA$*EGag]2ʤ1ۢG' 1Vxt!6m ;/?a"~ES\4(oڌ-yep ,cOiNT<ʤGL\Ur2(.9nY5ni>J )=giPh?sÈ9vo9#Q&$/]/ endstream endobj 3732 0 obj 551 endobj 3733 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3731 0 R >> endobj 3734 0 obj << /Length 3735 0 R /Filter /FlateDecode >> stream xTn0+b^@oFӵYRDEC-v"&!O彙s Wq0ޅx+&b{+Wv8=~Fe-'tNx hxMw¯S}#2.DA¤o*jHEV _{HG_ޒw{ ]$gXJf2I@f^jE[ ԒDuSoՙrދsDlLpȉiлVIjC4?0WgM^~BP*r!o;Au$2eU܏V1kkHzυB2m]ȊDa2L'ZC uۓUtɠ;klVЧWo42|Q&sb̔{6-yxZfnQ5BOUX\א/"C w&y3)32[Ð} c~p]2ZL8d2>y( endstream endobj 3735 0 obj 532 endobj 3736 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3734 0 R >> endobj 3737 0 obj << /Length 3738 0 R /Filter /FlateDecode >> stream xTn0+ McW7B{iGt}IQ=5SzySB& RQXTӀ؇H*pDSG!0g|!<<N0|M=x H&@ :'¦@0䫝D!B2bTB^:S庅ӵ-k:ָ{ȿ%o,I_L4TD})MI'#+W~nk:ݢV[ˣ1'p(ai6Dnw8(zS;Wk%gWjGX4KEeڔP5MifcZ,X@3/@ rimaG:HL)AH:$ qHˍ*zcI%WJ:ڢ!XрaX~s@k~2vOg8%B[sc3,om "NP鉥ƹ2jE9ƻܬE5CH5M9pj|o!:Q{`η}(l &6Wv5Ud endstream endobj 3738 0 obj 567 endobj 3739 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3737 0 R >> endobj 3740 0 obj << /Length 3741 0 R /Filter /FlateDecode >> stream xTn0+b^@oAlӵRm%ˎWDDiǙy8 +`VFk .c \11nBa?mͳ)!|ᏲOڼEC)PL oi"o`u *.V |4=޴NL->A`^0 *Y3v4'+_DC endstream endobj 3741 0 obj 547 endobj 3742 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3740 0 R >> endobj 3743 0 obj << /Length 3744 0 R /Filter /FlateDecode >> stream xTn0+ McͰ Q!KHw(Yv =5 Q~phaNA1RL"ܳ qG~N?*-G$8M&wU)O>~MQȗ{i!S2 ċCnVnz!|Gy Yޓ.>Et47N8%;VU#hP-i빻6ާ0'HN82L4z:X?3!_"46 K]ήMUE0<9(*UfCB"&34D]v>7UTsB #љ1g=HK.DطRܸGwIMT&!O=&yfbE|w40䇭 mKkE_m~v~M 鮅:ŖE<v\ەraB g4'*weW.b}9}Ps[7 !OFdwTSI/-Gi2{`{)l4Ύ7V54ȥ endstream endobj 3744 0 obj 560 endobj 3745 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3743 0 R >> endobj 3746 0 obj << /Length 3747 0 R /Filter /FlateDecode >> stream xTn0+bACM*dJe+zJ" "8 _ Mf0_'/b>DS Txq @DK^8H\5y| ")IsC29?Tl]|O"T0

> endobj 3749 0 obj << /Length 3750 0 R /Filter /FlateDecode >> stream xTn0+ McͰ :Q!ˊHw(JN& J|3o3|P *{0P0Ixpbq@ }E㊺_c?&-EdHf=!]i}*_s`Kj!S ċCnU6az.o})w'h"&})MvI6O8%+upF`Đ[%^I,@r™aِ/ۣT!}ƹ'sۅyŢvٴQͰh{zfʏTs$n#х1t9 "iQ)7ndRUHc4VC鼯a+<:}]e5N|qFdj95FL$gr3::-]PkBevvo{N\s&%=%bC?8lNcVG 9`'7j3 endstream endobj 3750 0 obj 530 endobj 3751 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3749 0 R >> endobj 3752 0 obj << /Length 3753 0 R /Filter /FlateDecode >> stream xTr0wdꁄ̴Lw0"t-t0WB_U |st^" (`^zb*pXAoQt֯qXGe%z|r1B!6.>@^Z eD@B8bnm6jHEV ִO~>ޜw{.bHJi3u(arʁک{Z[f53k%1*sBl`QH D]8œ1uh/.}^vcVBWd实_sO%. =A!j蔲mnW}DDkɒt򥴔q"w!ķؙ1y Ed"V/B^cm^gwS^ƀ•&+I(_1?lT(b<6ͨ:o;¬6LuXI=~!X)>:PޮG.I29Dg7V` endstream endobj 3753 0 obj 514 endobj 3754 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3752 0 R >> endobj 3755 0 obj << /Length 3756 0 R /Filter /FlateDecode >> stream xTn0+̒KJM !ڑc#"_R; =5Qq;]>̟0(,sqP"Ca 6<7) ޣt32=H}<)tgrM92$*P!-j.+RSCژn6s$ӑn鞶uBCmKi:.&Ղ; W[TAEuS-LMmkW e)r*С#a81 f4./* S>ª ) 8~5HY6UP%*:Ƥ#˽ERt_fB1T4NWCK՞]O:d]s,2h^JXll浄`0Yg?ĩrHEe.K9cѰyY0BY-T%݋5H$م=BoChydo*P8hs%DpYƧ2 endstream endobj 3756 0 obj 527 endobj 3757 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3755 0 R >> endobj 3758 0 obj << /Length 3759 0 R /Filter /FlateDecode >> stream xUn0+5˗D1m DhIP02I__RqH)v!#HM0`VB$/pD^x"⾳~DZ0|ɮn"xYnt.o*7 w*{PfjDxJĨLjW'C7jʆ{:qt{zsS7#}TDONJb8Āb$žrMEed 5곳Ъ.u'N% c90ni <5b߾8bƚKPPF%@c̟iC=.FE31ź&0K(,h;X e$[0VO+u/M@EɥQ u|`!Qk'côvK=MT6ĎУi׳Zcʴ]aC퓘Q4üd]MD43vi_SK9{5k-)KDXzeIڛ5@ EQ?[r^Ca`ܭY͏^6:Ԫ>Nz@&03Sb:h`z%)" 9? ^<'^tQ' endstream endobj 3759 0 obj 604 endobj 3760 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3758 0 R >> endobj 3761 0 obj << /Length 3762 0 R /Filter /FlateDecode >> stream xTMs0+V3m:ӛ'L{H3j  c$XYo?.p@w_Ei&xc#Q+'<>]9<]Йwb~7I6r8b 1El_ۘMVia)kp4 |Jy No,E_"rbm+-ͤZB\j*jKTs}mb*>z$1\f@gXP0Rλ$un;9xz2+(\ KcmR|BEART=LXt)9Ϝ;V4ߚc3EZhIu%RSɀ#m~{ T<*>@Gl5HPowɸ;]YdlþqnX m@4ϡ)O%a)q C3?c)/0BΦsy+O8_YU7* endstream endobj 3762 0 obj 528 endobj 3763 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3761 0 R >> endobj 3764 0 obj << /Length 3765 0 R /Filter /FlateDecode >> stream xUMS0Wp@˖EoF0+;m$Q&+;ĉSN;c9۷cĀ}9LWc8dbqL#Y~@ yFÌe;;n*=G@oʚX350+o8M'e  {G\nq(hs54` gl9lVA,"hS)J$ U_FUݸ ZRvFo 4_lY }L*RkEGȡ|M*k, 3C/̘%zTG%hpwRV0Y{N/t"gsbj)>CafeS˕94/o+7wd2ฏ_jԖ/q0N.%QⲴ'yc1}ϘжTMiC@?9-=ʼn ;msۖbI Q&z^{?2 &tHKd> endobj 3767 0 obj << /Length 3768 0 R /Filter /FlateDecode >> stream xTKs0WzYzd 2t'QSjYYqRa8>E (W~цêvA)bL# ~G1~N5@t|·(|]#ï( oQxާѻts8+8%ܽ9[YiU]Y/t`D}qi2bLz: hZVANsYɫζGYh.p&(e_Atx4s |*\ۗr ) O#;RHS 鱉n45g0xdθ ~"xЧљD%%,¦/ jyѶ-vA{?/-Ҋ0`pljWfP"9ú[ϾsHaSv ʐ9 (&s?G3iPG8n*!p2^I $`%YªE endstream endobj 3768 0 obj 532 endobj 3769 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3767 0 R >> endobj 3770 0 obj << /Length 3771 0 R /Filter /FlateDecode >> stream xTKs0+ cMgzsô8!ph_ jOMvoWQ@w_E**z0 O ~w8eߢ:B:tn4f;DMqCxgѻ(B*B+Δdܜ]6VWYkSi}mo!}&ysX޳_Hws$}+ͦ${pD{*Z|h6|v5iuwUJ4:HA0(G.:i[3:{3&w S+GmJ6ES4#`Ӂ$$Icf4UP(*4RTt8Yk^vz܅ޏN$I*qz:/=daW> endobj 3773 0 obj << /Length 3774 0 R /Filter /FlateDecode >> stream xUn0slumc0toݮhTI);4A˶a2ͼyda^ۃ&;4?﨟ig~ؙh߁ (_к@{]| &"Sq fcB9k :ҁmNChG&=Q^HRv. endstream endobj 3774 0 obj 616 endobj 3775 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3773 0 R >> endobj 3776 0 obj << /Length 3777 0 R /Filter /FlateDecode >> stream xSn07CJ*EAeIPL(B*ul"#<Ώ{#avM\@c 9b"R.,Ua,OeAovF L+n,.Lv}/Mq 9v_{d5!!Y> endobj 3779 0 obj << /Length 3780 0 R /Filter /FlateDecode >> stream xTMs0+$@ȷ~3=tcfzHrpmfj Gwel$zڏDŽ}6cqPdއxO,7Vϱ#d |IS눓d|)ɇ2ywG("Z &rwWLTp[ LM֛_?@5\\{b=kiܯ& )*ɢ@bggMU.8W N H\"r cqD"gM$a6B$$Hrcm@0Ѣm~mj BEAI*4I ]GCS ۖ~vؼ3 蝰y+g5ݫ[ endstream endobj 3780 0 obj 531 endobj 3781 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3779 0 R >> endobj 3782 0 obj << /Length 3783 0 R /Filter /FlateDecode >> stream xVKS0Wf7NKgz`&8hH$c9wey؎é@XYۗEofױJ`SKCenE̅vXdpq˵*V,8JU38׼ԗO0i}P#54bT]`b­ #BQ^)cT'n.uʐm/D4tJ ow#HF&BIҋ A 8&xVk%% &)Az*B7Ш' kGAE> kЉ S.auj%Ŋծa"IL98M 5(SfALE<6e Lm{&DS^4i(Lyʹx* : b_p9+Ɓ> endobj 3785 0 obj << /Length 3786 0 R /Filter /FlateDecode >> stream xVMo@+Hvͱj]HG6q_]`/Ucy7o٣sT f﹎Q x Q?*mB~;tW˫O~B^!|ltn>*8B]Ն>(xqD0bB™r <ehSU:1Ұ&YBq`HةXRi yQ%S}/r%)t4OL>#rDj{MUfHDdY&6 `qKlׅI~7qD-A$  J:z47@ dT t>f8,ߣX=gB ~$%h_.ef̭nfat>~[=m7SAЛs(rPLm )b__e bȮkr̮~f\գ$׉Lv!'m[-ý B-{\Q9rwF*g299 }Rɬv+;_9S|~EڎI<ӍIuQPǏQtCcXϵ0&seB:E6^#]|[xcU_ endstream endobj 3786 0 obj 654 endobj 3787 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3785 0 R >> endobj 3788 0 obj << /Length 3789 0 R /Filter /FlateDecode >> stream xUM0++5m>XJQ` @c@u6ߌ0xOL#$y9n61?٢hӠ4=fĶ}٧MkMl::Ohܙu&B(O Fae!'\;xW!+~To̫ Q^}7ˢ;K|VfjdҬ&QOD)(Kp@G"{VwwiR(I**2G,E={!xpR0ut^^s1OjV`t &m֡CPCXg?il'w)B)ZHcwG˵G۽:'H4\)6ݳ*ƃ5-u1Yඃ[PoEyk^E_RM?j:_1N*N"J],|DQ]ٙDB$ESqv;X/(Z`{Pe YDa_1z6.<OZ'U*tn{s{dQ)DP媈j' iӁ{tD>Vjj۵cy䪰dk0FIت7f9 endstream endobj 3789 0 obj 655 endobj 3790 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3788 0 R >> endobj 3791 0 obj << /Length 3792 0 R /Filter /FlateDecode >> stream xU[o0~WUZ<ӖI{TmmRLTB\؞ֆ(v>Wg9,6c8`1?& nXpPb]i;6m')r %>y8O*6 +k}(DI'- Rk%Dp> <|3[Q4[UE D֚> endobj 3794 0 obj << /Length 3795 0 R /Filter /FlateDecode >> stream xVKo8W̱-E{b7E{h@(M*$4;4,+= p~o#){ﱕRSQ'D>QP{> ;v1NDGgV(s:w7qVx?nc #yN#Ca3$;Fb`U4}V_W';"iD\;ͦ( ?愐Qr^ Of.C3GDԧAHHѼ 9C\'J) Y{(w Ξp4Ua.FN3 <0?IH4? h;h>yyB3퀆~D(DXo O2LđyEž]<`(̞WOln/u7/~YՍn`Ƽ5g&zD#57\˛'̖M3 @=[. &@.2gs8L-$@+u, -x)d }dTaOoّL{xGOXüd3sl^x i> J/|XЮDSӥ>W(«XZeyP=,Kփ-W7$ъ-重bMŰJR8$'IevLGR*$BMbY +x\%rԏ~?{[7aP vO\Al~f;)6fdҪ5v5s:AoalbslցR6#om4.OL)ȡNK$X ƛLCJ/k{P)4x m6)B)^8 =Y뜹i?;鱓8JbV;"v! endstream endobj 3795 0 obj 914 endobj 3796 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3794 0 R >> endobj 3797 0 obj << /Length 3798 0 R /Filter /FlateDecode >> stream xVo0篸Vj?C-Pj=tUI@uaZi9|GNѣDAj|Iq}*=)YDx@lKCRO 7 NxT)+5kZ4F8|+> endobj 3800 0 obj << /Length 3801 0 R /Filter /FlateDecode >> stream xW]8}Wܷm͇TCD*rdLL:6IH8/m(\cz~ߚOd[!F3b" (r<`[bZ999<¿^}콾#%B~ ϻ(E1HK?da,Xj> [*%FFi$IW\fX9>欔p]BFce8^0W`W 8 !7J1v%[Յ>786%fc{ ɾ%s%~rG;/V|Ms endstream endobj 3801 0 obj 927 endobj 3802 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3800 0 R >> endobj 3803 0 obj << /Length 3804 0 R /Filter /FlateDecode >> stream xVMo@+Fj,XCV{H" ⬌Yq_]'Mzhck72OlK{1t=mm8H E^bhVǻ{k»?+= _c͌=׺Gm~S0̼Ocu8?HK"S?cCxwo^jײ0ҪJfɲx7$qFKfjۈ/GM/ݞvo{PicRn1Ƙm5ZVj*ʼFZu%X (GSD Ød^us(WPMIR.\ -(5ؠA-EJoeGѬEecVAHG)QV)mJ^x@G18Q :+4 '>k|Oա$&n?49 #媚W,l1I0L /ULt>IU+U|Yf25>k9HaTøPMq (W願b2K%" wu峚 J- IQ(Ni>_򗻐KXπ&Z@޻pr=H.K6қ?mRĔA ~t*xjդIͰ+ vh&2 3s\hd #?n|uZ1 |Ʊ9!T&M`Djd04nùWaPwQ HAsgt\ye?>v [(ú6n0ӛ#%Qt2LAtvfϪ7; endstream endobj 3804 0 obj 788 endobj 3805 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3803 0 R >> endobj 3806 0 obj << /Type /Action /S /GoTo /D [3646 0 R /XYZ 72.0 720.0 null] >> endobj 3807 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 217.89 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3806 0 R /H /I >> endobj 3808 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3806 0 R /H /I >> endobj 3809 0 obj << /Type /Action /S /GoTo /D [3649 0 R /XYZ 72.0 720.0 null] >> endobj 3810 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 216.77 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3809 0 R /H /I >> endobj 3811 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3809 0 R /H /I >> endobj 3812 0 obj << /Type /Action /S /GoTo /D [3652 0 R /XYZ 72.0 720.0 null] >> endobj 3813 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 685.5 346.536 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3812 0 R /H /I >> endobj 3814 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 685.5 539.998 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3812 0 R /H /I >> endobj 3815 0 obj << /Type /Action /S /GoTo /D [3655 0 R /XYZ 72.0 720.0 null] >> endobj 3816 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 253.97 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3815 0 R /H /I >> endobj 3817 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3815 0 R /H /I >> endobj 3818 0 obj << /Type /Action /S /GoTo /D [3658 0 R /XYZ 72.0 720.0 null] >> endobj 3819 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 251.21 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3818 0 R /H /I >> endobj 3820 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3818 0 R /H /I >> endobj 3821 0 obj << /Type /Action /S /GoTo /D [3661 0 R /XYZ 72.0 720.0 null] >> endobj 3822 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 256.21 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3821 0 R /H /I >> endobj 3823 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3821 0 R /H /I >> endobj 3824 0 obj << /Type /Action /S /GoTo /D [3664 0 R /XYZ 72.0 720.0 null] >> endobj 3825 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 261.2 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3824 0 R /H /I >> endobj 3826 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3824 0 R /H /I >> endobj 3827 0 obj << /Type /Action /S /GoTo /D [3667 0 R /XYZ 72.0 720.0 null] >> endobj 3828 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 251.76 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3827 0 R /H /I >> endobj 3829 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3827 0 R /H /I >> endobj 3830 0 obj << /Type /Action /S /GoTo /D [3670 0 R /XYZ 72.0 720.0 null] >> endobj 3831 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 255.1 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3830 0 R /H /I >> endobj 3832 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3830 0 R /H /I >> endobj 3833 0 obj << /Type /Action /S /GoTo /D [3673 0 R /XYZ 72.0 720.0 null] >> endobj 3834 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 240.66 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3833 0 R /H /I >> endobj 3835 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3833 0 R /H /I >> endobj 3836 0 obj << /Type /Action /S /GoTo /D [3676 0 R /XYZ 72.0 720.0 null] >> endobj 3837 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 248.43 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3836 0 R /H /I >> endobj 3838 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3836 0 R /H /I >> endobj 3839 0 obj << /Type /Action /S /GoTo /D [3679 0 R /XYZ 72.0 720.0 null] >> endobj 3840 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 240.66 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3839 0 R /H /I >> endobj 3841 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3839 0 R /H /I >> endobj 3842 0 obj << /Type /Action /S /GoTo /D [3682 0 R /XYZ 72.0 720.0 null] >> endobj 3843 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 207.89 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3842 0 R /H /I >> endobj 3844 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3842 0 R /H /I >> endobj 3845 0 obj << /Type /Action /S /GoTo /D [3685 0 R /XYZ 72.0 720.0 null] >> endobj 3846 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 235.11 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3845 0 R /H /I >> endobj 3847 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3845 0 R /H /I >> endobj 3848 0 obj << /Type /Action /S /GoTo /D [3688 0 R /XYZ 72.0 720.0 null] >> endobj 3849 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 237.88 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3848 0 R /H /I >> endobj 3850 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3848 0 R /H /I >> endobj 3851 0 obj << /Type /Action /S /GoTo /D [3691 0 R /XYZ 72.0 720.0 null] >> endobj 3852 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 265.1 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3851 0 R /H /I >> endobj 3853 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3851 0 R /H /I >> endobj 3854 0 obj << /Type /Action /S /GoTo /D [3694 0 R /XYZ 72.0 720.0 null] >> endobj 3855 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 517.5 255.275 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3854 0 R /H /I >> endobj 3856 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 517.5 539.998 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3854 0 R /H /I >> endobj 3857 0 obj << /Type /Action /S /GoTo /D [3697 0 R /XYZ 72.0 720.0 null] >> endobj 3858 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 255.92 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3857 0 R /H /I >> endobj 3859 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3857 0 R /H /I >> endobj 3860 0 obj << /Type /Action /S /GoTo /D [3700 0 R /XYZ 72.0 720.0 null] >> endobj 3861 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 250.92 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3860 0 R /H /I >> endobj 3862 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3860 0 R /H /I >> endobj 3863 0 obj << /Type /Action /S /GoTo /D [3703 0 R /XYZ 72.0 720.0 null] >> endobj 3864 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 249.8 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3863 0 R /H /I >> endobj 3865 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3863 0 R /H /I >> endobj 3866 0 obj << /Type /Action /S /GoTo /D [3706 0 R /XYZ 72.0 720.0 null] >> endobj 3867 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 239.8 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3866 0 R /H /I >> endobj 3868 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3866 0 R /H /I >> endobj 3869 0 obj << /Type /Action /S /GoTo /D [3709 0 R /XYZ 72.0 720.0 null] >> endobj 3870 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 230.92 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3869 0 R /H /I >> endobj 3871 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3869 0 R /H /I >> endobj 3872 0 obj << /Type /Action /S /GoTo /D [3712 0 R /XYZ 72.0 720.0 null] >> endobj 3873 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 213.16 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3872 0 R /H /I >> endobj 3874 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3872 0 R /H /I >> endobj 3875 0 obj << /Type /Action /S /GoTo /D [3715 0 R /XYZ 72.0 720.0 null] >> endobj 3876 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 230.1 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3875 0 R /H /I >> endobj 3877 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3875 0 R /H /I >> endobj 3878 0 obj << /Type /Action /S /GoTo /D [3718 0 R /XYZ 72.0 720.0 null] >> endobj 3879 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 230.1 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3878 0 R /H /I >> endobj 3880 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3878 0 R /H /I >> endobj 3881 0 obj << /Type /Action /S /GoTo /D [3721 0 R /XYZ 72.0 720.0 null] >> endobj 3882 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 217.6 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3881 0 R /H /I >> endobj 3883 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3881 0 R /H /I >> endobj 3884 0 obj << /Type /Action /S /GoTo /D [3724 0 R /XYZ 72.0 720.0 null] >> endobj 3885 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 218.16 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3884 0 R /H /I >> endobj 3886 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3884 0 R /H /I >> endobj 3887 0 obj << /Type /Action /S /GoTo /D [3727 0 R /XYZ 72.0 720.0 null] >> endobj 3888 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 213.16 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3887 0 R /H /I >> endobj 3889 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3887 0 R /H /I >> endobj 3890 0 obj << /Type /Action /S /GoTo /D [3730 0 R /XYZ 72.0 720.0 null] >> endobj 3891 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 230.1 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3890 0 R /H /I >> endobj 3892 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3890 0 R /H /I >> endobj 3893 0 obj << /Type /Action /S /GoTo /D [3733 0 R /XYZ 72.0 720.0 null] >> endobj 3894 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 213.16 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3893 0 R /H /I >> endobj 3895 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3893 0 R /H /I >> endobj 3896 0 obj << /Type /Action /S /GoTo /D [3736 0 R /XYZ 72.0 720.0 null] >> endobj 3897 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 230.1 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3896 0 R /H /I >> endobj 3898 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3896 0 R /H /I >> endobj 3899 0 obj << /Type /Action /S /GoTo /D [3739 0 R /XYZ 72.0 720.0 null] >> endobj 3900 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 213.16 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3899 0 R /H /I >> endobj 3901 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3899 0 R /H /I >> endobj 3902 0 obj << /Type /Action /S /GoTo /D [3742 0 R /XYZ 72.0 720.0 null] >> endobj 3903 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 230.1 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3902 0 R /H /I >> endobj 3904 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3902 0 R /H /I >> endobj 3905 0 obj << /Type /Action /S /GoTo /D [3745 0 R /XYZ 72.0 720.0 null] >> endobj 3906 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 213.16 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3905 0 R /H /I >> endobj 3907 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3905 0 R /H /I >> endobj 3908 0 obj << /Type /Action /S /GoTo /D [3748 0 R /XYZ 72.0 720.0 null] >> endobj 3909 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 230.1 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3908 0 R /H /I >> endobj 3910 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3908 0 R /H /I >> endobj 3911 0 obj << /Type /Action /S /GoTo /D [3751 0 R /XYZ 72.0 720.0 null] >> endobj 3912 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 213.16 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3911 0 R /H /I >> endobj 3913 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3911 0 R /H /I >> endobj 3914 0 obj << /Type /Action /S /GoTo /D [3754 0 R /XYZ 72.0 720.0 null] >> endobj 3915 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 230.1 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3914 0 R /H /I >> endobj 3916 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3914 0 R /H /I >> endobj 3917 0 obj << /Type /Action /S /GoTo /D [3757 0 R /XYZ 72.0 720.0 null] >> endobj 3918 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 218.72 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3917 0 R /H /I >> endobj 3919 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3917 0 R /H /I >> endobj 3920 0 obj << /Type /Action /S /GoTo /D [3760 0 R /XYZ 72.0 720.0 null] >> endobj 3921 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 245.1 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3920 0 R /H /I >> endobj 3922 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3920 0 R /H /I >> endobj 3923 0 obj << /Type /Action /S /GoTo /D [3763 0 R /XYZ 72.0 720.0 null] >> endobj 3924 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 246.77 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3923 0 R /H /I >> endobj 3925 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3923 0 R /H /I >> endobj 3926 0 obj << /Type /Action /S /GoTo /D [3766 0 R /XYZ 72.0 720.0 null] >> endobj 3927 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 299.8 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3926 0 R /H /I >> endobj 3928 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3926 0 R /H /I >> endobj 3929 0 obj << /Type /Action /S /GoTo /D [3769 0 R /XYZ 72.0 720.0 null] >> endobj 3930 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 261.49 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3929 0 R /H /I >> endobj 3931 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3929 0 R /H /I >> endobj 3932 0 obj << /Type /Action /S /GoTo /D [3772 0 R /XYZ 72.0 720.0 null] >> endobj 3933 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 269.26 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3932 0 R /H /I >> endobj 3934 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3932 0 R /H /I >> endobj 3935 0 obj << /Type /Action /S /GoTo /D [3775 0 R /XYZ 72.0 720.0 null] >> endobj 3936 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 294.81 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3935 0 R /H /I >> endobj 3937 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3935 0 R /H /I >> endobj 3938 0 obj << /Type /Action /S /GoTo /D [3778 0 R /XYZ 72.0 720.0 null] >> endobj 3939 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 181.5 257.476 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3938 0 R /H /I >> endobj 3940 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 181.5 539.997 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3938 0 R /H /I >> endobj 3941 0 obj << /Type /Action /S /GoTo /D [3781 0 R /XYZ 72.0 720.0 null] >> endobj 3942 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 219.54 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3941 0 R /H /I >> endobj 3943 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3941 0 R /H /I >> endobj 3944 0 obj << /Type /Action /S /GoTo /D [3784 0 R /XYZ 72.0 720.0 null] >> endobj 3945 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 240.08 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3944 0 R /H /I >> endobj 3946 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3944 0 R /H /I >> endobj 3947 0 obj << /Type /Action /S /GoTo /D [3787 0 R /XYZ 72.0 720.0 null] >> endobj 3948 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 243.97 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3947 0 R /H /I >> endobj 3949 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3947 0 R /H /I >> endobj 3950 0 obj << /Type /Action /S /GoTo /D [3790 0 R /XYZ 72.0 720.0 null] >> endobj 3951 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 255.63 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3950 0 R /H /I >> endobj 3952 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3950 0 R /H /I >> endobj 3953 0 obj << /Type /Action /S /GoTo /D [3793 0 R /XYZ 72.0 720.0 null] >> endobj 3954 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 262.87 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3953 0 R /H /I >> endobj 3955 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3953 0 R /H /I >> endobj 3956 0 obj << /Type /Action /S /GoTo /D [3796 0 R /XYZ 72.0 720.0 null] >> endobj 3957 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 251.76 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3956 0 R /H /I >> endobj 3958 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3956 0 R /H /I >> endobj 3959 0 obj << /Type /Action /S /GoTo /D [3799 0 R /XYZ 72.0 720.0 null] >> endobj 3960 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 243.98 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3959 0 R /H /I >> endobj 3961 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 97.5 539.998 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3959 0 R /H /I >> endobj 3962 0 obj << /Type /Action /S /GoTo /D [3802 0 R /XYZ 72.0 720.0 null] >> endobj 3963 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 243.42 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3962 0 R /H /I >> endobj 3964 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3962 0 R /H /I >> endobj 3965 0 obj << /Type /Action /S /GoTo /D [3805 0 R /XYZ 72.0 720.0 null] >> endobj 3966 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 247.31 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3965 0 R /H /I >> endobj 3967 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3965 0 R /H /I >> endobj 3968 0 obj << /Length 3969 0 R /Filter /FlateDecode >> stream xMdוyvT>g446`4D5 &Uu%Jq2lvK$oPqYO~~gy7׏OwlZ~h?|x=7򯗏~x}'?Bo7o?է}{-o.xe7?>?/<ͻ.y=?wקoۛ>??_R{韏F_"O/>|e'9.Sb}ۗq%N;m8$nO{J,C"8Ep`@l Xv,;KR@,ECCCSSSVy'ĭH\%]┸C<6Cb"8Ep@06 cA0v`"!!!))))UVl"D`.]"8Dp `n ` ;f, ECCCCSSk5m/^.?~w>˧?O>臏|ڹQT7ԳP]P[R'bJ->bJ-^)AAAIIII,+YVldȲe'N,;Yd9r$)bJ->bB]rK,,,,,,,/߿sn[r~wu=}w?9=׸{/׶V\4KT7'kZJr,X%jX5jr-RCddddddYɲe%J,Y6dɲ A,YNd9rM5=z5=Z,"kz 5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,XbRH-kzu5=,,,,,,,Ӄ1 }ݶq?=}?nG Om}AzH}#uRݡ.o0RՍ).e˲e)bYXBAAAAIII,+Y֋6ܳFuPݨRBuzH=vjd9r26M,c2v"Q2XF! $$$J,+YVldȲe'N,Yd9r$)enbX.ebXf,b,,,,,,,oG wųǏq?jp{K꠺Q=^RWNuR-k@j\Reeeeeee%JOOS''J :R>A;_Wr$)elbX&ebXF(b,,,,,,,,+YVdȲe#F,;Yvd9r$I,X&enbX.e"Y2 YYYY&Y&Y^m3 _~&~y~a.PP'zFzzr^@j\:222222ɲe%魗b~zSJzz:&I,'YNM,c2v],c(bE,e LLLdYɲe%F,Yvdr A,'YNb^/ X @zb^/uz222222ɲ}r?aط4|7hos?4R+Iuzm@Tu|]q5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X^"b6˵q XX2222222ɲe%J,Y6ldɲe'A,YNd9r8Z,ԻXrmH-k@j LLj{<MݞA߶5|} w=-Y>)j| =('5|'5TCBkAVSZMj3fTvS:Lu0iT'夺"ꚌPNk6"y!5TTTTTTTTVSLj3fTvS:Lu4iT' 夺&'鷺f'ꚞPNk~B1]|0F)oOw6[6)ojvSMu0aTNShIQNk&y!5DTTTTTTTTVSy 3y-O;}<,oOGZnTNR]C4Iu ('5DTMBkFVSZMj3fTvS:Lu0iTNR]C4Iu $Iu ('5DTrS S S SMSMS]C9_h~ӗ? ]o=fRNZ>(_Iw`:IlZ6R-TNe'RHR-TK1000444jT:mQ'X^-S>6rS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4IjnFj;f!,TTTTTTTo>ox0|?~z~+21/uErS S S SMSMSMSMSZMj3fTvSMu0aTNRT+2uET+2uEFrR@ZMj5fT6SM0aTNS:I"#9^Wd I"#9^Wd$'늌VdSg.7enY'Nԕ!;.;j,,,,,,,,+YVdYɲe#F,;Yvd9r I,X~]8_u._%buUt],,,,,,,,+YVdȲe#N,;Yvd9r$IS,C6Z,B&麈=5YYYYY&Y&Y 𻪕e7oLs.Ou~_O7}û/?|O6#./z/t]_9B}y(uz@nKTw/r􇺈/5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X^"bK-뮾bC]rї,,,,,,,,+YVdȲe#F,;Yvd9r$I,XRk.랽bK-~ddddddy}D|^{~ߞ_ww0s<H>! PwTh@Bk8@VSZ/f{dnyZ)ay|R>rS:MuPNkn@9夺fR]M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu+PNk Nk@9夺 jjjjjq y+xDX,%ɯ'3JwwR(9^OfdFM5L5L5L5M5M5M5Mj5˳־&$3Y+iyY>)b˃$ ~{Yt w=,oOGZ>(iy|JrR-TZvR-TđrS S S S SMSMSMSZMD7'''jD4iT'Fjl;NjRBQH5VSZMj3fTvS:Lu0aTNR͍Ts#H5wR͝Ts'I5 f!,ZAJ}0uZi@翿</e_|uzHEJ7'=#%FJnTS:Lu4Iufz;יQNufR]3TTTTTTTTVSLj3nTvS:Lu4iTc#:3IuLT(':3IuL0000444jT6SmLj7nTS:Mu4Iufz;יQNufzjj?s] 2zn'4Iu}AuzJ}gJz$)e˲eIJlbYv,X],KRIJ LLLdYɲe#F,Yvdr A,'YNb6˵.kkIj\;KRX,,,,,,,+YVdYɲe#F,;Yvd9r I,X$r%AZJZ,JE,Bdddddddy8.oe<\]fmRs:9Qwo'5'꠺Q=Ԝ+CI,X&5'jPNCz8TLNCj]j͹C+G5?&RtSꛣԕ!$IS,oj:SQMgj=L-G5Xt& $$$J,+Y6ldȲe'N,Yd9r$)G5.G53Xt& $$$J,+YVldȲe'N,Yd9r$)G5.G5uۣdddddddyH[ăIM}P헟tHFa#D7'凍y|P~H:j7aTS:Muq#DNǍTI'rR=n$R=n$M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:It"'F҉TI'rR=n$R=n$M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muq#DNǍTI'rR=n$It"70004U-]7`^;<^H{ MRݥH:QՍ)F҉R=d9ra#D-X6NbyHz.byH:Qeeeeeeee%J,Y6ldȲe'N,Yd9rF҉Z,I׻X6NbyH:Qa#DMAAAIII,+YVdȲe#N,;Yd9r$IS,I'j)H:WIgrS:Lu0aTNR=l$It"It&'F҉a#LnaaaiiiiTVSmLj7nTS:Lu4I396zH:a#D^Ht&70000444jT6SmLj7nTS:Mu4I396N;6zH:a#Lnaaai6[ZIU`εvx}e#'4Iuf#LT77IgJz$)IgjH:SFҙZ,o7NE,o7ddddddddYɲe%F,Y6dɲ A,'YNd9v#L-I'],o7bytۍ35YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YNH:SF҉zۍ3Xn$Xn$222222v#>o1LjkY|q#.I燍yX,6NAa#DnTS:Lu4IǍ97^wR=n$Iz^Ht"70004444jT6SmLj7nTS:Mu$F҉TI'rR=n$Iz^Ht"70000444jT6SmLj7nTS:Mu4IǍ97^wR=n$It"'F҉TTTTTmtHZn\YG$]ۍuPݨRn$+CI,X6NbyH:Qa#D-"5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN}?~KXꃇ ˛OfʫOf}Off|dZ>(_?%OMu4iT+u%T+u%_rRKnaaaiiiTVSLj3nTS:Lu4iT+u%T+u%Bו|M5L5L5L5M5M5Mp+.oY/+~Ӈ?|~?~^^׭{9/5Gz{=^N픇Iy!urS S S SMSMSMSMSZM^T/yVLvNy,˛Q,4iT=^Iu㥜T=^Iu㕼KVSZMj3fTvS:Lu0iTNR]x)'uWT=^Iu㥜T=^M5L5L5L5M5Mvp|kpyq}gϏg^G˛KAy|P~yEyZ)S S S SMSMSMSZM|/Ϸ(˛-ʫ-rS:Mu$urR]w%IuݹTם{IuݹTTTTTTTVSZMj3fTvS:Lu0iT';s/N=夺K^HuݹTTTTTTTWwyjrW럟?|bvYʗˌ^ۃxnyZ)Y>)rSLj3nTvS:Lu4iT׽[IuݻT׽[IuݻwKVSZMj3fTvS:Lu0iTNR]n)'uVT׽[IuݻT׽[M5L5L5L5M5Mp5x/?a<ˏcvzǧ߬# <O?<~?ͻ>?N3^/ ;XǙSwif|J^-'urR]%S S S SMSMSMSZMu3<,oO>A<-7iTNR])'uZTiIuݟTiM5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu?M9Ӓ鷺OSNTiM5L5L5L5M5M5M:6ˣ| O?O//?vj9/?<cfcjcS>Lu0aTNR]GPNwR]GPN 5M5L5L5L5M5M5M5Mj5zQmF3y-O;}<,oOGZnTNREIuPNkMrR]k2R]k2jjjjjjjj5jT6SmLj7nTS:Mu$յ&C95wR]k2ZTך zX[ .߆__4߾Ok1m|c$_NY/H^Hu(70004444jT6SmLj7nTS:Mu$5_T|rR]Iu$/ jjjjjjjj5jT6SmLj7nTS:Mu$5_T|AT|rR]Iu(700044 YVa<Šx;ڜY>%/fɫu^iy|,9Bjjjjjjj5jT6SmLj7nTS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4IjnFj;f!,TTTTTTTÀռ/^^_qYswiCK0Y>)Iua 夺0rR]o#yjjjjjjj5j'fyX,by|P>vrS:Mu$1zwR]oC97TPnaaaiiiTVSLj3nTS:Lu4iTPN c$Iua 夺0FB c(7000444VEyHίË߿%+=<,, fz!׳$ 'կgIwRz,y!կgI@naaaiiiiT$ƥ<$$O;, f|%!yTNS^ϒTgI@, Izz=K0000444jT6SmLj7nTS:Mu4I׳$$'Yz=KBrR%!9^ϒTTTTTTu䃼`By<|ג|ba)_&.y|H&$ꚐHꚐPNkB"y!5!TTTTTTTTVSr)"LvNy,˛Q,4iTׄrR]IuMH('5!ꚐPnaaaaiiiTVSmLj3nTS:Lu4iTׄrR]wR]IuMH('5!TTTTTT룪`06s('uև;>('uևTYjjjjjjjj5jT6SmMj7nTS:Mu:rR]g}PNIu!y!uz{} 7||j_w?^GDCǮ7_?~m?鿾|ӟ|}?w/ \?lOxy>7'o۾]~k/s{;\(~c/qxn'd endstream endobj 3969 0 obj 14480 endobj 3970 0 obj [ 3807 0 R 3808 0 R 3810 0 R 3811 0 R 3813 0 R 3814 0 R 3816 0 R 3817 0 R 3819 0 R 3820 0 R 3822 0 R 3823 0 R 3825 0 R 3826 0 R 3828 0 R 3829 0 R 3831 0 R 3832 0 R 3834 0 R 3835 0 R 3837 0 R 3838 0 R 3840 0 R 3841 0 R 3843 0 R 3844 0 R 3846 0 R 3847 0 R 3849 0 R 3850 0 R 3852 0 R 3853 0 R 3855 0 R 3856 0 R 3858 0 R 3859 0 R 3861 0 R 3862 0 R 3864 0 R 3865 0 R 3867 0 R 3868 0 R 3870 0 R 3871 0 R 3873 0 R 3874 0 R 3876 0 R 3877 0 R 3879 0 R 3880 0 R 3882 0 R 3883 0 R 3885 0 R 3886 0 R 3888 0 R 3889 0 R 3891 0 R 3892 0 R 3894 0 R 3895 0 R 3897 0 R 3898 0 R 3900 0 R 3901 0 R 3903 0 R 3904 0 R 3906 0 R 3907 0 R 3909 0 R 3910 0 R 3912 0 R 3913 0 R 3915 0 R 3916 0 R 3918 0 R 3919 0 R 3921 0 R 3922 0 R 3924 0 R 3925 0 R 3927 0 R 3928 0 R 3930 0 R 3931 0 R 3933 0 R 3934 0 R 3936 0 R 3937 0 R 3939 0 R 3940 0 R 3942 0 R 3943 0 R 3945 0 R 3946 0 R 3948 0 R 3949 0 R 3951 0 R 3952 0 R 3954 0 R 3955 0 R 3957 0 R 3958 0 R 3960 0 R 3961 0 R 3963 0 R 3964 0 R 3966 0 R 3967 0 R ] endobj 3971 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 3970 0 R /Contents 3968 0 R >> endobj 3972 0 obj << /Length 3973 0 R /Filter /FlateDecode >> stream xVMo0+c{gl>{a:iJUUL`jF!{[`^6jl>htnИ[n`ow팢}:ݽ5nG0~?kf!]|Om} 0Ϗ H) AC`WwK PKҼO0}N} ok+2"FKjcOQl$vJc1*%5e Y3w@@)ƾ)Z'V%ش'6!$Bn`U^Їme,*$lGQEVJ A qIZЅ]}BQy/VxDEIҀD)// 2n,J[m>HP`5`)j2 yR੒{X픲1HaE2od l6Y|- ox {fVo2Dz#44-qCÁWV&n{U!MCmԍZQTfEm2wۓˣF6|<)4Xc$3Le#a[r4O_k5MX-_1ӢdIcxcI]Yc0;|bHuD!<3Nn itG{ekmq`;芭p(^BB&I__< o`?Z=С $2: }\2%gG(L/>U{5 endstream endobj 3973 0 obj 774 endobj 3974 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3972 0 R >> endobj 3975 0 obj << /Length 3976 0 R /Filter /FlateDecode >> stream xUn0+%Q̱@]lQ Q[T(Fesjb1pg˗vύ_/Kh~7Xw@ "=phvA%.y C S5 B d-\JI9ĈQ_ S?0kIA%3B?XL}QhKn{hp-vn*(1QiRyrSTǝյj0)aL\.Ar*b1RN쇻VkN)Mkm6 ˛t EQ MkaJW-U 9"2qC|JP8Κ(?Vl_;dO҅ GbY*;-4մXaP?7ՙ`eE=-Xf|C{,x{aXeC̵ Ұ[6V1|,|]l+e*ՕERGi{fa'dĈ<'κ>0{7fB0/W76Gowv?" endstream endobj 3976 0 obj 587 endobj 3977 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3975 0 R >> endobj 3978 0 obj << /Length 3979 0 R /Filter /FlateDecode >> stream xTKO0W̑=`c+mWT5b,B%"$ B{ɥo^#äCK,@zKA?,q.XF^ZoViP %Q!5՝??/gK>j>}Y{H,($$|:?K 2t~m>FEڨy9/&!'[Z먊Nʪ^+  X4َt8cI%;?WYWCBm({j%pOeĮXVXZH%rþqOvZ6s2"ۍ{Jkq:fUxu$ endstream endobj 3979 0 obj 450 endobj 3980 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3978 0 R >> endobj 3981 0 obj << /Length 3982 0 R /Filter /FlateDecode >> stream xTn0+." z`XhiE%DeQ,2Da.% 6eQP G 65e ^NU^֕Cp?{èz"IFDgWt endstream endobj 3982 0 obj 510 endobj 3983 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3981 0 R >> endobj 3984 0 obj << /Length 3985 0 R /Filter /FlateDecode >> stream xTMo0WP6qR3iJQvzHi@W!)$艟y tϕ?ّ@sjHG,^n} /Owh^I0Wd9r?okB,"`IvJ-%Tp?}kYEjzh!YWm|'7 p |"mWӮnxLT{,wU; 8䨪{}]d ʊf;؄\HArʙ@d.I,$E snzLs]`mB++[ۼ,zׅ.P6ʀFj_U7=\Hjtlq ] wNqA%rE*5vё, Fjx=z^L5.1O$qf~ E?ba?[C֞ƃݫ\U D? endstream endobj 3985 0 obj 490 endobj 3986 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3984 0 R >> endobj 3987 0 obj << /Length 3988 0 R /Filter /FlateDecode >> stream xUn0+%Ṟ@]mQ6YT$Fv,:2La.HEa{;%DB#:e~q_ ;fwܯ-= C8m D ._! qzDS"Ĩ ?h'XLêz!^3B?X&RF}%jziyMOF1Ibor[Ƙu)j0; ހn0O3dC wc?Ld]SFŭ%z9 l endstream endobj 3988 0 obj 570 endobj 3989 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3987 0 R >> endobj 3990 0 obj << /Length 3991 0 R /Filter /FlateDecode >> stream xUMo0+ X[HE!"X+@׆zh̛y`{]E* q=o1o၅w~ۑn y_^aY4nGxaȼe֒qʕRCUC!,Ӎ^ V&װ&4Q|[xR8# :QMb@1bͲ[Ƙm{T7Ճ.U*~Z3k1epDT K4oJV#dnVsRw}ʪMԙ܉gT d.> endobj 3993 0 obj << /Length 3994 0 R /Filter /FlateDecode >> stream xVMs0W19w=tL46,aﻲ( 0H^>[|ֹ|9Rpsx6ܢH7A{FY}:'ؚH7ƒUXY?њ݇պs~PX_֧[XZ'=qL=lEaϫ;e"0We6\GX|.wok32 FKj c_((CipiƘjTӲUmi&jEQ:.!q FE~Q wsXg 5S,]&A! 釭kQVRO{vFqШM$k"uk{|xωcR Ba/b=?k0R^(}幙?DQ bxm&qH|#rHE-^*^QqLZk0m=\kpŦv5[oy?"-뼑&)r,We?]}L$vp7<̨?QC80hJh][fPs,iuDkގi$Fa ^!L>A9bB5%K` gز`97N7玤[#}Q;jF-) $Y7 @522_n8TEe} |#~ sh.x>b3M-s> endobj 3996 0 obj << /Length 3997 0 R /Filter /FlateDecode >> stream xUMo@+esTW!e(⬊1Q; [ci߼ǀsm,a\1ܲ[_ߑ7[[%!<m8 DC冰 &I!)1BA̤0' Y[??0qY]nӕ$T>A#.`OJ} kt ijch& yٖs{}]d +7hZŠ\"r*#1ij= ['1Lfȝ-j6ڦ+K_) yEQ=mKQn*WuT3PQؘH-i1Q.$SR 3͟^E,5DCtu|ȷ!7,} yzxr^;#5b-V/+R/B,QA[XpKjA9WaҢWb,ԧMd~@5p7`MK=# k%]֤ endstream endobj 3997 0 obj 530 endobj 3998 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3996 0 R >> endobj 3999 0 obj << /Length 4000 0 R /Filter /FlateDecode >> stream xUMo0+6J{ڪIPSL߯ !r6D،752F@R`D|#[s]c qv3f5᮳^a= ѺS! FCps꽮^af ⍂(.D qF#hk4/QKl()6NbA/X%Tj5SD ØXSxh[D-s1]| If9]*S]t3G%ї !}:[~4!G d-J(CS;YOqMK$fCZ"r ,6M WFx:LRPKa)H0Z~Z-|p3_VVו~6Ejۍ4Y6@龟er o<J]6pOڨ1(Жo6.1dN_){oŮt (^gu󂙾BC`dUk endstream endobj 4000 0 obj 586 endobj 4001 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3999 0 R >> endobj 4002 0 obj << /Length 4003 0 R /Filter /FlateDecode >> stream xVMo0+=aJ{T%ڪrIӨ~m!mCőCkf ʜ@@&@\D=cQw튴Z}H"Rjx Iުr:A RVRSIL<ӁreHaH,ɗ_j(qMr=k‚凾1WĖۦ\NbY%yxѷ/Ro҃b{`}> )`p <2b“SGg[\U{- endstream endobj 4003 0 obj 741 endobj 4004 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4002 0 R >> endobj 4005 0 obj << /Length 4006 0 R /Filter /FlateDecode >> stream xTn0+. r`XhiEBeIz!:6 Ssv}& =W~QvG S!0Iy+;n;k~ ܐ&F↬'Ou6'="V0(=X4\cM7!;۾_XeM[(6_ %?,uw>S_F}ji}ZMF H+cV@bG{}] Mˊ6qc{wf$ D2Y}E E#yߜ)A.nm٢Q[V۬,Ok3aP}{QVM֌T3(mLuO{IqA%r}qbN\jWʕGGڕs71m^)4^VBsB{ajb_BRlZ{:ąa?AwWy COnx`W endstream endobj 4006 0 obj 487 endobj 4007 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4005 0 R >> endobj 4008 0 obj << /Length 4009 0 R /Filter /FlateDecode >> stream xVMs0+J;:tdii&Ajɿ `[Ģbb@Z9Ĺz19ީ0p-v`~ԬȚsڍv-CJ}ШZiMRUZIr 3RP*jcyJS'9wwK3) &$41U)HKUt&g`lOyF |/TY˺gAzGx+ߢL&܋HDiZjȣ,s‘HJ\yVԆLF#nL[YʛFuˏkO׃F.> O q\RM3 (3$ zDe2?2Ma%綎+bpjBc2E bE5#hYz>ʼMU 6#_{| p:LƛJ4Ogʱzc"]ḻ6Bv */êY\l-`fS6z'ö8١?Éo XU5_:?q endstream endobj 4009 0 obj 710 endobj 4010 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4008 0 R >> endobj 4011 0 obj << /Length 4012 0 R /Filter /FlateDecode >> stream xUKo0+ {\f=TvmUQ$I!G!mCCga!)Dv74uA1Imۘp_'s0ruc.] \;Q Kņa|oK`QK|)RR>bT {Uq`]eSV}3$bL Tki5TPX,T3GEl6/б+p3A6SD ØeycBD֒#)|)=7tJ(CS3YOeS] 󍸅QD ڨ,L)KG`qav2.$Oäh>H۞+na栕F^uwC&֧,z>NJERXblօ]T$F;՛Otl !tDHn.ڇŬѠJ]2pwVl ~^0?B{n endstream endobj 4012 0 obj 585 endobj 4013 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4011 0 R >> endobj 4014 0 obj << /Length 4015 0 R /Filter /FlateDecode >> stream xUMo@+/X6Ju"YF!"lduʿ1oME}vތ/JsX=@q9$B3%.dOwk2mȮݤv(-vjnUjJ{.yEr& ecЀ2 gRɌG&̱\2FD2d08W]B8F KkNDs_p6eZ[W=1yqEQEwE5qg[Wjz-VǤDROhJsPFݾ4D1vVi S¡Nú3w\oal6FVԬ_MQk8I3Wl}#]7uwN.n1\5cU] endstream endobj 4015 0 obj 556 endobj 4016 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4014 0 R >> endobj 4017 0 obj << /Length 4018 0 R /Filter /FlateDecode >> stream xVK6W̱,Ez" EtFzH@56n_ߡ*zIb87̓||qC2ȏVC "Aq݀7Vgڍv{ۓ(-PgQサ Sq~݀Oa[0MSBB>gV8[۬2ܚaf;r@';æ=s=ФQ=a^xF\6.˖yΏ;Lpu59] 6@@*Ǘ0?<}F"+ HACېQ4+kRI18{.Y{o]NTbe%/V7<~?zĀ@f2k%cv> endobj 4020 0 obj << /Length 4021 0 R /Filter /FlateDecode >> stream xVMs0W1 ,Ρ~i0!d[ME$9L}W0`nmAҎIW/߁kXJ!{k[Ba A!k4hp7XM[Ȧ3?^=5G^n{7Dȇʍe} ! 06(MSA4u 9ܝ] TF0Jg0šO-f_R'#?毴t&2n v© )!$\sI\^Sc735KR BB\)?P;j,Nb 8W1d-BFU~_f=c&/hÈDZcվZi6i,IӘ&5 eFaA8A3f#ѝ CyiBêL!㴅7B (q;̀B?tSsa,F^r&H9LBpTX~:P-߸ #UٛQTBx!h̔[W e.3nY31 p-`ᄆm=!2u@(N7.$LUe?1ӻ#>VmHCξ i} Ðb")^kH"p(c8[DٌxbQ7CZ}۱ ކH]癐ox< ۾QsqlȺZyvd+[+fãO̪8 endstream endobj 4021 0 obj 791 endobj 4022 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4020 0 R >> endobj 4023 0 obj << /Length 4024 0 R /Filter /FlateDecode >> stream xVMS0W,[~СJ(8X2b'`;1әN!oۧH![mb` /}@/t}mBt=AP\^at&xwMq|8Q̟e \(\.N{4 T鍆IZZL_&CYg+}M8~$YY*1*N{i*1(aQY><,0#Y.sweEBJj"h2=ODxPL?9}@2s. ˋ@ ޭ zHtW > endobj 4026 0 obj << /Length 4027 0 R /Filter /FlateDecode >> stream xUMs0+ rLifiICALpN&+0 ]=ו搮ǝ S #`4߯_Qt?v&G` fh9}WQXY"--Rk%Dpk1sUYQ7U, ,3|$q;Kˈ_VKjRP(;..UhԔRѦ~k;ӔIUg2 gRLF E"̥\r 79eal-aa,8S?zY=^5%QjVW=T%*:qO|qA$Fܚ-yz(uhAy,cfEA:2-_ j_'ڙ)=+*;7s`|k?dmpIYҿYb3$YV{F\@I!rSViUNS/l>108ƍӅ5" (D,/?v4V(qXIjdE}gn(ġZooƠw]0۶FI|Ұ#75 endstream endobj 4027 0 obj 633 endobj 4028 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4026 0 R >> endobj 4029 0 obj << /Length 4030 0 R /Filter /FlateDecode >> stream xTn0+bA=0,4(T:#)MmyKNM,ä87osmd8 V/^?N_fߣ2B:%<( 'x+n:>bl+-O#L ?{pcۧ #0i:[Ucl>H} jxXM7BI4خXtThQ5Z/{uUFۂ-r?®ZWA#«`KDN1o;SL&~z3e ծC^zWC賓%Fy\V59Q3:5&i0zIs L7JopYR3huUԞL#\9uEڅyeAuȭnO)jb=Q13-\.n浮[WZUMCt.l5Ep=C #szko‘}cUne endstream endobj 4030 0 obj 528 endobj 4031 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4029 0 R >> endobj 4032 0 obj << /Length 4033 0 R /Filter /FlateDecode >> stream xVn0+%Q̱@SbӖ[TDAKKcIz(X)8;1, Js6@qq 0IxEw~h~{Owc~EeD[t{9cxt;$B?Tmїit~0]e)\jÇt \+oli`Ux?ӣm}MFlt}& )QhbTAM)FUmEpogdeӦj[ 9LPʰ8,d$Ab~;Uw~<2.'0[`+Ssgz,rz׊&$ TB5'\vP=DT넧 h1^)7jcHeR$E+t-9fL |n .^bpm / AiAPq,hjUt (P>O8Bg.N 4gA|najX;qʸ¯3Di{ -jSa趢\BXܗu;*[{3yᶋ^7zUT-+'~G%!Ja$1ڞO8ꝌW u QΪ]# endstream endobj 4033 0 obj 646 endobj 4034 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4032 0 R >> endobj 4035 0 obj << /Length 4036 0 R /Filter /FlateDecode >> stream xUMs0+ rkM=d'=ę"a]`Ŭ1b@9 U("78& ܢvACX ;;ݮn_[TG>Ewh]=u΢A"MF>z?/c` ,%K5upg˲20 ̳3ޝKqW`~ɯ4ȈWդ6Q8% %' *4jJ8Z7 G5'vmꖛd$' Jq^$֍1{Xp9UijYU> endobj 4038 0 obj << /Length 4039 0 R /Filter /FlateDecode >> stream xVQo0~W*m>Lu4Um]QbTb.~gIC}[}w0x!E$xbXDE?S꟨꧟i;6m's#x s-q\uB('0 b'-KI#! %!aw=ise%a$LΞ{ex ^_/#߄Եt_MI n S`= Mp[yv Kp#YMQ '2h,2B}jҤΓ.!"ʁ]|n+[;P|F/J(MO)F:$qeIK[ږ*zI*DӆԧWCQw+Vr]zeQB+>2I(&}$7N~1Pɔ-չ] 7ao?!͌CDk dRALJ,_fpaUvgpVVi ЁGw? A,iJ7XܽQdrRY?;vd 7/-ȿ2_=w|4&ho;67 2m ܝ⧪9Ivٳ^%wV0E0r厍1Ţtۿ"}s-S"~g`^; fZNb> endobj 4041 0 obj << /Length 4042 0 R /Filter /FlateDecode >> stream xVKS0Wf*Oq#@`c+ăcI&ÿʏ؉{+$hgۧ~v\=Kkӹ1}nQ_PaF펢Vڪh/S:~87wPizܹ8B?o/ ,bKsCLht ~ >#(u1ihiv GB٘斱hp1CZ4d XW0~cl,lDahRV:=H bCOvG|4IQe;6 ciZa€\Bh\+rv4<z)XLe1mpz>p?/!2[ۨ[IpClMq>l`j-2XJH{(&N7FG#==a{qRY%czǴ?# =&tLŋN{.@98˱p7#lVĤ[N;dVJ Nvc*oƺk1Jmw4UOs۴͘'}VjMy{Jv`>~vyCv~,+{cv❳jdB endstream endobj 4042 0 obj 727 endobj 4043 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4041 0 R >> endobj 4044 0 obj << /Length 4045 0 R /Filter /FlateDecode >> stream xUMS0W=ö,C 4@82xVRYE1;1=LY}F (~"&]H"4$9h/ϴ_W3j" _3ў]Yt2(\FAB^=I2X)cȈ87pH;^A0s-.5jgߟA-o$.c 6dK'$WGpJ$spDF\Kb~uˠ bN827<, _%~~q.t G3(n K@|^/06FRFdz,mm{"R)hwS܌ Sob(~F17%I3|, -[<֔f1MnͲ[m- ij.akLP[ȭ|d*$4TDo]yqYŽUmAe^86i_wxX-z Fq PGq Qgg; z@x3(:1_&Ebvn l+:?Y.bhhԽ^0,r1L㯬>H endstream endobj 4045 0 obj 660 endobj 4046 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4044 0 R >> endobj 4047 0 obj << /Length 4048 0 R /Filter /FlateDecode >> stream xUMs0+ʱӺ2uIqC0Hn}Wm 驉XZoӮc@qTH"<7 FÂvd;=^ᛗ{>zOh]=W;g޴}SQX{$Fa:I"s_)}}87xu}a~$4k xkui`0?K\0Vՙ2y5xJDb­R*%3[]3 gR|FY$N. dI꼄voRCR]B ˴ 'wDaD5O^lmjP5򉒑R!j9ƈħE!vȋ}bKFmdbR Sq4qnWڀIS*[m~i=ݎp@\m-+RcuU( SlXz( W3RU=vV/,xpPfȆa]NP5I(`U؉ k~|54Cx>uJݼ]mFz\A𬢳rq0 8X endstream endobj 4048 0 obj 631 endobj 4049 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4047 0 R >> endobj 4050 0 obj << /Length 4051 0 R /Filter /FlateDecode >> stream xUr0w,BYvL=fEP#l 'ӿd鮉Xs}qsV ,Hሆ,-pnGy}~C 0|,Y<눋`s+0IaԒqʥCC!̓j^kfE`:]+HҝQ}k)6+С$1Q (F¶yVaA1fmv {BZm3n1LoT(Pmq o`cI)<* U5 J_`.lۨI/(\:7S;S*G 9"2'G>K(CS3o{ZQ֊u (Oȁ­rvqHx6ie(ժq {2k iYsd|i/ 2:5ΨÞ [fRuHitZ\ipzUӒ,p3-8$o*s/HT7'+k8;,X7'v\Ąklf} ?LAv\?#1ëg]ݡ endstream endobj 4051 0 obj 590 endobj 4052 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4050 0 R >> endobj 4053 0 obj << /Length 4054 0 R /Filter /FlateDecode >> stream xVMs0+ʱ3u=d1La3 L}%x,} ^<Xwfjt1 C$:lQt E; d?{|TxlBZ1> XZ!BCC!̓l^B¢d-!NvJ6 ާL8# Jrzi~&b@1bS 1jҧ+T2J[rQ0&ZD 9>@/)`|*<*rY6`I$V%(YurfH+%N 8Fapvv*W=T><"%!S}g6&0}!ReVU1M _鳩r!iR# t۩S{ d}wܗoi-2+8(B#T^MO;$,ol_7WWRע!) 8^ R^՗!ʾ|Zck)kVfpj6IKjIiC0z < R3oZh6n;l.'v.~b/27?쌃Ms(:{3 WpC endstream endobj 4054 0 obj 645 endobj 4055 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4053 0 R >> endobj 4056 0 obj << /Length 4057 0 R /Filter /FlateDecode >> stream xVKS0Wf*ˊes#@`V2BUs+$H^viՋkD ]x/AM(6Bs qԍ(֣}mkv+= ?fhʫw ~(mM<:z.YM;ڸ*FkCcJiѨ꯼,g`7%ZB>fD4pFPtN@M_P83&1"-MJ#*H~_|#( Щ#j[*-4> EI,8YT4rp jۤXʝows&4k]k@۲fP$J/$_T{[;'Xt̔B&(\%pLCW1p?!28YjAט L;:)LjpXٲ`cnPnuq6vy> endobj 4059 0 obj << /Length 4060 0 R /Filter /FlateDecode >> stream xUMs0+ʱ餇LR3!dTc& 7`ܚ%VRqȞ5@rbQ ,$٢n׻x-RU& Exw r We@ʙi~:G?=!.!jy^ܳwYcUmMߤQH'5Eobu_m`#3ǛFI2hqoUH)Y endstream endobj 4060 0 obj 649 endobj 4061 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4059 0 R >> endobj 4062 0 obj << /Length 4063 0 R /Filter /FlateDecode >> stream xVێ6}WctY^tC-5҇4X2KL*$doIläF<<3!?F (~oBmq18ĒXLxE 74hѧ}:''ߣкA{/Q?&7 ѯU}$qQ<^VcV5壄U:ݫ3mu`; 4_F\;Ϧ3)0N¡ J4jYׯuv+b8Ԏs9LP03@?qDLDKij)<%QR{p{]=Y5{aɽ''ixD>Qi%ڴNZ\IE]`qAbM,)ޕNXsN⌤9|ҁ(T{uᘸo(7+SOL)0\:x[jWK k*,SlG'2zu 3A^D M]cX}R$Zm2 . V?~ :ު.k[c܀8D흗ei" tkMSЩ/׋\ be>8zYV; %4|tsa]AQC7QpǶՃ?WPtu#%O󼑮K,xi$ .&gi<"F"q[ 1+UfUu]pod%kB'COΜFx D$t1P·TKg$C J-18w&r8铘.h"6:[5evcv\,f(Ϯi^\ ~cU?c endstream endobj 4063 0 obj 835 endobj 4064 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4062 0 R >> endobj 4065 0 obj << /Length 4066 0 R /Filter /FlateDecode >> stream xVKs0W챝B=pLK2@j+DS L;7 DZ߷oW_WI20cEhnQkE݈}ا]ۚhY7(|@k^K`"ۅzOaK$dae,,s5|"V'R* X\g(gYH]1%jJc/TKP,1;6Z=jivsҊBUUa !#(1h',JIJ1I 9g,)|!/,ha62;X+; FúA mm@d]Zf }),U/e1zYrk՛ dUȜ7R0#K6)AOnfZn:pE35vD]p]}OM?7xݓB QkqZh}0PyT=M?m%9:/ ĉԝFw_8G7wA|JңRѳN× endstream endobj 4066 0 obj 777 endobj 4067 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4065 0 R >> endobj 4068 0 obj << /Length 4069 0 R /Filter /FlateDecode >> stream xVmo0_q7 _8664&F14EtII񉭭|?=/C*ɍ1D)bO vI݊uNg#5|2[w.Q>[QlpFޫ0 ,$>R܇܇Ctδp5m^W0ښ󎣍 Ɵk0hQ8%C,\*Q(QQ u2_r[V_q!p&(e@J|4bs9)!Y:|6ͮIcMG|CtY p]&5Tmq򉒡RЄħg|(+}ύcrKC2<9&쵆ˑMv@ иGG[ƙY6O4b/]^CN?@\*4Z&1*I12z 8Eټ?BqyebI_Q䗋 ɫ/0|6<:8| DgGq=re]6bh]n䈳%t3~bpfø4iM/aGO ;M] ^oT1"7XcgZ$|ʦ+. 19bktQ9cMUyi1\W,̝fQll;Dtqcw_BU@5*hiab]IN^G-Е~,qZ-6 %SVee9;Nlۥyi#}2DYb(m:Qtw0JN7PlgC^u߿q endstream endobj 4069 0 obj 867 endobj 4070 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4068 0 R >> endobj 4071 0 obj << /Length 4072 0 R /Filter /FlateDecode >> stream xTM0W̱=;HjJ=lkni}!qG~yᗄq'7 l4*Kܱøjwc?w?kKES%q=qL7*X$&)Pby -͉`B)3=hgJMP[{s1){c§XF,4VlC80$2iV@|mSvd^Nwi`QHlPE0$rL<'0Eh3:8 DsƮeLﲎxp= DeY ΝSJ%s2w[&)D +woeK,{cTH塸ers=I])2#:'zS[N Klk㠭zXځ=?y0ucu1;ڍ P Ǐ(?4y=g_2R(|pyf]#_9q endstream endobj 4072 0 obj 522 endobj 4073 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4071 0 R >> endobj 4074 0 obj << /Length 4075 0 R /Filter /FlateDecode >> stream xUMs0+ʱ3MgzLƞd: )d#x,}ZV+?pA!_F;S$)_QoW T-j" GO`퉳n~WaXDчyyd(Ɛ!FP/Vu]+ٶ se#̿D'3BYwBrj[`w%,;P`ΣouSrmp b(a:q@8E1R>$)!Z,@5t)|k OnM}b̻@3'@p464mgS+ ,fLiP*:H:&9J3WʖTrqv{]V+e+gK+ fv*èV)pႂRB'{H-!?0.dfo5+Ye\yUcnRp9dQuxҴ@Im=чx #}fC :hࣳ9rO!e'h*s]A  endstream endobj 4075 0 obj 624 endobj 4076 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4074 0 R >> endobj 4077 0 obj << /Length 4078 0 R /Filter /FlateDecode >> stream xVn0+ EZ)CF{(,)ߡU[zjb٤<ӛyr1x].ygcrM`>47(:^S7"G}ߘf ̣{xDk zwr~((/3YrE羔pmN׼ &0yVf.a6; \0k"ui:ϳ)pJBLSphFI);277YRdYjeuL~>' JF1 ΉpR"vs6@v .d+P/JzIUyY$FgvpZ`-BJ p OP٣ #)5$c SO|E(&S*[xp}4O/jl8]Ze1v FZSV UZ08K]C@_'Y(<NT˥*8bM-L1JŹhM*Knjm?xx08M pH8A?rl7@j*3r̴+hD-\ټ)ɇ88g| &MaqV 0YeQldնCtxG+ueOmtW Csf:$:;x<_ Io endstream endobj 4078 0 obj 711 endobj 4079 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4077 0 R >> endobj 4080 0 obj << /Length 4081 0 R /Filter /FlateDecode >> stream xVr6}W[Ņ%o,n]3QC)E2$e B bD҈{pzxxk}(x {j#c5hPMԈmSe[E3Z3b#~[?ߍRvs9 ԇ| .~Nfu^FkD]]~od~8KOgdٍO5780b{(1,1 =GE/Żw٪JQ-榇lٌrB(qv33ۡ0>3,gӻT|%4.eJޥQ +y#ju)ZTB{JՇ$H mqu]ŕ^du=x~נ>bRm0qcěStJv}ji<gW-.FӞofW\鹉0.M6hbpar3O 0QЊՄ>MǿNƿOnڛ=n>Nn ikn\IQׁ5-}aHh\YnV#K迯2*:7P*?=>vJ&2:j f,jԗ, JL|ڰy[NJ,˿&]Gu⯤ Ln VW DƑZ.EDNQh)qñjR7j N"Q A]AJY[CͰ.@ |YPDe S2VF#uXEW.L_fq ?pϵ)W=NU\ʢy=kH78H}0fS~Ka=gь4dڰ4{5C57оInt¼a|ٜ4"Hn'N>*eTp?L>) C*h%mٗC5)l_0kzOA(j Fg̪u= endstream endobj 4081 0 obj 967 endobj 4082 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4080 0 R >> endobj 4083 0 obj << /Length 4084 0 R /Filter /FlateDecode >> stream xUn0+%Q1@]"ѶPBI%cIzjb0pճG-BRH  ,8XxX,{y{<=JW}xrqGjovm}^@0Dۓ$Dr)%"FP tJU+4w 61W}Dg3B?Xv].F~j>OhQ (FFYQaA1fGM5)J3SM91)aLl @WtH0fd5i1PmGǁ$w2M<1izV> O(v10j'S6s'`\| >  endstream endobj 4084 0 obj 564 endobj 4085 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4083 0 R >> endobj 4086 0 obj << /Length 4087 0 R /Filter /FlateDecode >> stream xUM0+=; {Ta(=lV+L@K5lWqHG[wÏ7<xܷvv0 ]@}v,ޢ]Qt؏~OyM 7}'(P!/y'kiH|K)!LڋAO}3,BtSuh8%s2bհDSbf€ZW]6 )vX3(G& tppCA)Ø5/([ijU*mXo3'(>MEʶO[XhF$AXwS[)ɛ*g<>"2`#M͸I'>2#.^QN5/HV:͵Pͣ|f kfPί2ޫځ}_.N}³y qh46FK:y곴gkoˮ PLuMz9i-BpG#}s3h[ǶJ_8'mGc M?I{}`.,R(ppR\<:U{@} endstream endobj 4087 0 obj 557 endobj 4088 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4086 0 R >> endobj 4089 0 obj << /Length 4090 0 R /Filter /FlateDecode >> stream xUn0slulC0qJ{b$nԿ1IC{6D1ym#_A^ZwQ>pJ{UjSRedU|1: 3R9Op2‚(d9C"b2NH +iU 6Wal$ CpʪntSH2 (JʐG4Lz*"> ('?Ubˈ,$CGʷWQf.v>iӴP'݀E Un-T9GvZ^(ќϺVyqu I4Vy%K6VӑG)6^ƨk*&`LqIeӤU"$n,v;,!;Ήy@'?Ԏ8Cb~GFItvȄ2z| l endstream endobj 4090 0 obj 584 endobj 4091 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4089 0 R >> endobj 4092 0 obj << /Length 4093 0 R /Filter /FlateDecode >> stream xVn0+Is,!@`=AX-n~}IˏX)8;ᘫDŽvץ0_'N!@RD3Qx?%3V/~CxI`ݻh<%}=p jmi:aZ%Ji*)Q?kx#ҿYIX˅ii=L%_'3BYzQhS7m w{)]P`NNyu֦B~jnl/ψi)E0+%$ǭJbN$3JybI]+ncW.XF|PBPq<fܪ4f# ^Ӣ"FL(C)Z'^6X$(/ ac8tPVƀsY4UxUi``զcqRA29aYfF ]-4|d%ۅ]z!"> endobj 4095 0 obj << /Length 4096 0 R /Filter /FlateDecode >> stream xVn0+/b=l$T:B ]JܚX)8;5JsX #l^UL* w֋1Nch\K^TiDmV0yc?9ba\S U9;`a] `ao|=)5B%۰: <1YCC|x^%2Kն~</̞o( yr*l/Tz![.qλ} _6;)>dJ;ly,n(1;I48o10Jғ7E]?I7 endstream endobj 4096 0 obj 633 endobj 4097 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4095 0 R >> endobj 4098 0 obj << /Length 4099 0 R /Filter /FlateDecode >> stream xVMo0+qJ=Dv(Ea1k;ܚ,+l~f0x\F*ua $C,Gw,o?_S?lG WPOfGtYpK~(,mw3pLZv9^EYOKBc^$%qUf+Sj"*$J&J-yaiMٷ [- :f!\I!J5mF}҉?Sv~\^(Iξ$e?޹Ux endstream endobj 4099 0 obj 647 endobj 4100 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4098 0 R >> endobj 4101 0 obj << /Length 4102 0 R /Filter /FlateDecode >> stream xV]o0}Wܷlau*U(MB6bt܏cGx }pw !@},0 扲{5ُ=DT<;t{¹!*6kr%3?cCz,6=[*J ]d-`4Jhu~ηQe,.>Sc#?v^9vP0rbj^\^V\N])/D|2B13@?šM^ӜOLbW PB> F֐.組,D9x&gaԪ'nuRՍ*ԞOṇ8Yԓ&󞓥s}SLV 9>w}I'D)ҲM5l*-L(osHL ($2(EsI1\h7 au7B* M"5 r?0V.MG8tݾo4}k7ÞSzNoylӋ1xD3j!?)hqaiYZ7:k5\yqL*嬦G㮣zcn`1:5/7"%1c^շof^x3E3 (~!Oˇ#o8wxܵf5?F̼Gw% `ty`NĸPFGg0Nɣ;W|GS endstream endobj 4102 0 obj 723 endobj 4103 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4101 0 R >> endobj 4104 0 obj << /Length 4105 0 R /Filter /FlateDecode >> stream xVMo@+~9Vj*)⨢b@vqβLzjb, {;TVUq|3ACx68_׬ 5d5yϟAzA͑Fy^*+8*º6P8ʇl9cIG1J>$1ۚN߮C%ٗƮ/TI endstream endobj 4105 0 obj 630 endobj 4106 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4104 0 R >> endobj 4107 0 obj << /Length 4108 0 R /Filter /FlateDecode >> stream xVˎ0wv1_`aCx) _t܅ӧ+gimaHOq'i8RJGJljeY`Ֆu(ªQmpF+|؈@n](;K/:(1QUc75UnT/τN% cK}QqT?TKXJT IV$Bl8.kX*a̔K}]-dygd}ߢrnɑ{Е ecO-wȫYĄ B;qzBtaZ2B tؓV]ZUk`hSiNIbg ٱ0s$6͗bn шM]$f}F7GqG#s̻i`ɐt7n#ݔ宺e'mktv_K?jskSYaժi/C:6p5f6j a #f!0zxeUm%X/ endstream endobj 4108 0 obj 613 endobj 4109 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4107 0 R >> endobj 4110 0 obj << /Length 4111 0 R /Filter /FlateDecode >> stream xVKo0+DjyCR]$X0h $j}ǰOz{jZoy|6x@{(=9 wiE ~>&u0 ~:Cs:-pwe| #0/bק~$ԇe4 'k)+3Ոta+yQ̣,>!S-#tw7 ŀ7B ИBئFh.du澊R:cK=FX\c(,X䑏J#p{3 z yRP E# J^m2LgOcL37 C]h>]7,L!$$.ף ;>|Hht(u҃^xvaBH%L˹EW@KFXsQjgI*^/ x4m۹Bz\. {[ MR,MGՙơaV1dચl}r 8邖NXm5M[x⃄h.I#S:Ya2d8Ffav.AFM9q;DZKܷЃs ȕec#iASƶӍ@ZP+VvؔT颲cP*CfؽX^JL#aMBo!0U߿Pź endstream endobj 4111 0 obj 751 endobj 4112 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4110 0 R >> endobj 4113 0 obj << /Length 4114 0 R /Filter /FlateDecode >> stream xV]o0}WUZ=>NZ'Rh{hI6Iِs|S@.WPZz#p̜F *F@0,WkIBiJCHPXlӝ wVYE`#`g}R#jY]œQ (FD,s+7cy77u DV L&RD Ø `ЯC"cFI8F/).pw;-^(t^AuقY>RUMT1cK0VK}.!Jy1M+H(C!JϬډ381!&=h[onaSn-@ZCS:VMǩ-?KjJ`36.̲RLu 5J%U'۞ɣö1Bwjw1 B> endobj 4116 0 obj << /Length 4117 0 R /Filter /FlateDecode >> stream xUM0++5zX) jUEP @꿯 !=u7D1zfLO4׍]bɀ0 v7h(Oq\Ǜ yٻ0hbpa֓@Mņ>Fއ!JҐ&RL@H8S ;=W/X兆MW5VC׭}>EgsX>!SF|%{i}MFq`HiS̫Ҁ ޣ~2m2EF9"5Y\?īBhqS7iKnV7t`^n!Ԗ8x,r]vc&̬:!A`ÒƛeUy;RLJB$7%M8׸FդB 4.M[4X"g ֜,.˜VP q-jMeeb.58N[l^X.CM2 y q4mm1+omƾ?Uwi/ϘqiK|̟Jw.XcŒS;@? L_GS ?L{y`.R(촕(/쪽0 endstream endobj 4117 0 obj 573 endobj 4118 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4116 0 R >> endobj 4119 0 obj << /Length 4120 0 R /Filter /FlateDecode >> stream xUMo@+/X6Ju"YF!"j$}gY&x3oJsX@q%$Gرh7 `{Km|NAl෗{~x&uą7B?Ul޷:Qғ,$K5pv4E lk`U6em"q'K|2eH[KjR-x4JDaKR*Ui|Ιe B?m1T򗜫>AL~To슷,_C YUf{ɛ.%a!>|QA`}QNgϋꎪGВhjБ6Li2.H9JPIE ^a$z}c yrOY975Y qTH{{3.Hؘeőn6VRǺko&eGVh 64ʸj 2,wXL'~rV0>c%?R9Efz砍\0O0e)R4zD} K endstream endobj 4120 0 obj 572 endobj 4121 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4119 0 R >> endobj 4122 0 obj << /Length 4123 0 R /Filter /FlateDecode >> stream xVn0+ KR9h  %P I'H䨷&a kgwvSD/S(mg!f@DS([\/ M»T[EKO% 퀳nPaXF_yu( &r0_Ҿz 7u#af[-3ҚO `J2{MbĜŎr[ rqըB^_ʔEVa(PDI1qEGCC8¾%y{J@9".?~YjtZB)ۂʷj5M-i$1FYy1X8fg4 ,c#ͣc jUօ@]ϪoJXH%Ns#tZ#E83^?MtX,FcvH/vlJbS{_+XKdUSpiWR+6ZM';ޫ- X脶PĎ鱡۪r`:ȓOgYc<4Zn43vZAqxFh_2o_(;ꟿw_ endstream endobj 4123 0 obj 684 endobj 4124 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4122 0 R >> endobj 4125 0 obj << /Length 4126 0 R /Filter /FlateDecode >> stream xT=o0+nlgj+u!@4pR׆&:6>?>邈CZcpp9<K~LgK4Em8=R7j4ӸߤJޕ6[ݩ3-\s%|5OyЁ_)&p!]/Qyx'p8u"QBV-3 7ԍ0,9haK2x%(PcɷnId}>ɧ(vzܛP%up'M;^_o:NxA~u`0ݝe0`8ˁT8N endstream endobj 4126 0 obj 408 endobj 4127 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4125 0 R >> endobj 4128 0 obj << /Length 4129 0 R /Filter /FlateDecode >> stream xUMo0 WQ%Ym4@Mibb;'vZ;gQ$_}cl8R!4p EpB[-jZCp- ^[%*7e}#,Z3XILz!2#,zߖ:%E_RatC x R)7hQ6Dt7Ye~`KDN5:CpnmեJs 9}!d[d!u4Bt0o vPLk81LPEjGਙ5$4-&;jV7vj\*#'6|w$L.<,QeH-_۟EP> K4f1N `\'<>qE ./8j{nꌆ!]f Q=M WLuqt<|'O}qoΦއ9 ?3vt'=ִv˅L!dp#'Q[յ#`vLxe5xf6Q|Vxdƹpdg8|39 endstream endobj 4129 0 obj 604 endobj 4130 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4128 0 R >> endobj 4131 0 obj << /Length 4132 0 R /Filter /FlateDecode >> stream xTMo0W̱=;ƹmJ{l@ʇVIJBma3/L{c%lvc5ː@݊_~8@8N7+ODhBxٰH|`˓DK冰e1#gGiÀң,D\I7%<^=MWۼ* IJ/VϯٻFgxo<( 96hQyI8=$o6:6 \ (y6 IKM'upN_IiN  9'. vߵPtimkh' ,Kj,N41ȵNmZV&oFB֐Ѵ|nxVWy(rwxB n!>EI \GgWϩ״UX^fUḑrbfEFCYz|{Gȣɽex_}};{ endstream endobj 4132 0 obj 469 endobj 4133 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4131 0 R >> endobj 4134 0 obj << /Type /Action /S /GoTo /D [3974 0 R /XYZ 72.0 720.0 null] >> endobj 4135 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 237.31 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4134 0 R /H /I >> endobj 4136 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4134 0 R /H /I >> endobj 4137 0 obj << /Type /Action /S /GoTo /D [3977 0 R /XYZ 72.0 720.0 null] >> endobj 4138 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 240.65 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4137 0 R /H /I >> endobj 4139 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4137 0 R /H /I >> endobj 4140 0 obj << /Type /Action /S /GoTo /D [3980 0 R /XYZ 72.0 720.0 null] >> endobj 4141 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 250.64 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4140 0 R /H /I >> endobj 4142 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4140 0 R /H /I >> endobj 4143 0 obj << /Type /Action /S /GoTo /D [3983 0 R /XYZ 72.0 720.0 null] >> endobj 4144 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 222.88 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4143 0 R /H /I >> endobj 4145 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4143 0 R /H /I >> endobj 4146 0 obj << /Type /Action /S /GoTo /D [3986 0 R /XYZ 72.0 720.0 null] >> endobj 4147 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 224.54 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4146 0 R /H /I >> endobj 4148 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4146 0 R /H /I >> endobj 4149 0 obj << /Type /Action /S /GoTo /D [3989 0 R /XYZ 72.0 720.0 null] >> endobj 4150 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 226.21 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4149 0 R /H /I >> endobj 4151 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4149 0 R /H /I >> endobj 4152 0 obj << /Type /Action /S /GoTo /D [3992 0 R /XYZ 72.0 720.0 null] >> endobj 4153 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 220.1 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4152 0 R /H /I >> endobj 4154 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4152 0 R /H /I >> endobj 4155 0 obj << /Type /Action /S /GoTo /D [3995 0 R /XYZ 72.0 720.0 null] >> endobj 4156 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 227.88 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4155 0 R /H /I >> endobj 4157 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4155 0 R /H /I >> endobj 4158 0 obj << /Type /Action /S /GoTo /D [3998 0 R /XYZ 72.0 720.0 null] >> endobj 4159 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 222.32 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4158 0 R /H /I >> endobj 4160 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4158 0 R /H /I >> endobj 4161 0 obj << /Type /Action /S /GoTo /D [4001 0 R /XYZ 72.0 720.0 null] >> endobj 4162 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 220.09 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4161 0 R /H /I >> endobj 4163 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4161 0 R /H /I >> endobj 4164 0 obj << /Type /Action /S /GoTo /D [4004 0 R /XYZ 72.0 720.0 null] >> endobj 4165 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 238.42 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4164 0 R /H /I >> endobj 4166 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4164 0 R /H /I >> endobj 4167 0 obj << /Type /Action /S /GoTo /D [4007 0 R /XYZ 72.0 720.0 null] >> endobj 4168 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 230.64 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4167 0 R /H /I >> endobj 4169 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4167 0 R /H /I >> endobj 4170 0 obj << /Type /Action /S /GoTo /D [4010 0 R /XYZ 72.0 720.0 null] >> endobj 4171 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 234.54 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4170 0 R /H /I >> endobj 4172 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4170 0 R /H /I >> endobj 4173 0 obj << /Type /Action /S /GoTo /D [4013 0 R /XYZ 72.0 720.0 null] >> endobj 4174 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 223.43 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4173 0 R /H /I >> endobj 4175 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4173 0 R /H /I >> endobj 4176 0 obj << /Type /Action /S /GoTo /D [4016 0 R /XYZ 72.0 720.0 null] >> endobj 4177 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 241.76 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4176 0 R /H /I >> endobj 4178 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4176 0 R /H /I >> endobj 4179 0 obj << /Type /Action /S /GoTo /D [4019 0 R /XYZ 72.0 720.0 null] >> endobj 4180 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 237.88 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4179 0 R /H /I >> endobj 4181 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4179 0 R /H /I >> endobj 4182 0 obj << /Type /Action /S /GoTo /D [4022 0 R /XYZ 72.0 720.0 null] >> endobj 4183 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 262.32 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4182 0 R /H /I >> endobj 4184 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4182 0 R /H /I >> endobj 4185 0 obj << /Type /Action /S /GoTo /D [4025 0 R /XYZ 72.0 720.0 null] >> endobj 4186 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 263.99 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4185 0 R /H /I >> endobj 4187 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4185 0 R /H /I >> endobj 4188 0 obj << /Type /Action /S /GoTo /D [4028 0 R /XYZ 72.0 720.0 null] >> endobj 4189 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 231.19 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4188 0 R /H /I >> endobj 4190 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4188 0 R /H /I >> endobj 4191 0 obj << /Type /Action /S /GoTo /D [4031 0 R /XYZ 72.0 720.0 null] >> endobj 4192 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 277.86 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4191 0 R /H /I >> endobj 4193 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4191 0 R /H /I >> endobj 4194 0 obj << /Type /Action /S /GoTo /D [4034 0 R /XYZ 72.0 720.0 null] >> endobj 4195 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 235.1 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4194 0 R /H /I >> endobj 4196 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4194 0 R /H /I >> endobj 4197 0 obj << /Type /Action /S /GoTo /D [4037 0 R /XYZ 72.0 720.0 null] >> endobj 4198 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 226.76 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4197 0 R /H /I >> endobj 4199 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4197 0 R /H /I >> endobj 4200 0 obj << /Type /Action /S /GoTo /D [4040 0 R /XYZ 72.0 720.0 null] >> endobj 4201 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 224.53 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4200 0 R /H /I >> endobj 4202 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4200 0 R /H /I >> endobj 4203 0 obj << /Type /Action /S /GoTo /D [4043 0 R /XYZ 72.0 720.0 null] >> endobj 4204 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 248.97 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4203 0 R /H /I >> endobj 4205 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 433.5 539.998 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4203 0 R /H /I >> endobj 4206 0 obj << /Type /Action /S /GoTo /D [4046 0 R /XYZ 72.0 720.0 null] >> endobj 4207 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 250.64 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4206 0 R /H /I >> endobj 4208 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4206 0 R /H /I >> endobj 4209 0 obj << /Type /Action /S /GoTo /D [4049 0 R /XYZ 72.0 720.0 null] >> endobj 4210 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 235.08 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4209 0 R /H /I >> endobj 4211 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4209 0 R /H /I >> endobj 4212 0 obj << /Type /Action /S /GoTo /D [4052 0 R /XYZ 72.0 720.0 null] >> endobj 4213 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 237.31 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4212 0 R /H /I >> endobj 4214 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4212 0 R /H /I >> endobj 4215 0 obj << /Type /Action /S /GoTo /D [4055 0 R /XYZ 72.0 720.0 null] >> endobj 4216 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 236.75 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4215 0 R /H /I >> endobj 4217 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4215 0 R /H /I >> endobj 4218 0 obj << /Type /Action /S /GoTo /D [4058 0 R /XYZ 72.0 720.0 null] >> endobj 4219 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 261.19 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4218 0 R /H /I >> endobj 4220 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 373.5 539.998 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4218 0 R /H /I >> endobj 4221 0 obj << /Type /Action /S /GoTo /D [4061 0 R /XYZ 72.0 720.0 null] >> endobj 4222 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 262.86 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4221 0 R /H /I >> endobj 4223 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4221 0 R /H /I >> endobj 4224 0 obj << /Type /Action /S /GoTo /D [4064 0 R /XYZ 72.0 720.0 null] >> endobj 4225 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 227.87 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4224 0 R /H /I >> endobj 4226 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4224 0 R /H /I >> endobj 4227 0 obj << /Type /Action /S /GoTo /D [4067 0 R /XYZ 72.0 720.0 null] >> endobj 4228 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 252.31 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4227 0 R /H /I >> endobj 4229 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4227 0 R /H /I >> endobj 4230 0 obj << /Type /Action /S /GoTo /D [4070 0 R /XYZ 72.0 720.0 null] >> endobj 4231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 253.98 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4230 0 R /H /I >> endobj 4232 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4230 0 R /H /I >> endobj 4233 0 obj << /Type /Action /S /GoTo /D [4073 0 R /XYZ 72.0 720.0 null] >> endobj 4234 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 212.6 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4233 0 R /H /I >> endobj 4235 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4233 0 R /H /I >> endobj 4236 0 obj << /Type /Action /S /GoTo /D [4076 0 R /XYZ 72.0 720.0 null] >> endobj 4237 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 222.61 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4236 0 R /H /I >> endobj 4238 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4236 0 R /H /I >> endobj 4239 0 obj << /Type /Action /S /GoTo /D [4079 0 R /XYZ 72.0 720.0 null] >> endobj 4240 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 215.92 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4239 0 R /H /I >> endobj 4241 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4239 0 R /H /I >> endobj 4242 0 obj << /Type /Action /S /GoTo /D [4082 0 R /XYZ 72.0 720.0 null] >> endobj 4243 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 225.92 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4242 0 R /H /I >> endobj 4244 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4242 0 R /H /I >> endobj 4245 0 obj << /Type /Action /S /GoTo /D [4085 0 R /XYZ 72.0 720.0 null] >> endobj 4246 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 225.38 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4245 0 R /H /I >> endobj 4247 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4245 0 R /H /I >> endobj 4248 0 obj << /Type /Action /S /GoTo /D [4088 0 R /XYZ 72.0 720.0 null] >> endobj 4249 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 219.83 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4248 0 R /H /I >> endobj 4250 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4248 0 R /H /I >> endobj 4251 0 obj << /Type /Action /S /GoTo /D [4091 0 R /XYZ 72.0 720.0 null] >> endobj 4252 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 211.49 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4251 0 R /H /I >> endobj 4253 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4251 0 R /H /I >> endobj 4254 0 obj << /Type /Action /S /GoTo /D [4094 0 R /XYZ 72.0 720.0 null] >> endobj 4255 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 242.88 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4254 0 R /H /I >> endobj 4256 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4254 0 R /H /I >> endobj 4257 0 obj << /Type /Action /S /GoTo /D [4097 0 R /XYZ 72.0 720.0 null] >> endobj 4258 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 236.19 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4257 0 R /H /I >> endobj 4259 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4257 0 R /H /I >> endobj 4260 0 obj << /Type /Action /S /GoTo /D [4100 0 R /XYZ 72.0 720.0 null] >> endobj 4261 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 240.1 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4260 0 R /H /I >> endobj 4262 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4260 0 R /H /I >> endobj 4263 0 obj << /Type /Action /S /GoTo /D [4103 0 R /XYZ 72.0 720.0 null] >> endobj 4264 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 229.53 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4263 0 R /H /I >> endobj 4265 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4263 0 R /H /I >> endobj 4266 0 obj << /Type /Action /S /GoTo /D [4106 0 R /XYZ 72.0 720.0 null] >> endobj 4267 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 242.31 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4266 0 R /H /I >> endobj 4268 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4266 0 R /H /I >> endobj 4269 0 obj << /Type /Action /S /GoTo /D [4109 0 R /XYZ 72.0 720.0 null] >> endobj 4270 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 241.75 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4269 0 R /H /I >> endobj 4271 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4269 0 R /H /I >> endobj 4272 0 obj << /Type /Action /S /GoTo /D [4112 0 R /XYZ 72.0 720.0 null] >> endobj 4273 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 232.87 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4272 0 R /H /I >> endobj 4274 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4272 0 R /H /I >> endobj 4275 0 obj << /Type /Action /S /GoTo /D [4115 0 R /XYZ 72.0 720.0 null] >> endobj 4276 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 209.26 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4275 0 R /H /I >> endobj 4277 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4275 0 R /H /I >> endobj 4278 0 obj << /Type /Action /S /GoTo /D [4118 0 R /XYZ 72.0 720.0 null] >> endobj 4279 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 221.48 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4278 0 R /H /I >> endobj 4280 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4278 0 R /H /I >> endobj 4281 0 obj << /Type /Action /S /GoTo /D [4121 0 R /XYZ 72.0 720.0 null] >> endobj 4282 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 217.61 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4281 0 R /H /I >> endobj 4283 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4281 0 R /H /I >> endobj 4284 0 obj << /Type /Action /S /GoTo /D [4124 0 R /XYZ 72.0 720.0 null] >> endobj 4285 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 212.6 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4284 0 R /H /I >> endobj 4286 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4284 0 R /H /I >> endobj 4287 0 obj << /Type /Action /S /GoTo /D [4127 0 R /XYZ 72.0 720.0 null] >> endobj 4288 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 97.5 183.292 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4287 0 R /H /I >> endobj 4289 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 97.5 539.998 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4287 0 R /H /I >> endobj 4290 0 obj << /Type /Action /S /GoTo /D [4130 0 R /XYZ 72.0 720.0 null] >> endobj 4291 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 213.45 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4290 0 R /H /I >> endobj 4292 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4290 0 R /H /I >> endobj 4293 0 obj << /Type /Action /S /GoTo /D [4133 0 R /XYZ 72.0 720.0 null] >> endobj 4294 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 211.77 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4293 0 R /H /I >> endobj 4295 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4293 0 R /H /I >> endobj 4296 0 obj << /Length 4297 0 R /Filter /FlateDecode >> stream xM%Wv9E {@W x 2Y&dQ$[m+lU9͊gd>H%<*aX{ſ~u9cx7gm:~C;Ϗ_Cǯ7:韯~s}W_Oǯ_կx/_}kso~Gޮu\97m]io~~{~~˛߿w~Wq_v|?7j|oú~x~~?}7q}q}ּ~]yJO!qH<$&qv`;A Nl'`k""""""""E`!CN"8Ep%Kn qB|` 'Fh MCCCCSSSv"8Dp!SN\"Dp-[7y` ' y`6@0xhFߟU)/ .ӷ2y}Zx6xBC!x7~\Ak10~@````````.]"8Ep)K."Ep` # F@ 5kq?n XE0D0D0D0D0E0E0E`.C"8Ep%Kn"Ep` # F܏Oa XA`````aq,QOV<K|_ݿp)~mK{x zJ]_MV_QT/OlXS,[IJ5l,,,,,,,;Yv.q9zK=՝%~TO_렚,Ynd2C,82NS,hbM,eeeeeeee'N,Yd9r$I,Y.drebX!yebX)2Xf# $$OG 㨡nQ(x9k=uQ z4;K@zJ}]HM,YndŲ Z,OC˺C&uddddddddɲe'A,YNd9r"E,7YnbyEŲnZ,Ųn!eD"5YYYYY&Y&Y&Yvdr A,'YNdr"M,7YnK˺S,Ųn2Z,622222C=F{뇯4m Gۏ/8YR_KTOo[|r&M[,!ve;IJbNlX&ekddddddddɲm~ϫX=o׷RՃ-mԝ%mI5YndrebX!qebXFhbM,/:RYYY&Y&Y&Yvdɲ A,'YNdr"E,7YnC,<2OS,<2Xflddddddd1#'?&?}z̷>k.AzK}}{/uzI}}{/uRM,7YnbYG:)uKj#]Re钚,,,,,,,;YvIZ:sܩ׷Rw׷R'S{j\dr:%X֑.O#]Re邺e钚,,,,,,,,;Yvd9r I,'YN\dr&M[,HbYG:%X֑.X֑.222222ɲc4F>s49(|[W8?ᚻqH7ijI%^/\"Dp-k*1L~|`M A 5 XCCCSSSv"Ep!SN\"Dp-[7b@ 57a""""""""E`!CN"8Ep%Kn X3A&:`s ܏,b    LLLC=F/lw?>\>9ÎzJ.uP=RKFݩ&M,XC,!ve;ŲbNlM,[2222222ɲe'N,Yd9r$E,YndrebX!qebXFhbM,eeeeeee'N,;Yd9r$I,Y.\dr<2C,<2OS,e6FAAAIII=1(._Xw<η{'/8-J'a|S~}P-_/S]Lu6mT\Zg$?I·QNuFrRsbjjjjjjj7nTS:Lu4iT.S]Mu&:YF92ORfj2j4TTTTTTTTvS:Lu0iTNS]Lu6mTlZ(':F995Y5M5L5L5L5L5M5MfQ,}at͢~/z2v*}s>ygcʻuZOayX>,'PN5v$PN5vTkBvS/v­|S>E<-O'<,7eTnR ZcOR Zc؅rS S S SMSMSMSMSM0aTNS:Mu2eTnR ZcI.j]$oZcM5L5L5L5L5M5M?O.?? ]ηc?y66a|S~}Ѧ[(ߦMuZ('D9N V M5L5L5L5L5M5M5Mj7~^69|Mlw<-7mTnR}Ajm $D9 IQnaaaiiiTvS:Lu0iT.S]Lu6mTkZ+$?I QNVHFXrS S S SMSMSMStic>dԿ6?|o{.-7'/8Y__)O'cazLnR=j$ZC9M5L5L5L5M5M5M5Mj7~^%y'i|MjwMu6M_TkeZ+{('Z#y#ZCvSMu0aTNSLu2mTnR=j$ZC9IVPnaaaiiuC5dH3/?}Ä}XA+<\I8,ˇ: &y|Q^$7eTnSݤrLrR}9 I/$'՗`i0M5L5L5L5M5M5Mj7nTS:Mu4eT.SݦMu``T?T?7Rx rS S S SMSMSMSMSM0aTNS:Mu2eTnRx rRx rRx rRx~Hi0M5L5L5L5L5M5Mս@ɘi~a3˘:~ⲟO^DE:-O'<,okB9DETkB9DrR MjTU9o,/iyZ>)_a.SݦMujMT('՚H~jMT('՚HH&*jjjjjjjj7nTS:Mu4iT.SݦMujMT('՚PN5QTk"y#՚Pnaaaaii&*d~c_׷}k,ߔn]K9n$S S S SMSMSMSM_ ŝ|Mlw<-7mTnRPNORPNIpCvSM0aTNSLu2eTnRPNORPNn(7000444s<XqwKS/g]P'p}Ѧ|Q~}Ѧ<-__)ˇmT7ֹIuH~j렜T\T\Mj7aTNS:Mu2eTnSݤzEIuPNurRs7Rsjjjjjjjj7nTS:Lu4iT.SݦMu&:A9ֹORsj렜T\V|dew?|߿_o?pޮqɫ=^:$yX>,ߔy%ɻ妚MjT۬GoG[(]8څ#yXnTnSݤZG(': IurR7Rjjjjjjjj7nTS:Mu4iT.SݦMuj}TZG(': y#:@}՘ɵq~iw>Cxx=UkuzI]cG)ureZ,k*)5Z,k"#X31fzX۹Y=g/lAy|QO){$ˇI=7R}y|Mj7aTS:Mu2eTnSݦI={ ?I={$'՗HnaaaiiiTvS:Lu0iT.S]Lu6mT_#9<T_#9<F/TTTTTTT_fsI>V{2|o[G?X"-_߶R˷u.n$:D9ֹ IQnaaaiiiT^߶fMm+Em+iTnSݦIQNu.HT\Z$oZ(70004444nTS:Lu4iT.S]Mu&:D9ֹ IQNu.HFu.rS S S S SMSMS}uC>VҴ/-qFs})˦<,oʯ)j;HRm'TI$H5RmTTTTTTTTvS:Lu0iTNS]Lu6mT 8H5RRORT$hTjjjjjjjj7nTS:Lu4iT.SݦMu&e>y+n~NyZ>)~WR7T'jjjjjjjj7nTS:Mu4iT.SݦMujĝrRSNwI~.y#;Mj7aTS:Mu2eTnSݦI~N9O%?I~N9O)';j|dпZetwtq>yNjaVP-__})O'o_IVPnaaaiiiT^Wѣ7Y-_|RrS]Mu&Zy@9ORjE<-O'[a.SݦMujTx'IHHPnaaaiiiiTvS:Lu4iT.S]Lu6MurR5jTxTx j.}>%֠5}.-#pAI~T/73)N&5YNdr"M,X֑!Ų I-u\HjBP7BReeeeeeee'N,Yd9r$I,Y.dr:$Xq O@ReZ, dddddddɲe'N,Yd9r"E,YndŲH-uS,묏bY'}nbY|& $K$}|c5v{2:no~as_18o Bn#$O'6!.S]Mu&:E9i-ORZj֒j֢TTTTTTTTvS}FI ˇ @-7mT7AqjIqjTj4S S S S SMSMSMSM0aTNS:Mu2eTnSݤAyj'IH5f#lZjx2[j{7oEu9;v!;$/]Iyݱ+yXnT.S]Mu&պrR{('պrR$oZw>QnaaaaiiiT^*xFƝT<,oʯKʻRTnSݦIT(OR('պ3rR{(7000444nTvS:Lu4iT.S]Lu6MuZMI~j8E9֭S7R(7000444; o/Iuo꾨xxҦ|4˻yZOayXnTnSݤZEQNu_'}Qj%y#պ/rS S S SMSMSMSMSM6|yX7Y-7mT7}QjE9}Qj%y#պ/rS S S S SMSMSMSM0aTNS:Mu2eTnSݤAyj'IH5f#l鶨|dno~??>:#z Ffy|Q>OIym&<,7eTnR}y3OR}y3qj7Y-_|RLu2eTnRZ3)ORZ3)LrS S S SMSMSMSMSM_7qZOayX>,ߔfyTnSݤZ3)IfRjͤ('՚IIHfRjjjjjjjj7nTS:Lu4iT.SݦMu&՚IQN5$՚IQN5Tk&EI=c'3[?ϯЯwEB.w4;izG<,oʧNSLu2mTnRmTA$vj;I5RmT[#L5L5L5L5M5M5Mj7~^hq+ߔfy|Q>OI:,Mu6mT 8H5RT$8I5NRFH5vSMu0aTNSLu2mT7AyjIyjTj6S S S S SMSMSϪדן7W?'Md/8oĒwsb)y-ئTk6Z )'Z-y#ZMvSMu0aTNSLu2mTnR۔j-ؖ$ZM9ւmIlSnaaaiiiTvS:Lu0iT.S]Lu6mTk6Z %?IlSN`[F`rS S S SMSMSMS1C5~l<}ܘol|"s|X)_n|ZCI4j i('HH4jjjjjjjj7nTS:Lu4iT.SݦMu&PN5$PN5TkHCvSM0aTNSLu2eTnR! ZCOR! ZC֐rS S S SMSMSMS(c>ɴ"qcZ|GQ}ż~e8|$RחKATBݩ^PBŲ@}e-ӑZ,kM,kddddddddɲe'A,YNd9r"E,7YnbYrږ#X֮Ų6@IJHMAAAAIII,;Yvd9r I,'Y.\dr&M[,kbYp>Ų6H-Gj-8Reeeeee'<'zo:~z//˽ճ~zWeʇK3Eՙ|RMu6MrR/Z ^('ZB9ւM5L5L5L5M5M5Mj7nTS:Mu4eT.SݦMuj-xTk'ւIHHPnaaaiiiiTvS:Lu4iT.S]Lu6MrR/j-xTkTk ꦗ|$IIR=~i'/8 o)wZ)y"TZ(':D$y#:DDvSMu0aTNSLu2mTnRCDj"$:DD9!"IQnaaaiiiTvS:Lu0iT.S]Lu6mTZ$?IQNuHFurS S S SMSMSMS}5OyO)uy?H0fx}s|3{acr3)S ϛ2u/L?r3)S ]+weLޕɻ2L+2̸+3̻2̼+ʬ2̺+2Lݝq3)Swd ϛ2uLyq/l7en]+weLޕɻ2yW&2L+3ʌ2̼+3̻2̺+ʬ2̾+o} 7Û2u/Lݿp3)S, MOfxW&]+weLޕ'{kzzEy=@|R^O5TnR|I.%?I.)'PN5TTTTTTTvSMu0aTNS]Lu2mT7ְrR'rRTkAvSMu0aTNSLu2mT7ȅrR ZI27R և|lggD7;O>z|X)Q-__oiTNS]Lu6mT Z(':HD9A"A"M5L5L5L5L5M5M5Mj7~8w|X) ʻuZ6mT7A"II~j$T Z(7000444nTvS:Lu4iT.S]Lu6MurRDZ(':H$y#:HD R<Ɠ!ͼϏ6gfqtZOʯKaT[nT.SݦMu&:H9֑DOR#jITH"Mu27գ7ץ EuByZ>).U(Mu6mTH"ZG%?I$RNu$QFu$rS S S SMSMSMSMSM0aTNS:Mu2eTnR#jITH"ZG%oZG)7000044WGy8~kMS/oi)?~~y?_w/ofzJNv&I,Y.\drve;IJblXS,)ekbYYYYY&Y&Y&Yvdr A,'YNdr"M,7Yn˺E S,-ŲnϒZ,,222222ɲe'N,Yd9r$E,Y.drebX!yebX)2Xf# $K$}ꞫϻfWm]oWP?߽?|~]k ^<\ךkMa|_y;N^k $/kMiHMu0aTNS]Lu2mT7TA vj;INRmT[#L5L5L5L5M5M5M5Mj7ZY\ki|My[nTnRT 8H5RT$8I5F#hMj7aTS:Mu2eTnSݦI5R̓T w}ͷ?g`sǑm>ǁW|Q~QOʯ4a|4iT.SݦMu&F9>6OR}ljcTkMjTG|S>E<-O'<,7eTnR}ljc$F9>6>6M5L5L5L5M5M5M5Mj7nTS:Mu4eTnSݦIQNrR}ljcjcTTTTTTT_y_~?|_}>f=o||ŗ_?z?vm]^>]݃Ϗ_Cǯ7_7|~~yG1Ǜ?_x?|2{#oWQ+_qHmc endstream endobj 4297 0 obj 14643 endobj 4298 0 obj [ 4135 0 R 4136 0 R 4138 0 R 4139 0 R 4141 0 R 4142 0 R 4144 0 R 4145 0 R 4147 0 R 4148 0 R 4150 0 R 4151 0 R 4153 0 R 4154 0 R 4156 0 R 4157 0 R 4159 0 R 4160 0 R 4162 0 R 4163 0 R 4165 0 R 4166 0 R 4168 0 R 4169 0 R 4171 0 R 4172 0 R 4174 0 R 4175 0 R 4177 0 R 4178 0 R 4180 0 R 4181 0 R 4183 0 R 4184 0 R 4186 0 R 4187 0 R 4189 0 R 4190 0 R 4192 0 R 4193 0 R 4195 0 R 4196 0 R 4198 0 R 4199 0 R 4201 0 R 4202 0 R 4204 0 R 4205 0 R 4207 0 R 4208 0 R 4210 0 R 4211 0 R 4213 0 R 4214 0 R 4216 0 R 4217 0 R 4219 0 R 4220 0 R 4222 0 R 4223 0 R 4225 0 R 4226 0 R 4228 0 R 4229 0 R 4231 0 R 4232 0 R 4234 0 R 4235 0 R 4237 0 R 4238 0 R 4240 0 R 4241 0 R 4243 0 R 4244 0 R 4246 0 R 4247 0 R 4249 0 R 4250 0 R 4252 0 R 4253 0 R 4255 0 R 4256 0 R 4258 0 R 4259 0 R 4261 0 R 4262 0 R 4264 0 R 4265 0 R 4267 0 R 4268 0 R 4270 0 R 4271 0 R 4273 0 R 4274 0 R 4276 0 R 4277 0 R 4279 0 R 4280 0 R 4282 0 R 4283 0 R 4285 0 R 4286 0 R 4288 0 R 4289 0 R 4291 0 R 4292 0 R 4294 0 R 4295 0 R ] endobj 4299 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 4298 0 R /Contents 4296 0 R >> endobj 4300 0 obj << /Length 4301 0 R /Filter /FlateDecode >> stream xTn0+ 3\DJf@q$,RߡDٱ2L3zq^Hϝ[L, ɃWq0>x+&B(~НtqX{~E3x|"4%<]ЧgtD?7Uu#̗iCdG1)ܖx3fIynlY>W}~T9u\#kXgyLu r[m!0FD%YELj/NKsFZLpȩK'؇qY)s`!H4qDOì) n*[`YV-ھl2(f6XTC-"JGbdZI(5 9L3ϾōM'X}Lzp2?T6ϊfχ؜!LG* r<.Y6$]:[yw]hDG99 =%6]?a H< IVR K߲:p[HEc8!Mf#bNm'/sMTPkn1~s2>9o\9:ˋUu?@ endstream endobj 4301 0 obj 562 endobj 4302 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4300 0 R >> endobj 4303 0 obj << /Length 4304 0 R /Filter /FlateDecode >> stream xUKo0+ uViM8 ZG&iOm!Ϟ̣À{mpc1P7Vo0fEҬo[uRO5.<;ΙO*6 [Fau%~'.r.QUW|_)d75[6S|,ՀG^pJ**J(id) W 9LP =@hȄ$}/],9WSyn$JC~x cO?0'>cF%FT'Ce\ HPfdv9[^.H;WŶ*/| ҘR|0afd}eTkynN\KJβyD;>":&%C $.~&^睶VC8iWfۤZ jZZ5NOnި3\>5yQ0kZaGm`eM뤊B]ui/0oIGYENbglx]nWHoBH^!%T:\JOFu%n)FRE`ΗkeL%P+&fռ31b endstream endobj 4304 0 obj 668 endobj 4305 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4303 0 R >> endobj 4306 0 obj << /Length 4307 0 R /Filter /FlateDecode >> stream xT;o0+ngݱU["RBHNIԱ [/;B %ٝ0 1?C4 5j%0|GhNl]-m!> d6R!Ik*N"غ\t&ekw5 [7 š> endobj 4309 0 obj << /Length 4310 0 R /Filter /FlateDecode >> stream xUKo@+Hv CʡUȢfmSŋ}g`S|0/ :0]z/[-@} ̍o=\??vlLNYD֔>zqww?69>}#ij]j}ΔVQ* !"rx W?@JS]?A|}{<%]YFOZ:w}E@IQG5#D۔vZe$i:I"49_LpȉC9TT*SBC =q!Q5 wol*upHQp>sn+,Ͱ)EҘחr35*륱UG,IS9('+c.€s|kf|ܐG|7Z/{ FrUmI LԿ K˹nGEM/X "o[ŋkڎ$tZ $n9BnIʑhU75L֘Xv:;(VISn4i9GhnUs*8WĒ$)s2B#gA^/+f(/hdq BYw03YtZ_/־І۶ě~`Nf\ {MYd3~笺/K2 endstream endobj 4310 0 obj 656 endobj 4311 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4309 0 R >> endobj 4312 0 obj << /Length 4313 0 R /Filter /FlateDecode >> stream xVn0+ ;h rHCEL9!E)^d%4 | <I=s[H%`|#dƜE2R*$,>ܞ\^Yt}ze9ۉ3y)]IRj7y;]B$eԶ64T1<ͤf4Uf8_جz5G(H0CDNOhvW,L&r@ EQ@~Ns%6Ъ"RrԒȒNƔj^G S2U*gBϠLN|WУ`3=kBW|dYy]y y9mOb5%v{ŒKRh=?-Bf3 Xc_-|zhMM-רf-Xl8ʔZ0,m.@ a~[y0HF- . Ų@>0B+]O\63;0%fDYqxh{"8 l@2e@EX7=ڀ<]΀n2^/A֫M=-uQOwF^M>=vdHk‘;ˣo}l endstream endobj 4313 0 obj 666 endobj 4314 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4312 0 R >> endobj 4315 0 obj << /Length 4316 0 R /Filter /FlateDecode >> stream xUێ0}+qWu}iԇ*T@Z;ƐBa3>s<?; ("qk 6<KMijy6hYw'u(|vc5Sg!B7 +}.OzU*p%Dpea7o_!v.o |p>8o,IůZ?IԙGVQu N*J%YEg(QGyQt5O4 Vn.' JF.gˮ2qCvI,3R4 # P֑JRJZCMј1R>j" 0fjvcG(#;|gX|4#ۗa#.exjf|OtZpz" endstream endobj 4316 0 obj 617 endobj 4317 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4315 0 R >> endobj 4318 0 obj << /Length 4319 0 R /Filter /FlateDecode >> stream xUn0}Wc+ޱ1o"U]!"TY5+~ǹP%S$g|x} #ijWk|k "&v8ᯟOV)!ƭ<%,AA?G ^UjD%zOdl7Yqf *NG &DeѠ µd = O@='3.{a\QU.Wy7T}"y!*:Q=;g=/|te'Mb:]vƦE^ߌˀȩkN8><,h(t]h 9h{ft8bj/-TVtb&7I0W]tJ:$RT2/r~KU/82 B TY4fh~Sn:cTnV`X;kL[]O |hJ5kúþAC='WL9 Gju/; p endstream endobj 4319 0 obj 592 endobj 4320 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4318 0 R >> endobj 4321 0 obj << /Length 4322 0 R /Filter /FlateDecode >> stream xUn0 }WZl[]"b2J;,;K"X$))tߺAi/pt,mYBPA¤pu7ɺ0w紕9U!S*AxTu )Cmh"P#%m\lX$EY874NN't\"rU{d 9@{  &CBtęv$Q8v(fu,S}"u1*:IYWv>r]iLXʹ̷*=5,NhK(*Q9ayt$]pfAIrwƑ7_G-|]NӉ_ˢ K&>ƧW YH5.4{n5=o`ͮ\'kLg[7BkEׯdúu<ߎcB9IP oG( endstream endobj 4322 0 obj 562 endobj 4323 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4321 0 R >> endobj 4324 0 obj << /Length 4325 0 R /Filter /FlateDecode >> stream xUKo0+Hwl-*H{h$N`#ny%!4Ӷ3clq@oCbCqL87V=0fER>cl 2 uHp^]g8໊ am} jOÙll7 RWGnQw]_eA?jG`ϋL@eKj-8Ϧe=3OB? A#؂ .9%s 4nzcNAΩ!=g3]AiHuU h6e]+<2u[x|Segꏤe|^?]IIIatr9".f#'?mP>cFqV, S Us R/LyKw_t(⍑9 .-84& Ы[Sn< q-G6!&Y'Ssg8 Nm=_xx> endobj 4327 0 obj << /Length 4328 0 R /Filter /FlateDecode >> stream xVn0+HXZ(]CE[*lɑrB˲^Ȇ5|iH!BXDav MnoP7{J{6n­O'w0|w$H܇ǤkoaX:c7xK1/BA\B+k3Ow6O]C!:74ňɎLm$YyY\^|VlͶ䯳|e6=VFB(ŘșCJ09LJl+wk] 84TZ%E,.j'*Uh(E!FA(p*hD06kqn,OsCsz8q}a"\jy1G BxlAד: S* ޕ|zHFkߋےA[ɾ~lk9TBY(C8iAi%9Ԭa2AA W3؋WB}WE&QlSgE~l ,Dő\4QOd }qrr'iQe\$=R[V9_lEY(ؙf,trDZ[|Vv פLy%4&e ԊhَzZlWI7Ls_Q+g%c[@2 dA:[R: w#/Q I?0oGiQsNc<+ɳ endstream endobj 4328 0 obj 779 endobj 4329 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4327 0 R >> endobj 4330 0 obj << /Length 4331 0 R /Filter /FlateDecode >> stream xVn0wDj=yCb*Hh N`@ v5m}=p!un,8 FQp>D/aۛM^`5bGm F ӹh"qCΜaX9_cxY1/BA\x/+{ܛK֧Sꪡː.~0 }qbdEȡLm,EY\^|^/.|50f1 c"'vF0{"C|SO)(e2:1p0I$]%lDW C\e ;d`(e3 f/y 8Cp"FQ@F|7nboĹify"7#&,TCF3bwz_#5* +2? _ZAL<2 =D\ċ 7Q-l[gE>P"H.1O% 6@Y:U. 6ӂ׽˲ؑ=gZak~f۲qʍG0הDyff &Ϯ@C]wMSA="JÛr)Y v[/vTvbN~ʟBI"Ym.ۑ,1N%%*;=}=7xbupnhqpy?1sLIQ ]U?Ղ3 endstream endobj 4331 0 obj 780 endobj 4332 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4330 0 R >> endobj 4333 0 obj << /Length 4334 0 R /Filter /FlateDecode >> stream xTMs0+fu%rj;M;!!xZW 0x޷>;PWf:qk`|0O Ef1Wh,ֺf l6OpQ{˩5ą3$o*71p}"NZ.R e\ ow"*g:7I.eoιφ]#mi Q}mРBD$ yv}Uv,r pJ."*G-R刣%cbHpCOP&M.(!o4;qPH}TgcU/YP#߇|wL,.O=E|\V,!VJ)*y|(,QF8^zC$L?zm-.&*]uegs6ϒKbb0'-vȳc.J2hB:ڭ4'XO${/P4CbXϥ0/ "'S_0~vڿ endstream endobj 4334 0 obj 552 endobj 4335 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4333 0 R >> endobj 4336 0 obj << /Length 4337 0 R /Filter /FlateDecode >> stream xUn@wg{dV}YEY}gMl&`y}'.J3XSQP  QI^.Bkuև{lvw^!| 2^uyA!jCxC !\JJZBA@8`p?}0ڕq5y){c}N]}.S 3?EtQx(Cn2FDPF"Y"W}XEU(hH:A@0(G#A @#ԷuPs!3z:?ioo:C!}VՑf|W&eON'ZZ,h:(D 5Jm"~(64Ϊ3R?0bWF26r{GS\.dW%yv)!Fe|h(Da|7@춫L6Yꀪ7ч_FѺ㠌0]D:/bVsBR<01[iT*pCHj)k=v !͌#t|buH/beV?Q endstream endobj 4337 0 obj 554 endobj 4338 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4336 0 R >> endobj 4339 0 obj << /Length 4340 0 R /Filter /FlateDecode >> stream xV]o0}WܷظO۴ "H j~RC֧{|1xFi{0/ $0Ax}i5#6hOBWx~x׷&Y>p]w½%>~QVϥ Jh !6('DN[.o OwUu ǟ"uQ-rkCRw%eUbQY<1R[u!N8)eӫ9D1T#{vùp:C7+>ߤC g(J,R>THQI <h7"oQ hPY&2Gmsԇ"u & 43Ol!MI IulQ_89ЖkZ/lde1h "0S8L M8{?]uV;IZgE8Psf3܍h;i%q8*Y1ZR&k!GYw>:PlWI`s.l} vA9?#v:@$u$ Ҵp%I~ʚJAz秶Hwt[,X`ڿA'^RAcv{آ^o'w2!^_ˣ_o\UsaP_ endstream endobj 4340 0 obj 682 endobj 4341 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4339 0 R >> endobj 4342 0 obj << /Length 4343 0 R /Filter /FlateDecode >> stream xV]o0}Wܷ]qiRVUAC[U4 SHCI֧!͉G B2XcQ p  4l4`{fź]α-dC]j4xϞը|W!,/{!~KP2"3i> g˟'Z5_xA>eϫ6eֹGNj JD;IdQ벸+fM˻dUV yF}D[z X {IvØcp٦lRh"=D h",OQnCDC"E$eȢ.|:ͬHrO]‘jv쟫6WE+J4QU Ii 6Τ=xTDR`|F;5s9>#&S!>MSUגQ$7pi龪zQe&+cff>'\Gcq gj착wKZ;Y휤ΖJq߻Ld,}܍v֖&Mr⠛pfn2Mptu ٶVIVJ=t'VHϐ^=`XWYeXum^­'M9kVnrDZ6Jiz؊F8ABp> endobj 4345 0 obj << /Length 4346 0 R /Filter /FlateDecode >> stream xVo0~*>MI}T5ڪra Y~g!@IwwgsEg"b\( 񰫢AYjkE (EbmVZinV觗y}nA}^<1{@ȻFГy}%hl (Ǒ/P9Yn?\|B3)UurfY'ON;3!M0 lZ<(pQ.7T2&M?_e=,d%-/fB!Acd6PG C;D߀MP%zYLV24qʬR CJ.T\NE'l]oʤlLb"E֨TD8 '>?z)ީ/pAO csgX"Ĕ'~l@ҟj*@> {C)Ew)J+8br%m/v|[rG Ǝ t[~$@,v3PfnnY5ZEz6XaK=T΋t=P jZ)&f WeuʟF۟Ére%.c~GSASĵfUo#ׂeX-\;GJ#yytNZXZ <%竽Iһ<^3plOh([* H-Ŕ# q`$xKMU_ÞNޢq'2d”E!wG+!^ qA DS??QyP-XY. {F&~Ւ`QbH2 NzY*0U[-c H=A`&};0ӷ&3w o̪ʆ endstream endobj 4346 0 obj 863 endobj 4347 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4345 0 R >> endobj 4348 0 obj << /Length 4349 0 R /Filter /FlateDecode >> stream xS=o0+nl8gccj*uRu2D)$HH1B14Jg=ӽǑ0@{f.(a{ c8b2&(U8 3ty=~=c d%ķ 1cu#;v/DؑpAk!N~H!bB|~S A1Uc 63}V[HFfEBP( u(/y7YoHbkS&4Ot)R Egpa/7dʕ0ES\O48Wު;?jC endstream endobj 4349 0 obj 327 endobj 4350 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4348 0 R >> endobj 4351 0 obj << /Length 4352 0 R /Filter /FlateDecode >> stream xUM Wq#5tZCj-YU$ Di}&鞺f`<)J(.xj1 O!@C"7VUg ]c? | txǠqw:D@@-C"AΔ/ <8`aUls0fB!I+#$߂I7]zZFtw&Q=Q3#dʱ[V٢Է C<[ 9g%0 h\s"RɟX0&56`KtB9d?2LxH8<]V0::Ř(!l(b)Hɴa>rm5iH,CGm/JI(#j>&ٵe$d1XO6c$r4!knv &ڴ*Fվrc HVv^c=z_/XPk4DZ 7ճ [Gz619}xxWӳ[6sބ"'OxxeVc endstream endobj 4352 0 obj 565 endobj 4353 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4351 0 R >> endobj 4354 0 obj << /Length 4355 0 R /Filter /FlateDecode >> stream xUM W1 VmVk=1-8(?Uݕ0̼y9yvvHs 68B!'@"DcQx `vFf/m<'߁0 ^ Z5 +tf5?k\qte}[Sl~ ~MS6.A ؕLߋ#S1<ośӝArdՃUA⓾ endstream endobj 4355 0 obj 511 endobj 4356 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4354 0 R >> endobj 4357 0 obj << /Length 4358 0 R /Filter /FlateDecode >> stream xVKs0+L' zCȶbڒ#a?fzibl#-iw?}xPM&蹳1DobI ,&> endobj 4360 0 obj << /Length 4361 0 R /Filter /FlateDecode >> stream xVKs6WhOk/DnM_3Ѵ8%Td Eq&&FX|vQD{R1e/IFd" rwZ >+1韝 ٌ?@y^n^Cv?1|W_e?#Ji+LiN-JTbT0ڡ7ޚn 1Z:sS{B'qA1$[@G` uJ, T{h޽k:>k o;fx% 3ʁjpfym3(ӜⲀɁmSbIeoRigVt…$(ȅĺ}S7q] dTNKДq,7w3 %4PJBJVsWU{B2SA 5١we E{=UNz <)Pv8̗ L,%$#u%k4ho>)Wjvʔ47JܢlWm^3W0fnLS?[ }=u'ʕQv+qΕfRO NԄcMEgb|k54 ^Mw| F.B䣔Oe$KC{tѩ};c2P˳Tr~ Ƭ endstream endobj 4361 0 obj 886 endobj 4362 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4360 0 R >> endobj 4363 0 obj << /Type /Action /S /GoTo /D [4302 0 R /XYZ 72.0 720.0 null] >> endobj 4364 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 220.1 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4363 0 R /H /I >> endobj 4365 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4363 0 R /H /I >> endobj 4366 0 obj << /Type /Action /S /GoTo /D [4305 0 R /XYZ 72.0 720.0 null] >> endobj 4367 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 228.44 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4366 0 R /H /I >> endobj 4368 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4366 0 R /H /I >> endobj 4369 0 obj << /Type /Action /S /GoTo /D [4308 0 R /XYZ 72.0 720.0 null] >> endobj 4370 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 685.5 190.151 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4369 0 R /H /I >> endobj 4371 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 685.5 539.998 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4369 0 R /H /I >> endobj 4372 0 obj << /Type /Action /S /GoTo /D [4311 0 R /XYZ 72.0 720.0 null] >> endobj 4373 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 244.54 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4372 0 R /H /I >> endobj 4374 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4372 0 R /H /I >> endobj 4375 0 obj << /Type /Action /S /GoTo /D [4314 0 R /XYZ 72.0 720.0 null] >> endobj 4376 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 312.86 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4375 0 R /H /I >> endobj 4377 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4375 0 R /H /I >> endobj 4378 0 obj << /Type /Action /S /GoTo /D [4317 0 R /XYZ 72.0 720.0 null] >> endobj 4379 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 302.87 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4378 0 R /H /I >> endobj 4380 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4378 0 R /H /I >> endobj 4381 0 obj << /Type /Action /S /GoTo /D [4320 0 R /XYZ 72.0 720.0 null] >> endobj 4382 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 287.32 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4381 0 R /H /I >> endobj 4383 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 637.5 539.998 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4381 0 R /H /I >> endobj 4384 0 obj << /Type /Action /S /GoTo /D [4323 0 R /XYZ 72.0 720.0 null] >> endobj 4385 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 277.33 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4384 0 R /H /I >> endobj 4386 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4384 0 R /H /I >> endobj 4387 0 obj << /Type /Action /S /GoTo /D [4326 0 R /XYZ 72.0 720.0 null] >> endobj 4388 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 244.55 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4387 0 R /H /I >> endobj 4389 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4387 0 R /H /I >> endobj 4390 0 obj << /Type /Action /S /GoTo /D [4329 0 R /XYZ 72.0 720.0 null] >> endobj 4391 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 311.75 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4390 0 R /H /I >> endobj 4392 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4390 0 R /H /I >> endobj 4393 0 obj << /Type /Action /S /GoTo /D [4332 0 R /XYZ 72.0 720.0 null] >> endobj 4394 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 301.76 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4393 0 R /H /I >> endobj 4395 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4393 0 R /H /I >> endobj 4396 0 obj << /Type /Action /S /GoTo /D [4335 0 R /XYZ 72.0 720.0 null] >> endobj 4397 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 262.88 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4396 0 R /H /I >> endobj 4398 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 577.5 539.998 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4396 0 R /H /I >> endobj 4399 0 obj << /Type /Action /S /GoTo /D [4338 0 R /XYZ 72.0 720.0 null] >> endobj 4400 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 265.66 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4399 0 R /H /I >> endobj 4401 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4399 0 R /H /I >> endobj 4402 0 obj << /Type /Action /S /GoTo /D [4341 0 R /XYZ 72.0 720.0 null] >> endobj 4403 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 286.21 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4402 0 R /H /I >> endobj 4404 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 553.5 539.998 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4402 0 R /H /I >> endobj 4405 0 obj << /Type /Action /S /GoTo /D [4344 0 R /XYZ 72.0 720.0 null] >> endobj 4406 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 276.22 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4405 0 R /H /I >> endobj 4407 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4405 0 R /H /I >> endobj 4408 0 obj << /Type /Action /S /GoTo /D [4347 0 R /XYZ 72.0 720.0 null] >> endobj 4409 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 210.66 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4408 0 R /H /I >> endobj 4410 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4408 0 R /H /I >> endobj 4411 0 obj << /Type /Action /S /GoTo /D [4350 0 R /XYZ 72.0 720.0 null] >> endobj 4412 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 517.5 252.55 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4411 0 R /H /I >> endobj 4413 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 517.5 539.997 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4411 0 R /H /I >> endobj 4414 0 obj << /Type /Action /S /GoTo /D [4353 0 R /XYZ 72.0 720.0 null] >> endobj 4415 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 227.33 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4414 0 R /H /I >> endobj 4416 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4414 0 R /H /I >> endobj 4417 0 obj << /Type /Action /S /GoTo /D [4356 0 R /XYZ 72.0 720.0 null] >> endobj 4418 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 493.5 215.672 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4417 0 R /H /I >> endobj 4419 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 493.5 539.998 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4417 0 R /H /I >> endobj 4420 0 obj << /Type /Action /S /GoTo /D [4359 0 R /XYZ 72.0 720.0 null] >> endobj 4421 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 218.99 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4420 0 R /H /I >> endobj 4422 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4420 0 R /H /I >> endobj 4423 0 obj << /Type /Action /S /GoTo /D [4362 0 R /XYZ 72.0 720.0 null] >> endobj 4424 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 245.37 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4423 0 R /H /I >> endobj 4425 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4423 0 R /H /I >> endobj 4426 0 obj << /Length 4427 0 R /Filter /FlateDecode >> stream xM$W}Z‚{b7H4!]~fٸ2xV`cWWzθ'oDnߎ>Y_un{M{m{(^ևlR?Ǜ޽y~v^rp<{"ۿspwzo/?K[^xe˯O}᫗?y>xz՗?_G\嗼V*|;_n_>/~ӟ/_xN{_Kܮ/ڄom@۠^Ўn&Mp6ϻ[λ[ϻ[ϻrޭnw+*UpV[n:up6m nyλv-nw[b?[nQ-------[ n 5p[nMp6ϻv-nw[r?y,ݲwnnnnn n nǟs,XAHd+۱>~DR=>NǁAu,'YNbY6,XM,.e˲eŲ,E,K! $$$$J,+Y6ldȲe'N,Yd9r26M,c2v],eBAAAAIII,+YVldȲe#N,;Yd9r$IS,s27],s2Xf,b,,,,,,i~//mGIsQG^}^_Y~{O_}٧޾}!F9gy PꤺK=7Fz 15Āz5ĐZ,Cj\C 222222ɲe%zX^F3+CSTwFuPM,'YNbRb@bH-ku5Đ,,,,,,,,+YVdȲe#N,;Yvd9r$IS,Cj\C r 15ĀbHMAAAAIIO73]}oC7zxOzx|ZċюY]=Q=>RWNjQpz>^äNkAuzJ}I]&I,X?IX/ubN:Bj LLLdYɲe#F,Yvdr A,'YNbNZ,PbNZ,R:Bj LLq_/T8PywOSkhsC^P5JzBTwk(dȲe'N,Yd9r$)elbX.ebE,eBAAAIII,+YVdȲe#N,;Yd9r$IS,s27],s2w"Y2 YYYY&Y&Y&Y>}G^hӅ?~/h_;<ǍG::+;Iu:6FXIJ]&J,+Y6ldȲe'N,Yd9r$)k%)X$ԻXbE,JRj\+I,,,,,,+YVdYɲe#F,;Yvd9r I,XbVPbVRZIB]r$& $$$˧'H^}+4+fdz`Wg ꤺK]6Fy'J5Y&Y&Y&YVdy9șsSAR=䜯.بr$IS,c26],c2v"Q2 YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,XubNZ,s,bE,eeeeee7G^%{x7o>|O=[0ϟ?Hwץ$˛S$' Ir Ir Ir M5L5L5L5M5M5Mj5?c{I@W嗫Aw/<,7aTNR}>xNTt>/x M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IB% 'NjAN:R}ZF~c2??W~XٕW˗vΩgq20φdضa p Y~VgeYqVfgeYyRfm4>YۋυIdxRfm%>YOgeL2yV&YzVgeYvVigeY~VgeYqVfgeYyRf=Y;wυI_dxRf=2koL2qV&Y<+^ʍο{ݖۛGߗ׫9gC^\^ _^ O;4wĺ T>)_uWOS^%Mu4iT$zDT$zDB}M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IuOB9I('> 夺'zrS S S S SMSMS] PNX}O|k}sYONIʫuDN\䤺vJRnaaaiiiTVSLj3nTS:Lu4iTrR]wR]IuM$/&jjjjjjjj5jT6SmMj7nTS:MuPNk@9 夺&R]M5L5L5L5L5M5M呮^(>?޽}[#hCZCVWS~)Iu%S S SMSMSMSZMj5fTvSMu0aTNSVZKZSNku/y!յTTTTTTTTVSLj3nTvS:Lu4iTrR]{Iu)'յZSnaaaaiiOuRo&oᩐǺx[RfXR^-RrSZMXmιg;Oʏu)A.<-RrS:Mu$յ.T׺TT׺rR]R u)ZMj5fTvSM0aTNS֥ZRNk]J9uT׺rS S S S SMSMS]竼vc]O\#ַ ˭:[EI:(Z>(_E妚ZMj5fTvSM0aTNSFjl;NjRBQL5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MujnFj;f!,Tjjjjj:7Xp}nivb?֫{?*G[XO򏶰f-'jj7nTS:Mu$ղjHlZvR-;TNj)ZVSZMj3fTvS:Lu0iT'FjlNjTjS S S S SMSMSMSZMj3fTvSMu0aTNSFj;NYH5 f!,jg4\彌we ~}:_7ᦗypuY;^OgZ>$_ NYNkA9夺VS{ȟ~/3yZ)Hay|R{ɫ:Mu$H56RTc#I5vRTjRbaaaaiiiTVSmLj3nTS:Lu4iTrR] wR] Iu 0('5TTTTTTO}ٶYnM&z˱N|~?yO2>\?ժ8<-Y>)jNS:IgrR-T?*ZvR-TK!RL5L5L5L5L5M5M5Mj5?:j?IqOy|P~S4iT'Fjl;NjRBQHH)S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5M5MΗ%;^>F@o߽~?o\f VW_j|m<-Mu0aTNR]1Iu ('G夺bR]ZMj5fT6SM0aTNS:Iu ('5|'5T@rR]1M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuQNk &Nk F9T@rS S S SMSMSG{vR *}wwO_k.5aQ^-S7fS:Lu4IkE9夺FXaI^HuGVSZ1{8Y>)j|얧:Mu4IkE9;夺FXaQnaaaiiiTVSLj3nTS:Lu4iTrR]#,wR]#,Iu$/FXjjjjjjjU(7&WZGדoxd$~anMF$_gI^-$O˻䗳$Ir;^vT/gIN S S S SMSMSMSZMj3fTvSMu0aTNSz9MrRN$'nl7M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mul7Ir;^vT/gA^HrnWyx_Ow5#.?nKEm׿r>Ǜ޽9/~ώ_;~r> endobj 4430 0 obj << /Type /Action /S /GoTo /D [9 0 R /XYZ 72.0 720.0 null] >> endobj 4431 0 obj << /Title (SystemTap Tapset Reference Manual) /Parent 4432 0 R /Next 4433 0 R /A 4430 0 R >> endobj 4434 0 obj << /Type /Action /S /GoTo /D [324 0 R /XYZ 72.0 720.0 null] >> endobj 4433 0 obj << /Title (Table of Contents) /Parent 4432 0 R /Prev 4431 0 R /Next 4435 0 R /A 4434 0 R >> endobj 4435 0 obj << /Title /Parent 4432 0 R /Prev 4433 0 R /Next 4436 0 R /A 168 0 R >> endobj 4436 0 obj << /Title /Parent 4432 0 R /Prev 4435 0 R /Next 4437 0 R /First 4438 0 R /Last 4439 0 R /Count -130 /A 171 0 R >> endobj 4438 0 obj << /Title (function::addr) /Parent 4436 0 R /Next 4440 0 R /A 174 0 R >> endobj 4440 0 obj << /Title (function::asmlinkage) /Parent 4436 0 R /Prev 4438 0 R /Next 4441 0 R /A 177 0 R >> endobj 4441 0 obj << /Title (function::backtrace) /Parent 4436 0 R /Prev 4440 0 R /Next 4442 0 R /A 180 0 R >> endobj 4442 0 obj << /Title (function::caller) /Parent 4436 0 R /Prev 4441 0 R /Next 4443 0 R /A 183 0 R >> endobj 4443 0 obj << /Title (function::caller_addr) /Parent 4436 0 R /Prev 4442 0 R /Next 4444 0 R /A 186 0 R >> endobj 4444 0 obj << /Title (function::callers) /Parent 4436 0 R /Prev 4443 0 R /Next 4445 0 R /A 189 0 R >> endobj 4445 0 obj << /Title (function::cmdline_arg) /Parent 4436 0 R /Prev 4444 0 R /Next 4446 0 R /A 192 0 R >> endobj 4446 0 obj << /Title (function::cmdline_args) /Parent 4436 0 R /Prev 4445 0 R /Next 4447 0 R /A 195 0 R >> endobj 4447 0 obj << /Title (function::cmdline_str) /Parent 4436 0 R /Prev 4446 0 R /Next 4448 0 R /A 198 0 R >> endobj 4448 0 obj << /Title (function::cpu) /Parent 4436 0 R /Prev 4447 0 R /Next 4449 0 R /A 201 0 R >> endobj 4449 0 obj << /Title (function::cpuid) /Parent 4436 0 R /Prev 4448 0 R /Next 4450 0 R /A 204 0 R >> endobj 4450 0 obj << /Title (function::current_exe_file) /Parent 4436 0 R /Prev 4449 0 R /Next 4451 0 R /A 207 0 R >> endobj 4451 0 obj << /Title (function::egid) /Parent 4436 0 R /Prev 4450 0 R /Next 4452 0 R /A 210 0 R >> endobj 4452 0 obj << /Title (function::env_var) /Parent 4436 0 R /Prev 4451 0 R /Next 4453 0 R /A 213 0 R >> endobj 4453 0 obj << /Title (function::euid) /Parent 4436 0 R /Prev 4452 0 R /Next 4454 0 R /A 216 0 R >> endobj 4454 0 obj << /Title (function::execname) /Parent 4436 0 R /Prev 4453 0 R /Next 4455 0 R /A 219 0 R >> endobj 4455 0 obj << /Title (function::fastcall) /Parent 4436 0 R /Prev 4454 0 R /Next 4456 0 R /A 222 0 R >> endobj 4456 0 obj << /Title (function::gid) /Parent 4436 0 R /Prev 4455 0 R /Next 4457 0 R /A 225 0 R >> endobj 4457 0 obj << /Title (function::int_arg) /Parent 4436 0 R /Prev 4456 0 R /Next 4458 0 R /A 228 0 R >> endobj 4458 0 obj << /Title (function::is_myproc) /Parent 4436 0 R /Prev 4457 0 R /Next 4459 0 R /A 231 0 R >> endobj 4459 0 obj << /Title (function::is_return) /Parent 4436 0 R /Prev 4458 0 R /Next 4460 0 R /A 234 0 R >> endobj 4460 0 obj << /Title (function::long_arg) /Parent 4436 0 R /Prev 4459 0 R /Next 4461 0 R /A 237 0 R >> endobj 4461 0 obj << /Title (function::longlong_arg) /Parent 4436 0 R /Prev 4460 0 R /Next 4462 0 R /A 240 0 R >> endobj 4462 0 obj << /Title (function::modname) /Parent 4436 0 R /Prev 4461 0 R /Next 4463 0 R /A 243 0 R >> endobj 4463 0 obj << /Title (function::module_name) /Parent 4436 0 R /Prev 4462 0 R /Next 4464 0 R /A 246 0 R >> endobj 4464 0 obj << /Title (function::module_size) /Parent 4436 0 R /Prev 4463 0 R /Next 4465 0 R /A 249 0 R >> endobj 4465 0 obj << /Title (function::ns_egid) /Parent 4436 0 R /Prev 4464 0 R /Next 4466 0 R /A 252 0 R >> endobj 4466 0 obj << /Title (function::ns_euid) /Parent 4436 0 R /Prev 4465 0 R /Next 4467 0 R /A 255 0 R >> endobj 4467 0 obj << /Title (function::ns_gid) /Parent 4436 0 R /Prev 4466 0 R /Next 4468 0 R /A 258 0 R >> endobj 4468 0 obj << /Title (function::ns_pgrp) /Parent 4436 0 R /Prev 4467 0 R /Next 4469 0 R /A 261 0 R >> endobj 4469 0 obj << /Title (function::ns_pid) /Parent 4436 0 R /Prev 4468 0 R /Next 4470 0 R /A 264 0 R >> endobj 4470 0 obj << /Title (function::ns_ppid) /Parent 4436 0 R /Prev 4469 0 R /Next 4471 0 R /A 267 0 R >> endobj 4471 0 obj << /Title (function::ns_sid) /Parent 4436 0 R /Prev 4470 0 R /Next 4472 0 R /A 270 0 R >> endobj 4472 0 obj << /Title (function::ns_tid) /Parent 4436 0 R /Prev 4471 0 R /Next 4473 0 R /A 273 0 R >> endobj 4473 0 obj << /Title (function::ns_uid) /Parent 4436 0 R /Prev 4472 0 R /Next 4474 0 R /A 276 0 R >> endobj 4474 0 obj << /Title (function::pexecname) /Parent 4436 0 R /Prev 4473 0 R /Next 4475 0 R /A 279 0 R >> endobj 4475 0 obj << /Title (function::pgrp) /Parent 4436 0 R /Prev 4474 0 R /Next 4476 0 R /A 282 0 R >> endobj 4476 0 obj << /Title (function::pid) /Parent 4436 0 R /Prev 4475 0 R /Next 4477 0 R /A 285 0 R >> endobj 4477 0 obj << /Title (function::pid2execname) /Parent 4436 0 R /Prev 4476 0 R /Next 4478 0 R /A 288 0 R >> endobj 4478 0 obj << /Title (function::pid2task) /Parent 4436 0 R /Prev 4477 0 R /Next 4479 0 R /A 291 0 R >> endobj 4479 0 obj << /Title (function::pn) /Parent 4436 0 R /Prev 4478 0 R /Next 4480 0 R /A 294 0 R >> endobj 4480 0 obj << /Title (function::pnlabel) /Parent 4436 0 R /Prev 4479 0 R /Next 4481 0 R /A 297 0 R >> endobj 4481 0 obj << /Title (function::pointer_arg) /Parent 4436 0 R /Prev 4480 0 R /Next 4482 0 R /A 300 0 R >> endobj 4482 0 obj << /Title (function::pp) /Parent 4436 0 R /Prev 4481 0 R /Next 4483 0 R /A 303 0 R >> endobj 4483 0 obj << /Title (function::ppfunc) /Parent 4436 0 R /Prev 4482 0 R /Next 4484 0 R /A 306 0 R >> endobj 4484 0 obj << /Title (function::ppid) /Parent 4436 0 R /Prev 4483 0 R /Next 4485 0 R /A 309 0 R >> endobj 4485 0 obj << /Title (function::print_backtrace) /Parent 4436 0 R /Prev 4484 0 R /Next 4486 0 R /A 312 0 R >> endobj 4486 0 obj << /Title (function::print_backtrace_fileline) /Parent 4436 0 R /Prev 4485 0 R /Next 4487 0 R /A 315 0 R >> endobj 4487 0 obj << /Title (function::print_regs) /Parent 4436 0 R /Prev 4486 0 R /Next 4488 0 R /A 318 0 R >> endobj 4488 0 obj << /Title (function::print_stack) /Parent 4436 0 R /Prev 4487 0 R /Next 4489 0 R /A 487 0 R >> endobj 4489 0 obj << /Title (function::print_syms) /Parent 4436 0 R /Prev 4488 0 R /Next 4490 0 R /A 490 0 R >> endobj 4490 0 obj << /Title (function::print_ubacktrace) /Parent 4436 0 R /Prev 4489 0 R /Next 4491 0 R /A 493 0 R >> endobj 4491 0 obj << /Title (function::print_ubacktrace_brief) /Parent 4436 0 R /Prev 4490 0 R /Next 4492 0 R /A 496 0 R >> endobj 4492 0 obj << /Title (function::print_ubacktrace_fileline) /Parent 4436 0 R /Prev 4491 0 R /Next 4493 0 R /A 499 0 R >> endobj 4493 0 obj << /Title (function::print_ustack) /Parent 4436 0 R /Prev 4492 0 R /Next 4494 0 R /A 502 0 R >> endobj 4494 0 obj << /Title (function::print_usyms) /Parent 4436 0 R /Prev 4493 0 R /Next 4495 0 R /A 505 0 R >> endobj 4495 0 obj << /Title (function::probe_type) /Parent 4436 0 R /Prev 4494 0 R /Next 4496 0 R /A 508 0 R >> endobj 4496 0 obj << /Title (function::probefunc) /Parent 4436 0 R /Prev 4495 0 R /Next 4497 0 R /A 511 0 R >> endobj 4497 0 obj << /Title (function::probemod) /Parent 4436 0 R /Prev 4496 0 R /Next 4498 0 R /A 514 0 R >> endobj 4498 0 obj << /Title (function::pstrace) /Parent 4436 0 R /Prev 4497 0 R /Next 4499 0 R /A 517 0 R >> endobj 4499 0 obj << /Title (function::register) /Parent 4436 0 R /Prev 4498 0 R /Next 4500 0 R /A 520 0 R >> endobj 4500 0 obj << /Title (function::registers_valid) /Parent 4436 0 R /Prev 4499 0 R /Next 4501 0 R /A 523 0 R >> endobj 4501 0 obj << /Title (function::regparm) /Parent 4436 0 R /Prev 4500 0 R /Next 4502 0 R /A 526 0 R >> endobj 4502 0 obj << /Title (function::remote_id) /Parent 4436 0 R /Prev 4501 0 R /Next 4503 0 R /A 529 0 R >> endobj 4503 0 obj << /Title (function::remote_uri) /Parent 4436 0 R /Prev 4502 0 R /Next 4504 0 R /A 532 0 R >> endobj 4504 0 obj << /Title (function::s32_arg) /Parent 4436 0 R /Prev 4503 0 R /Next 4505 0 R /A 535 0 R >> endobj 4505 0 obj << /Title (function::s64_arg) /Parent 4436 0 R /Prev 4504 0 R /Next 4506 0 R /A 538 0 R >> endobj 4506 0 obj << /Title (function::sid) /Parent 4436 0 R /Prev 4505 0 R /Next 4507 0 R /A 541 0 R >> endobj 4507 0 obj << /Title (function::sprint_backtrace) /Parent 4436 0 R /Prev 4506 0 R /Next 4508 0 R /A 544 0 R >> endobj 4508 0 obj << /Title (function::sprint_stack) /Parent 4436 0 R /Prev 4507 0 R /Next 4509 0 R /A 547 0 R >> endobj 4509 0 obj << /Title (function::sprint_syms) /Parent 4436 0 R /Prev 4508 0 R /Next 4510 0 R /A 550 0 R >> endobj 4510 0 obj << /Title (function::sprint_ubacktrace) /Parent 4436 0 R /Prev 4509 0 R /Next 4511 0 R /A 553 0 R >> endobj 4511 0 obj << /Title (function::sprint_ustack) /Parent 4436 0 R /Prev 4510 0 R /Next 4512 0 R /A 556 0 R >> endobj 4512 0 obj << /Title (function::sprint_usyms) /Parent 4436 0 R /Prev 4511 0 R /Next 4513 0 R /A 559 0 R >> endobj 4513 0 obj << /Title (function::stack) /Parent 4436 0 R /Prev 4512 0 R /Next 4514 0 R /A 562 0 R >> endobj 4514 0 obj << /Title (function::stack_size) /Parent 4436 0 R /Prev 4513 0 R /Next 4515 0 R /A 565 0 R >> endobj 4515 0 obj << /Title (function::stack_unused) /Parent 4436 0 R /Prev 4514 0 R /Next 4516 0 R /A 568 0 R >> endobj 4516 0 obj << /Title (function::stack_used) /Parent 4436 0 R /Prev 4515 0 R /Next 4517 0 R /A 571 0 R >> endobj 4517 0 obj << /Title (function::stp_pid) /Parent 4436 0 R /Prev 4516 0 R /Next 4518 0 R /A 574 0 R >> endobj 4518 0 obj << /Title (function::symdata) /Parent 4436 0 R /Prev 4517 0 R /Next 4519 0 R /A 577 0 R >> endobj 4519 0 obj << /Title (function::symfile) /Parent 4436 0 R /Prev 4518 0 R /Next 4520 0 R /A 580 0 R >> endobj 4520 0 obj << /Title (function::symfileline) /Parent 4436 0 R /Prev 4519 0 R /Next 4521 0 R /A 583 0 R >> endobj 4521 0 obj << /Title (function::symline) /Parent 4436 0 R /Prev 4520 0 R /Next 4522 0 R /A 586 0 R >> endobj 4522 0 obj << /Title (function::symname) /Parent 4436 0 R /Prev 4521 0 R /Next 4523 0 R /A 589 0 R >> endobj 4523 0 obj << /Title (function::target) /Parent 4436 0 R /Prev 4522 0 R /Next 4524 0 R /A 592 0 R >> endobj 4524 0 obj << /Title (function::task_ancestry) /Parent 4436 0 R /Prev 4523 0 R /Next 4525 0 R /A 595 0 R >> endobj 4525 0 obj << /Title (function::task_backtrace) /Parent 4436 0 R /Prev 4524 0 R /Next 4526 0 R /A 598 0 R >> endobj 4526 0 obj << /Title (function::task_cpu) /Parent 4436 0 R /Prev 4525 0 R /Next 4527 0 R /A 601 0 R >> endobj 4527 0 obj << /Title (function::task_current) /Parent 4436 0 R /Prev 4526 0 R /Next 4528 0 R /A 604 0 R >> endobj 4528 0 obj << /Title (function::task_cwd_path) /Parent 4436 0 R /Prev 4527 0 R /Next 4529 0 R /A 607 0 R >> endobj 4529 0 obj << /Title (function::task_egid) /Parent 4436 0 R /Prev 4528 0 R /Next 4530 0 R /A 610 0 R >> endobj 4530 0 obj << /Title (function::task_euid) /Parent 4436 0 R /Prev 4529 0 R /Next 4531 0 R /A 613 0 R >> endobj 4531 0 obj << /Title (function::task_exe_file) /Parent 4436 0 R /Prev 4530 0 R /Next 4532 0 R /A 616 0 R >> endobj 4532 0 obj << /Title (function::task_execname) /Parent 4436 0 R /Prev 4531 0 R /Next 4533 0 R /A 619 0 R >> endobj 4533 0 obj << /Title (function::task_fd_lookup) /Parent 4436 0 R /Prev 4532 0 R /Next 4534 0 R /A 622 0 R >> endobj 4534 0 obj << /Title (function::task_gid) /Parent 4436 0 R /Prev 4533 0 R /Next 4535 0 R /A 625 0 R >> endobj 4535 0 obj << /Title (function::task_max_file_handles) /Parent 4436 0 R /Prev 4534 0 R /Next 4536 0 R /A 628 0 R >> endobj 4536 0 obj << /Title (function::task_nice) /Parent 4436 0 R /Prev 4535 0 R /Next 4537 0 R /A 631 0 R >> endobj 4537 0 obj << /Title (function::task_ns_egid) /Parent 4436 0 R /Prev 4536 0 R /Next 4538 0 R /A 634 0 R >> endobj 4538 0 obj << /Title (function::task_ns_euid) /Parent 4436 0 R /Prev 4537 0 R /Next 4539 0 R /A 637 0 R >> endobj 4539 0 obj << /Title (function::task_ns_gid) /Parent 4436 0 R /Prev 4538 0 R /Next 4540 0 R /A 640 0 R >> endobj 4540 0 obj << /Title (function::task_ns_pid) /Parent 4436 0 R /Prev 4539 0 R /Next 4541 0 R /A 643 0 R >> endobj 4541 0 obj << /Title (function::task_ns_tid) /Parent 4436 0 R /Prev 4540 0 R /Next 4542 0 R /A 646 0 R >> endobj 4542 0 obj << /Title (function::task_ns_uid) /Parent 4436 0 R /Prev 4541 0 R /Next 4543 0 R /A 815 0 R >> endobj 4543 0 obj << /Title (function::task_open_file_handles) /Parent 4436 0 R /Prev 4542 0 R /Next 4544 0 R /A 818 0 R >> endobj 4544 0 obj << /Title (function::task_parent) /Parent 4436 0 R /Prev 4543 0 R /Next 4545 0 R /A 821 0 R >> endobj 4545 0 obj << /Title (function::task_pid) /Parent 4436 0 R /Prev 4544 0 R /Next 4546 0 R /A 824 0 R >> endobj 4546 0 obj << /Title (function::task_prio) /Parent 4436 0 R /Prev 4545 0 R /Next 4547 0 R /A 827 0 R >> endobj 4547 0 obj << /Title (function::task_state) /Parent 4436 0 R /Prev 4546 0 R /Next 4548 0 R /A 830 0 R >> endobj 4548 0 obj << /Title (function::task_tid) /Parent 4436 0 R /Prev 4547 0 R /Next 4549 0 R /A 833 0 R >> endobj 4549 0 obj << /Title (function::task_uid) /Parent 4436 0 R /Prev 4548 0 R /Next 4550 0 R /A 836 0 R >> endobj 4550 0 obj << /Title (function::tid) /Parent 4436 0 R /Prev 4549 0 R /Next 4551 0 R /A 839 0 R >> endobj 4551 0 obj << /Title (function::u32_arg) /Parent 4436 0 R /Prev 4550 0 R /Next 4552 0 R /A 842 0 R >> endobj 4552 0 obj << /Title (function::u64_arg) /Parent 4436 0 R /Prev 4551 0 R /Next 4553 0 R /A 845 0 R >> endobj 4553 0 obj << /Title (function::u_register) /Parent 4436 0 R /Prev 4552 0 R /Next 4554 0 R /A 848 0 R >> endobj 4554 0 obj << /Title (function::uaddr) /Parent 4436 0 R /Prev 4553 0 R /Next 4555 0 R /A 851 0 R >> endobj 4555 0 obj << /Title (function::ubacktrace) /Parent 4436 0 R /Prev 4554 0 R /Next 4556 0 R /A 854 0 R >> endobj 4556 0 obj << /Title (function::ucallers) /Parent 4436 0 R /Prev 4555 0 R /Next 4557 0 R /A 857 0 R >> endobj 4557 0 obj << /Title (function::uid) /Parent 4436 0 R /Prev 4556 0 R /Next 4558 0 R /A 860 0 R >> endobj 4558 0 obj << /Title (function::uint_arg) /Parent 4436 0 R /Prev 4557 0 R /Next 4559 0 R /A 863 0 R >> endobj 4559 0 obj << /Title (function::ulong_arg) /Parent 4436 0 R /Prev 4558 0 R /Next 4560 0 R /A 866 0 R >> endobj 4560 0 obj << /Title (function::ulonglong_arg) /Parent 4436 0 R /Prev 4559 0 R /Next 4561 0 R /A 869 0 R >> endobj 4561 0 obj << /Title (function::umodname) /Parent 4436 0 R /Prev 4560 0 R /Next 4562 0 R /A 872 0 R >> endobj 4562 0 obj << /Title (function::user_mode) /Parent 4436 0 R /Prev 4561 0 R /Next 4563 0 R /A 875 0 R >> endobj 4563 0 obj << /Title (function::ustack) /Parent 4436 0 R /Prev 4562 0 R /Next 4564 0 R /A 878 0 R >> endobj 4564 0 obj << /Title (function::usymdata) /Parent 4436 0 R /Prev 4563 0 R /Next 4565 0 R /A 881 0 R >> endobj 4565 0 obj << /Title (function::usymfile) /Parent 4436 0 R /Prev 4564 0 R /Next 4566 0 R /A 884 0 R >> endobj 4566 0 obj << /Title (function::usymfileline) /Parent 4436 0 R /Prev 4565 0 R /Next 4567 0 R /A 887 0 R >> endobj 4567 0 obj << /Title (function::usymline) /Parent 4436 0 R /Prev 4566 0 R /Next 4439 0 R /A 890 0 R >> endobj 4439 0 obj << /Title (function::usymname) /Parent 4436 0 R /Prev 4567 0 R /A 893 0 R >> endobj 4437 0 obj << /Title /Parent 4432 0 R /Prev 4436 0 R /Next 4568 0 R /First 4569 0 R /Last 4570 0 R /Count -23 /A 896 0 R >> endobj 4569 0 obj << /Title (function::HZ) /Parent 4437 0 R /Next 4571 0 R /A 899 0 R >> endobj 4571 0 obj << /Title (function::cpu_clock_ms) /Parent 4437 0 R /Prev 4569 0 R /Next 4572 0 R /A 902 0 R >> endobj 4572 0 obj << /Title (function::cpu_clock_ns) /Parent 4437 0 R /Prev 4571 0 R /Next 4573 0 R /A 905 0 R >> endobj 4573 0 obj << /Title (function::cpu_clock_s) /Parent 4437 0 R /Prev 4572 0 R /Next 4574 0 R /A 908 0 R >> endobj 4574 0 obj << /Title (function::cpu_clock_us) /Parent 4437 0 R /Prev 4573 0 R /Next 4575 0 R /A 911 0 R >> endobj 4575 0 obj << /Title (function::delete_stopwatch) /Parent 4437 0 R /Prev 4574 0 R /Next 4576 0 R /A 914 0 R >> endobj 4576 0 obj << /Title (function::get_cycles) /Parent 4437 0 R /Prev 4575 0 R /Next 4577 0 R /A 917 0 R >> endobj 4577 0 obj << /Title (function::gettimeofday_ms) /Parent 4437 0 R /Prev 4576 0 R /Next 4578 0 R /A 920 0 R >> endobj 4578 0 obj << /Title (function::gettimeofday_ns) /Parent 4437 0 R /Prev 4577 0 R /Next 4579 0 R /A 923 0 R >> endobj 4579 0 obj << /Title (function::gettimeofday_s) /Parent 4437 0 R /Prev 4578 0 R /Next 4580 0 R /A 926 0 R >> endobj 4580 0 obj << /Title (function::gettimeofday_us) /Parent 4437 0 R /Prev 4579 0 R /Next 4581 0 R /A 929 0 R >> endobj 4581 0 obj << /Title (function::jiffies) /Parent 4437 0 R /Prev 4580 0 R /Next 4582 0 R /A 932 0 R >> endobj 4582 0 obj << /Title (function::ktime_get_ns) /Parent 4437 0 R /Prev 4581 0 R /Next 4583 0 R /A 935 0 R >> endobj 4583 0 obj << /Title (function::local_clock_ms) /Parent 4437 0 R /Prev 4582 0 R /Next 4584 0 R /A 938 0 R >> endobj 4584 0 obj << /Title (function::local_clock_ns) /Parent 4437 0 R /Prev 4583 0 R /Next 4585 0 R /A 941 0 R >> endobj 4585 0 obj << /Title (function::local_clock_s) /Parent 4437 0 R /Prev 4584 0 R /Next 4586 0 R /A 944 0 R >> endobj 4586 0 obj << /Title (function::local_clock_us) /Parent 4437 0 R /Prev 4585 0 R /Next 4587 0 R /A 947 0 R >> endobj 4587 0 obj << /Title (function::read_stopwatch_ms) /Parent 4437 0 R /Prev 4586 0 R /Next 4588 0 R /A 950 0 R >> endobj 4588 0 obj << /Title (function::read_stopwatch_ns) /Parent 4437 0 R /Prev 4587 0 R /Next 4589 0 R /A 953 0 R >> endobj 4589 0 obj << /Title (function::read_stopwatch_s) /Parent 4437 0 R /Prev 4588 0 R /Next 4590 0 R /A 956 0 R >> endobj 4590 0 obj << /Title (function::read_stopwatch_us) /Parent 4437 0 R /Prev 4589 0 R /Next 4591 0 R /A 959 0 R >> endobj 4591 0 obj << /Title (function::start_stopwatch) /Parent 4437 0 R /Prev 4590 0 R /Next 4570 0 R /A 962 0 R >> endobj 4570 0 obj << /Title (function::stop_stopwatch) /Parent 4437 0 R /Prev 4591 0 R /A 965 0 R >> endobj 4568 0 obj << /Title /Parent 4432 0 R /Prev 4437 0 R /Next 4592 0 R /First 4593 0 R /Last 4594 0 R /Count -4 /A 968 0 R >> endobj 4593 0 obj << /Title (function::ctime) /Parent 4568 0 R /Next 4595 0 R /A 971 0 R >> endobj 4595 0 obj << /Title (function::tz_ctime) /Parent 4568 0 R /Prev 4593 0 R /Next 4596 0 R /A 974 0 R >> endobj 4596 0 obj << /Title (function::tz_gmtoff) /Parent 4568 0 R /Prev 4595 0 R /Next 4594 0 R /A 1143 0 R >> endobj 4594 0 obj << /Title (function::tz_name) /Parent 4568 0 R /Prev 4596 0 R /A 1146 0 R >> endobj 4592 0 obj << /Title /Parent 4432 0 R /Prev 4568 0 R /Next 4597 0 R /First 4598 0 R /Last 4598 0 R /Count -1 /A 1149 0 R >> endobj 4598 0 obj << /Title (function::system) /Parent 4592 0 R /A 1152 0 R >> endobj 4597 0 obj << /Title /Parent 4432 0 R /Prev 4592 0 R /Next 4599 0 R /First 4600 0 R /Last 4601 0 R /Count -25 /A 1155 0 R >> endobj 4600 0 obj << /Title (function::addr_to_node) /Parent 4597 0 R /Next 4602 0 R /A 1158 0 R >> endobj 4602 0 obj << /Title (function::bytes_to_string) /Parent 4597 0 R /Prev 4600 0 R /Next 4603 0 R /A 1161 0 R >> endobj 4603 0 obj << /Title (function::mem_page_size) /Parent 4597 0 R /Prev 4602 0 R /Next 4604 0 R /A 1164 0 R >> endobj 4604 0 obj << /Title (function::pages_to_string) /Parent 4597 0 R /Prev 4603 0 R /Next 4605 0 R /A 1167 0 R >> endobj 4605 0 obj << /Title (function::proc_mem_data) /Parent 4597 0 R /Prev 4604 0 R /Next 4606 0 R /A 1170 0 R >> endobj 4606 0 obj << /Title (function::proc_mem_rss) /Parent 4597 0 R /Prev 4605 0 R /Next 4607 0 R /A 1173 0 R >> endobj 4607 0 obj << /Title (function::proc_mem_shr) /Parent 4597 0 R /Prev 4606 0 R /Next 4608 0 R /A 1176 0 R >> endobj 4608 0 obj << /Title (function::proc_mem_size) /Parent 4597 0 R /Prev 4607 0 R /Next 4609 0 R /A 1179 0 R >> endobj 4609 0 obj << /Title (function::proc_mem_string) /Parent 4597 0 R /Prev 4608 0 R /Next 4610 0 R /A 1182 0 R >> endobj 4610 0 obj << /Title (function::proc_mem_txt) /Parent 4597 0 R /Prev 4609 0 R /Next 4611 0 R /A 1185 0 R >> endobj 4611 0 obj << /Title (function::vm_fault_contains) /Parent 4597 0 R /Prev 4610 0 R /Next 4612 0 R /A 1188 0 R >> endobj 4612 0 obj << /Title (probe::vm.brk) /Parent 4597 0 R /Prev 4611 0 R /Next 4613 0 R /A 1191 0 R >> endobj 4613 0 obj << /Title (probe::vm.kfree) /Parent 4597 0 R /Prev 4612 0 R /Next 4614 0 R /A 1194 0 R >> endobj 4614 0 obj << /Title (probe::vm.kmalloc) /Parent 4597 0 R /Prev 4613 0 R /Next 4615 0 R /A 1197 0 R >> endobj 4615 0 obj << /Title (probe::vm.kmalloc_node) /Parent 4597 0 R /Prev 4614 0 R /Next 4616 0 R /A 1200 0 R >> endobj 4616 0 obj << /Title (probe::vm.kmem_cache_alloc) /Parent 4597 0 R /Prev 4615 0 R /Next 4617 0 R /A 1203 0 R >> endobj 4617 0 obj << /Title (probe::vm.kmem_cache_alloc_node) /Parent 4597 0 R /Prev 4616 0 R /Next 4618 0 R /A 1206 0 R >> endobj 4618 0 obj << /Title (probe::vm.kmem_cache_free) /Parent 4597 0 R /Prev 4617 0 R /Next 4619 0 R /A 1209 0 R >> endobj 4619 0 obj << /Title (probe::vm.mmap) /Parent 4597 0 R /Prev 4618 0 R /Next 4620 0 R /A 1212 0 R >> endobj 4620 0 obj << /Title (probe::vm.munmap) /Parent 4597 0 R /Prev 4619 0 R /Next 4621 0 R /A 1215 0 R >> endobj 4621 0 obj << /Title (probe::vm.oom_kill) /Parent 4597 0 R /Prev 4620 0 R /Next 4622 0 R /A 1218 0 R >> endobj 4622 0 obj << /Title (probe::vm.pagefault) /Parent 4597 0 R /Prev 4621 0 R /Next 4623 0 R /A 1221 0 R >> endobj 4623 0 obj << /Title (probe::vm.pagefault.return) /Parent 4597 0 R /Prev 4622 0 R /Next 4624 0 R /A 1224 0 R >> endobj 4624 0 obj << /Title (probe::vm.write_shared) /Parent 4597 0 R /Prev 4623 0 R /Next 4601 0 R /A 1227 0 R >> endobj 4601 0 obj << /Title (probe::vm.write_shared_copy) /Parent 4597 0 R /Prev 4624 0 R /A 1230 0 R >> endobj 4599 0 obj << /Title /Parent 4432 0 R /Prev 4597 0 R /Next 4625 0 R /First 4626 0 R /Last 4627 0 R /Count -11 /A 1233 0 R >> endobj 4626 0 obj << /Title (function::cputime_to_msecs) /Parent 4599 0 R /Next 4628 0 R /A 1236 0 R >> endobj 4628 0 obj << /Title (function::cputime_to_string) /Parent 4599 0 R /Prev 4626 0 R /Next 4629 0 R /A 1239 0 R >> endobj 4629 0 obj << /Title (function::cputime_to_usecs) /Parent 4599 0 R /Prev 4628 0 R /Next 4630 0 R /A 1242 0 R >> endobj 4630 0 obj << /Title (function::msecs_to_string) /Parent 4599 0 R /Prev 4629 0 R /Next 4631 0 R /A 1245 0 R >> endobj 4631 0 obj << /Title (function::nsecs_to_string) /Parent 4599 0 R /Prev 4630 0 R /Next 4632 0 R /A 1248 0 R >> endobj 4632 0 obj << /Title (function::task_start_time) /Parent 4599 0 R /Prev 4631 0 R /Next 4633 0 R /A 1251 0 R >> endobj 4633 0 obj << /Title (function::task_stime) /Parent 4599 0 R /Prev 4632 0 R /Next 4634 0 R /A 1254 0 R >> endobj 4634 0 obj << /Title (function::task_time_string) /Parent 4599 0 R /Prev 4633 0 R /Next 4635 0 R /A 1257 0 R >> endobj 4635 0 obj << /Title (function::task_time_string_tid) /Parent 4599 0 R /Prev 4634 0 R /Next 4636 0 R /A 1260 0 R >> endobj 4636 0 obj << /Title (function::task_utime) /Parent 4599 0 R /Prev 4635 0 R /Next 4627 0 R /A 1263 0 R >> endobj 4627 0 obj << /Title (function::usecs_to_string) /Parent 4599 0 R /Prev 4636 0 R /A 1266 0 R >> endobj 4625 0 obj << /Title /Parent 4432 0 R /Prev 4599 0 R /Next 4637 0 R /First 4638 0 R /Last 4639 0 R /Count -16 /A 1269 0 R >> endobj 4638 0 obj << /Title (probe::scheduler.balance) /Parent 4625 0 R /Next 4640 0 R /A 1272 0 R >> endobj 4640 0 obj << /Title (probe::scheduler.cpu_off) /Parent 4625 0 R /Prev 4638 0 R /Next 4641 0 R /A 1275 0 R >> endobj 4641 0 obj << /Title (probe::scheduler.cpu_on) /Parent 4625 0 R /Prev 4640 0 R /Next 4642 0 R /A 1278 0 R >> endobj 4642 0 obj << /Title (probe::scheduler.ctxswitch) /Parent 4625 0 R /Prev 4641 0 R /Next 4643 0 R /A 1281 0 R >> endobj 4643 0 obj << /Title (probe::scheduler.kthread_stop) /Parent 4625 0 R /Prev 4642 0 R /Next 4644 0 R /A 1284 0 R >> endobj 4644 0 obj << /Title (probe::scheduler.kthread_stop.return) /Parent 4625 0 R /Prev 4643 0 R /Next 4645 0 R /A 1287 0 R >> endobj 4645 0 obj << /Title (probe::scheduler.migrate) /Parent 4625 0 R /Prev 4644 0 R /Next 4646 0 R /A 1290 0 R >> endobj 4646 0 obj << /Title (probe::scheduler.process_exit) /Parent 4625 0 R /Prev 4645 0 R /Next 4647 0 R /A 1293 0 R >> endobj 4647 0 obj << /Title (probe::scheduler.process_fork) /Parent 4625 0 R /Prev 4646 0 R /Next 4648 0 R /A 1296 0 R >> endobj 4648 0 obj << /Title (probe::scheduler.process_free) /Parent 4625 0 R /Prev 4647 0 R /Next 4649 0 R /A 1299 0 R >> endobj 4649 0 obj << /Title (probe::scheduler.process_wait) /Parent 4625 0 R /Prev 4648 0 R /Next 4650 0 R /A 1302 0 R >> endobj 4650 0 obj << /Title (probe::scheduler.signal_send) /Parent 4625 0 R /Prev 4649 0 R /Next 4651 0 R /A 1471 0 R >> endobj 4651 0 obj << /Title (probe::scheduler.tick) /Parent 4625 0 R /Prev 4650 0 R /Next 4652 0 R /A 1474 0 R >> endobj 4652 0 obj << /Title (probe::scheduler.wait_task) /Parent 4625 0 R /Prev 4651 0 R /Next 4653 0 R /A 1477 0 R >> endobj 4653 0 obj << /Title (probe::scheduler.wakeup) /Parent 4625 0 R /Prev 4652 0 R /Next 4639 0 R /A 1480 0 R >> endobj 4639 0 obj << /Title (probe::scheduler.wakeup_new) /Parent 4625 0 R /Prev 4653 0 R /A 1483 0 R >> endobj 4637 0 obj << /Title /Parent 4432 0 R /Prev 4625 0 R /Next 4654 0 R /First 4655 0 R /Last 4656 0 R /Count -18 /A 1486 0 R >> endobj 4655 0 obj << /Title (probe::ioblock.end) /Parent 4637 0 R /Next 4657 0 R /A 1489 0 R >> endobj 4657 0 obj << /Title (probe::ioblock.request) /Parent 4637 0 R /Prev 4655 0 R /Next 4658 0 R /A 1492 0 R >> endobj 4658 0 obj << /Title (probe::ioblock_trace.bounce) /Parent 4637 0 R /Prev 4657 0 R /Next 4659 0 R /A 1495 0 R >> endobj 4659 0 obj << /Title (probe::ioblock_trace.end) /Parent 4637 0 R /Prev 4658 0 R /Next 4660 0 R /A 1498 0 R >> endobj 4660 0 obj << /Title (probe::ioblock_trace.request) /Parent 4637 0 R /Prev 4659 0 R /Next 4661 0 R /A 1501 0 R >> endobj 4661 0 obj << /Title (probe::ioscheduler.elv_add_request) /Parent 4637 0 R /Prev 4660 0 R /Next 4662 0 R /A 1504 0 R >> endobj 4662 0 obj << /Title (probe::ioscheduler.elv_add_request.kp) /Parent 4637 0 R /Prev 4661 0 R /Next 4663 0 R /A 1507 0 R >> endobj 4663 0 obj << /Title (probe::ioscheduler.elv_add_request.tp) /Parent 4637 0 R /Prev 4662 0 R /Next 4664 0 R /A 1510 0 R >> endobj 4664 0 obj << /Title (probe::ioscheduler.elv_completed_request) /Parent 4637 0 R /Prev 4663 0 R /Next 4665 0 R /A 1513 0 R >> endobj 4665 0 obj << /Title (probe::ioscheduler.elv_next_request) /Parent 4637 0 R /Prev 4664 0 R /Next 4666 0 R /A 1516 0 R >> endobj 4666 0 obj << /Title (probe::ioscheduler.elv_next_request.return) /Parent 4637 0 R /Prev 4665 0 R /Next 4667 0 R /A 1519 0 R >> endobj 4667 0 obj << /Title (probe::ioscheduler_trace.elv_abort_request) /Parent 4637 0 R /Prev 4666 0 R /Next 4668 0 R /A 1522 0 R >> endobj 4668 0 obj << /Title (probe::ioscheduler_trace.elv_completed_request) /Parent 4637 0 R /Prev 4667 0 R /Next 4669 0 R /A 1525 0 R >> endobj 4669 0 obj << /Title (probe::ioscheduler_trace.elv_issue_request) /Parent 4637 0 R /Prev 4668 0 R /Next 4670 0 R /A 1528 0 R >> endobj 4670 0 obj << /Title (probe::ioscheduler_trace.elv_requeue_request) /Parent 4637 0 R /Prev 4669 0 R /Next 4671 0 R /A 1531 0 R >> endobj 4671 0 obj << /Title (probe::ioscheduler_trace.plug) /Parent 4637 0 R /Prev 4670 0 R /Next 4672 0 R /A 1534 0 R >> endobj 4672 0 obj << /Title (probe::ioscheduler_trace.unplug_io) /Parent 4637 0 R /Prev 4671 0 R /Next 4656 0 R /A 1537 0 R >> endobj 4656 0 obj << /Title (probe::ioscheduler_trace.unplug_timer) /Parent 4637 0 R /Prev 4672 0 R /A 1540 0 R >> endobj 4654 0 obj << /Title /Parent 4432 0 R /Prev 4637 0 R /Next 4673 0 R /First 4674 0 R /Last 4675 0 R /Count -6 /A 1543 0 R >> endobj 4674 0 obj << /Title (probe::scsi.iocompleted) /Parent 4654 0 R /Next 4676 0 R /A 1546 0 R >> endobj 4676 0 obj << /Title (probe::scsi.iodispatching) /Parent 4654 0 R /Prev 4674 0 R /Next 4677 0 R /A 1549 0 R >> endobj 4677 0 obj << /Title (probe::scsi.iodone) /Parent 4654 0 R /Prev 4676 0 R /Next 4678 0 R /A 1552 0 R >> endobj 4678 0 obj << /Title (probe::scsi.ioentry) /Parent 4654 0 R /Prev 4677 0 R /Next 4679 0 R /A 1555 0 R >> endobj 4679 0 obj << /Title (probe::scsi.ioexecute) /Parent 4654 0 R /Prev 4678 0 R /Next 4675 0 R /A 1558 0 R >> endobj 4675 0 obj << /Title (probe::scsi.set_state) /Parent 4654 0 R /Prev 4679 0 R /A 1561 0 R >> endobj 4673 0 obj << /Title /Parent 4432 0 R /Prev 4654 0 R /Next 4680 0 R /First 4681 0 R /Last 4682 0 R /Count -11 /A 1564 0 R >> endobj 4681 0 obj << /Title (probe::tty.init) /Parent 4673 0 R /Next 4683 0 R /A 1567 0 R >> endobj 4683 0 obj << /Title (probe::tty.ioctl) /Parent 4673 0 R /Prev 4681 0 R /Next 4684 0 R /A 1570 0 R >> endobj 4684 0 obj << /Title (probe::tty.open) /Parent 4673 0 R /Prev 4683 0 R /Next 4685 0 R /A 1573 0 R >> endobj 4685 0 obj << /Title (probe::tty.poll) /Parent 4673 0 R /Prev 4684 0 R /Next 4686 0 R /A 1576 0 R >> endobj 4686 0 obj << /Title (probe::tty.read) /Parent 4673 0 R /Prev 4685 0 R /Next 4687 0 R /A 1579 0 R >> endobj 4687 0 obj << /Title (probe::tty.receive) /Parent 4673 0 R /Prev 4686 0 R /Next 4688 0 R /A 1582 0 R >> endobj 4688 0 obj << /Title (probe::tty.register) /Parent 4673 0 R /Prev 4687 0 R /Next 4689 0 R /A 1585 0 R >> endobj 4689 0 obj << /Title (probe::tty.release) /Parent 4673 0 R /Prev 4688 0 R /Next 4690 0 R /A 1588 0 R >> endobj 4690 0 obj << /Title (probe::tty.resize) /Parent 4673 0 R /Prev 4689 0 R /Next 4691 0 R /A 1591 0 R >> endobj 4691 0 obj << /Title (probe::tty.unregister) /Parent 4673 0 R /Prev 4690 0 R /Next 4682 0 R /A 1594 0 R >> endobj 4682 0 obj << /Title (probe::tty.write) /Parent 4673 0 R /Prev 4691 0 R /A 1597 0 R >> endobj 4680 0 obj << /Title /Parent 4432 0 R /Prev 4673 0 R /Next 4692 0 R /First 4693 0 R /Last 4694 0 R /Count -8 /A 1600 0 R >> endobj 4693 0 obj << /Title (probe::irq_handler.entry) /Parent 4680 0 R /Next 4695 0 R /A 1603 0 R >> endobj 4695 0 obj << /Title (probe::irq_handler.exit) /Parent 4680 0 R /Prev 4693 0 R /Next 4696 0 R /A 1606 0 R >> endobj 4696 0 obj << /Title (probe::softirq.entry) /Parent 4680 0 R /Prev 4695 0 R /Next 4697 0 R /A 1609 0 R >> endobj 4697 0 obj << /Title (probe::softirq.exit) /Parent 4680 0 R /Prev 4696 0 R /Next 4698 0 R /A 1612 0 R >> endobj 4698 0 obj << /Title (probe::workqueue.create) /Parent 4680 0 R /Prev 4697 0 R /Next 4699 0 R /A 1615 0 R >> endobj 4699 0 obj << /Title (probe::workqueue.destroy) /Parent 4680 0 R /Prev 4698 0 R /Next 4700 0 R /A 1618 0 R >> endobj 4700 0 obj << /Title (probe::workqueue.execute) /Parent 4680 0 R /Prev 4699 0 R /Next 4694 0 R /A 1621 0 R >> endobj 4694 0 obj << /Title (probe::workqueue.insert) /Parent 4680 0 R /Prev 4700 0 R /A 1624 0 R >> endobj 4692 0 obj << /Title /Parent 4432 0 R /Prev 4680 0 R /Next 4701 0 R /First 4702 0 R /Last 4703 0 R /Count -68 /A 1627 0 R >> endobj 4702 0 obj << /Title (function::format_ipaddr) /Parent 4692 0 R /Next 4704 0 R /A 1630 0 R >> endobj 4704 0 obj << /Title (function::htonl) /Parent 4692 0 R /Prev 4702 0 R /Next 4705 0 R /A 1838 0 R >> endobj 4705 0 obj << /Title (function::htonll) /Parent 4692 0 R /Prev 4704 0 R /Next 4706 0 R /A 1841 0 R >> endobj 4706 0 obj << /Title (function::htons) /Parent 4692 0 R /Prev 4705 0 R /Next 4707 0 R /A 1844 0 R >> endobj 4707 0 obj << /Title (function::ip_ntop) /Parent 4692 0 R /Prev 4706 0 R /Next 4708 0 R /A 1847 0 R >> endobj 4708 0 obj << /Title (function::ntohl) /Parent 4692 0 R /Prev 4707 0 R /Next 4709 0 R /A 1850 0 R >> endobj 4709 0 obj << /Title (function::ntohll) /Parent 4692 0 R /Prev 4708 0 R /Next 4710 0 R /A 1853 0 R >> endobj 4710 0 obj << /Title (function::ntohs) /Parent 4692 0 R /Prev 4709 0 R /Next 4711 0 R /A 1856 0 R >> endobj 4711 0 obj << /Title (probe::netdev.change_mac) /Parent 4692 0 R /Prev 4710 0 R /Next 4712 0 R /A 1859 0 R >> endobj 4712 0 obj << /Title (probe::netdev.change_mtu) /Parent 4692 0 R /Prev 4711 0 R /Next 4713 0 R /A 1862 0 R >> endobj 4713 0 obj << /Title (probe::netdev.change_rx_flag) /Parent 4692 0 R /Prev 4712 0 R /Next 4714 0 R /A 1865 0 R >> endobj 4714 0 obj << /Title (probe::netdev.close) /Parent 4692 0 R /Prev 4713 0 R /Next 4715 0 R /A 1868 0 R >> endobj 4715 0 obj << /Title (probe::netdev.get_stats) /Parent 4692 0 R /Prev 4714 0 R /Next 4716 0 R /A 1871 0 R >> endobj 4716 0 obj << /Title (probe::netdev.hard_transmit) /Parent 4692 0 R /Prev 4715 0 R /Next 4717 0 R /A 1874 0 R >> endobj 4717 0 obj << /Title (probe::netdev.ioctl) /Parent 4692 0 R /Prev 4716 0 R /Next 4718 0 R /A 1877 0 R >> endobj 4718 0 obj << /Title (probe::netdev.open) /Parent 4692 0 R /Prev 4717 0 R /Next 4719 0 R /A 1880 0 R >> endobj 4719 0 obj << /Title (probe::netdev.receive) /Parent 4692 0 R /Prev 4718 0 R /Next 4720 0 R /A 1883 0 R >> endobj 4720 0 obj << /Title (probe::netdev.register) /Parent 4692 0 R /Prev 4719 0 R /Next 4721 0 R /A 1886 0 R >> endobj 4721 0 obj << /Title (probe::netdev.rx) /Parent 4692 0 R /Prev 4720 0 R /Next 4722 0 R /A 1889 0 R >> endobj 4722 0 obj << /Title (probe::netdev.set_promiscuity) /Parent 4692 0 R /Prev 4721 0 R /Next 4723 0 R /A 1892 0 R >> endobj 4723 0 obj << /Title (probe::netdev.transmit) /Parent 4692 0 R /Prev 4722 0 R /Next 4724 0 R /A 1895 0 R >> endobj 4724 0 obj << /Title (probe::netdev.unregister) /Parent 4692 0 R /Prev 4723 0 R /Next 4725 0 R /A 1898 0 R >> endobj 4725 0 obj << /Title (probe::netfilter.arp.forward) /Parent 4692 0 R /Prev 4724 0 R /Next 4726 0 R /A 1901 0 R >> endobj 4726 0 obj << /Title (probe::netfilter.arp.in) /Parent 4692 0 R /Prev 4725 0 R /Next 4727 0 R /A 1904 0 R >> endobj 4727 0 obj << /Title (probe::netfilter.arp.out) /Parent 4692 0 R /Prev 4726 0 R /Next 4728 0 R /A 1907 0 R >> endobj 4728 0 obj << /Title (probe::netfilter.bridge.forward) /Parent 4692 0 R /Prev 4727 0 R /Next 4729 0 R /A 1910 0 R >> endobj 4729 0 obj << /Title (probe::netfilter.bridge.local_in) /Parent 4692 0 R /Prev 4728 0 R /Next 4730 0 R /A 1913 0 R >> endobj 4730 0 obj << /Title (probe::netfilter.bridge.local_out) /Parent 4692 0 R /Prev 4729 0 R /Next 4731 0 R /A 1916 0 R >> endobj 4731 0 obj << /Title (probe::netfilter.bridge.post_routing) /Parent 4692 0 R /Prev 4730 0 R /Next 4732 0 R /A 1919 0 R >> endobj 4732 0 obj << /Title (probe::netfilter.bridge.pre_routing) /Parent 4692 0 R /Prev 4731 0 R /Next 4733 0 R /A 1922 0 R >> endobj 4733 0 obj << /Title (probe::netfilter.ip.forward) /Parent 4692 0 R /Prev 4732 0 R /Next 4734 0 R /A 1925 0 R >> endobj 4734 0 obj << /Title (probe::netfilter.ip.local_in) /Parent 4692 0 R /Prev 4733 0 R /Next 4735 0 R /A 1928 0 R >> endobj 4735 0 obj << /Title (probe::netfilter.ip.local_out) /Parent 4692 0 R /Prev 4734 0 R /Next 4736 0 R /A 1931 0 R >> endobj 4736 0 obj << /Title (probe::netfilter.ip.post_routing) /Parent 4692 0 R /Prev 4735 0 R /Next 4737 0 R /A 1934 0 R >> endobj 4737 0 obj << /Title (probe::netfilter.ip.pre_routing) /Parent 4692 0 R /Prev 4736 0 R /Next 4738 0 R /A 1937 0 R >> endobj 4738 0 obj << /Title (probe::sunrpc.clnt.bind_new_program) /Parent 4692 0 R /Prev 4737 0 R /Next 4739 0 R /A 1940 0 R >> endobj 4739 0 obj << /Title (probe::sunrpc.clnt.call_async) /Parent 4692 0 R /Prev 4738 0 R /Next 4740 0 R /A 1943 0 R >> endobj 4740 0 obj << /Title (probe::sunrpc.clnt.call_sync) /Parent 4692 0 R /Prev 4739 0 R /Next 4741 0 R /A 1946 0 R >> endobj 4741 0 obj << /Title (probe::sunrpc.clnt.clone_client) /Parent 4692 0 R /Prev 4740 0 R /Next 4742 0 R /A 1949 0 R >> endobj 4742 0 obj << /Title (probe::sunrpc.clnt.create_client) /Parent 4692 0 R /Prev 4741 0 R /Next 4743 0 R /A 1952 0 R >> endobj 4743 0 obj << /Title (probe::sunrpc.clnt.restart_call) /Parent 4692 0 R /Prev 4742 0 R /Next 4744 0 R /A 1955 0 R >> endobj 4744 0 obj << /Title (probe::sunrpc.clnt.shutdown_client) /Parent 4692 0 R /Prev 4743 0 R /Next 4745 0 R /A 1958 0 R >> endobj 4745 0 obj << /Title (probe::sunrpc.sched.delay) /Parent 4692 0 R /Prev 4744 0 R /Next 4746 0 R /A 1961 0 R >> endobj 4746 0 obj << /Title (probe::sunrpc.sched.execute) /Parent 4692 0 R /Prev 4745 0 R /Next 4747 0 R /A 1964 0 R >> endobj 4747 0 obj << /Title (probe::sunrpc.sched.new_task) /Parent 4692 0 R /Prev 4746 0 R /Next 4748 0 R /A 1967 0 R >> endobj 4748 0 obj << /Title (probe::sunrpc.sched.release_task) /Parent 4692 0 R /Prev 4747 0 R /Next 4749 0 R /A 1970 0 R >> endobj 4749 0 obj << /Title (probe::sunrpc.svc.create) /Parent 4692 0 R /Prev 4748 0 R /Next 4750 0 R /A 1973 0 R >> endobj 4750 0 obj << /Title (probe::sunrpc.svc.destroy) /Parent 4692 0 R /Prev 4749 0 R /Next 4751 0 R /A 1976 0 R >> endobj 4751 0 obj << /Title (probe::sunrpc.svc.drop) /Parent 4692 0 R /Prev 4750 0 R /Next 4752 0 R /A 1979 0 R >> endobj 4752 0 obj << /Title (probe::sunrpc.svc.process) /Parent 4692 0 R /Prev 4751 0 R /Next 4753 0 R /A 1982 0 R >> endobj 4753 0 obj << /Title (probe::sunrpc.svc.recv) /Parent 4692 0 R /Prev 4752 0 R /Next 4754 0 R /A 1985 0 R >> endobj 4754 0 obj << /Title (probe::sunrpc.svc.register) /Parent 4692 0 R /Prev 4753 0 R /Next 4755 0 R /A 1988 0 R >> endobj 4755 0 obj << /Title (probe::sunrpc.svc.send) /Parent 4692 0 R /Prev 4754 0 R /Next 4756 0 R /A 1991 0 R >> endobj 4756 0 obj << /Title (probe::tcp.disconnect) /Parent 4692 0 R /Prev 4755 0 R /Next 4757 0 R /A 1994 0 R >> endobj 4757 0 obj << /Title (probe::tcp.disconnect.return) /Parent 4692 0 R /Prev 4756 0 R /Next 4758 0 R /A 1997 0 R >> endobj 4758 0 obj << /Title (probe::tcp.receive) /Parent 4692 0 R /Prev 4757 0 R /Next 4759 0 R /A 2166 0 R >> endobj 4759 0 obj << /Title (probe::tcp.recvmsg) /Parent 4692 0 R /Prev 4758 0 R /Next 4760 0 R /A 2169 0 R >> endobj 4760 0 obj << /Title (probe::tcp.recvmsg.return) /Parent 4692 0 R /Prev 4759 0 R /Next 4761 0 R /A 2172 0 R >> endobj 4761 0 obj << /Title (probe::tcp.sendmsg) /Parent 4692 0 R /Prev 4760 0 R /Next 4762 0 R /A 2175 0 R >> endobj 4762 0 obj << /Title (probe::tcp.sendmsg.return) /Parent 4692 0 R /Prev 4761 0 R /Next 4763 0 R /A 2178 0 R >> endobj 4763 0 obj << /Title (probe::tcp.setsockopt) /Parent 4692 0 R /Prev 4762 0 R /Next 4764 0 R /A 2181 0 R >> endobj 4764 0 obj << /Title (probe::tcp.setsockopt.return) /Parent 4692 0 R /Prev 4763 0 R /Next 4765 0 R /A 2184 0 R >> endobj 4765 0 obj << /Title (probe::udp.disconnect) /Parent 4692 0 R /Prev 4764 0 R /Next 4766 0 R /A 2187 0 R >> endobj 4766 0 obj << /Title (probe::udp.disconnect.return) /Parent 4692 0 R /Prev 4765 0 R /Next 4767 0 R /A 2190 0 R >> endobj 4767 0 obj << /Title (probe::udp.recvmsg) /Parent 4692 0 R /Prev 4766 0 R /Next 4768 0 R /A 2193 0 R >> endobj 4768 0 obj << /Title (probe::udp.recvmsg.return) /Parent 4692 0 R /Prev 4767 0 R /Next 4769 0 R /A 2196 0 R >> endobj 4769 0 obj << /Title (probe::udp.sendmsg) /Parent 4692 0 R /Prev 4768 0 R /Next 4703 0 R /A 2199 0 R >> endobj 4703 0 obj << /Title (probe::udp.sendmsg.return) /Parent 4692 0 R /Prev 4769 0 R /A 2202 0 R >> endobj 4701 0 obj << /Title /Parent 4432 0 R /Prev 4692 0 R /Next 4770 0 R /First 4771 0 R /Last 4772 0 R /Count -30 /A 2205 0 R >> endobj 4771 0 obj << /Title (function::inet_get_ip_source) /Parent 4701 0 R /Next 4773 0 R /A 2208 0 R >> endobj 4773 0 obj << /Title (function::inet_get_local_port) /Parent 4701 0 R /Prev 4771 0 R /Next 4774 0 R /A 2211 0 R >> endobj 4774 0 obj << /Title (function::sock_fam_num2str) /Parent 4701 0 R /Prev 4773 0 R /Next 4775 0 R /A 2214 0 R >> endobj 4775 0 obj << /Title (function::sock_fam_str2num) /Parent 4701 0 R /Prev 4774 0 R /Next 4776 0 R /A 2217 0 R >> endobj 4776 0 obj << /Title (function::sock_prot_num2str) /Parent 4701 0 R /Prev 4775 0 R /Next 4777 0 R /A 2220 0 R >> endobj 4777 0 obj << /Title (function::sock_prot_str2num) /Parent 4701 0 R /Prev 4776 0 R /Next 4778 0 R /A 2223 0 R >> endobj 4778 0 obj << /Title (function::sock_state_num2str) /Parent 4701 0 R /Prev 4777 0 R /Next 4779 0 R /A 2226 0 R >> endobj 4779 0 obj << /Title (function::sock_state_str2num) /Parent 4701 0 R /Prev 4778 0 R /Next 4780 0 R /A 2229 0 R >> endobj 4780 0 obj << /Title (probe::socket.aio_read) /Parent 4701 0 R /Prev 4779 0 R /Next 4781 0 R /A 2232 0 R >> endobj 4781 0 obj << /Title (probe::socket.aio_read.return) /Parent 4701 0 R /Prev 4780 0 R /Next 4782 0 R /A 2235 0 R >> endobj 4782 0 obj << /Title (probe::socket.aio_write) /Parent 4701 0 R /Prev 4781 0 R /Next 4783 0 R /A 2238 0 R >> endobj 4783 0 obj << /Title (probe::socket.aio_write.return) /Parent 4701 0 R /Prev 4782 0 R /Next 4784 0 R /A 2241 0 R >> endobj 4784 0 obj << /Title (probe::socket.close) /Parent 4701 0 R /Prev 4783 0 R /Next 4785 0 R /A 2244 0 R >> endobj 4785 0 obj << /Title (probe::socket.close.return) /Parent 4701 0 R /Prev 4784 0 R /Next 4786 0 R /A 2247 0 R >> endobj 4786 0 obj << /Title (probe::socket.create) /Parent 4701 0 R /Prev 4785 0 R /Next 4787 0 R /A 2250 0 R >> endobj 4787 0 obj << /Title (probe::socket.create.return) /Parent 4701 0 R /Prev 4786 0 R /Next 4788 0 R /A 2253 0 R >> endobj 4788 0 obj << /Title (probe::socket.read_iter) /Parent 4701 0 R /Prev 4787 0 R /Next 4789 0 R /A 2256 0 R >> endobj 4789 0 obj << /Title (probe::socket.read_iter.return) /Parent 4701 0 R /Prev 4788 0 R /Next 4790 0 R /A 2259 0 R >> endobj 4790 0 obj << /Title (probe::socket.readv) /Parent 4701 0 R /Prev 4789 0 R /Next 4791 0 R /A 2262 0 R >> endobj 4791 0 obj << /Title (probe::socket.readv.return) /Parent 4701 0 R /Prev 4790 0 R /Next 4792 0 R /A 2265 0 R >> endobj 4792 0 obj << /Title (probe::socket.receive) /Parent 4701 0 R /Prev 4791 0 R /Next 4793 0 R /A 2268 0 R >> endobj 4793 0 obj << /Title (probe::socket.recvmsg) /Parent 4701 0 R /Prev 4792 0 R /Next 4794 0 R /A 2271 0 R >> endobj 4794 0 obj << /Title (probe::socket.recvmsg.return) /Parent 4701 0 R /Prev 4793 0 R /Next 4795 0 R /A 2274 0 R >> endobj 4795 0 obj << /Title (probe::socket.send) /Parent 4701 0 R /Prev 4794 0 R /Next 4796 0 R /A 2277 0 R >> endobj 4796 0 obj << /Title (probe::socket.sendmsg) /Parent 4701 0 R /Prev 4795 0 R /Next 4797 0 R /A 2280 0 R >> endobj 4797 0 obj << /Title (probe::socket.sendmsg.return) /Parent 4701 0 R /Prev 4796 0 R /Next 4798 0 R /A 2283 0 R >> endobj 4798 0 obj << /Title (probe::socket.write_iter) /Parent 4701 0 R /Prev 4797 0 R /Next 4799 0 R /A 2286 0 R >> endobj 4799 0 obj << /Title (probe::socket.write_iter.return) /Parent 4701 0 R /Prev 4798 0 R /Next 4800 0 R /A 2289 0 R >> endobj 4800 0 obj << /Title (probe::socket.writev) /Parent 4701 0 R /Prev 4799 0 R /Next 4772 0 R /A 2292 0 R >> endobj 4772 0 obj << /Title (probe::socket.writev.return) /Parent 4701 0 R /Prev 4800 0 R /A 2295 0 R >> endobj 4770 0 obj << /Title /Parent 4432 0 R /Prev 4701 0 R /Next 4801 0 R /First 4802 0 R /Last 4803 0 R /Count -37 /A 2298 0 R >> endobj 4802 0 obj << /Title (function::ipmib_filter_key) /Parent 4770 0 R /Next 4804 0 R /A 2301 0 R >> endobj 4804 0 obj << /Title (function::ipmib_get_proto) /Parent 4770 0 R /Prev 4802 0 R /Next 4805 0 R /A 2304 0 R >> endobj 4805 0 obj << /Title (function::ipmib_local_addr) /Parent 4770 0 R /Prev 4804 0 R /Next 4806 0 R /A 2307 0 R >> endobj 4806 0 obj << /Title (function::ipmib_remote_addr) /Parent 4770 0 R /Prev 4805 0 R /Next 4807 0 R /A 2310 0 R >> endobj 4807 0 obj << /Title (function::ipmib_tcp_local_port) /Parent 4770 0 R /Prev 4806 0 R /Next 4808 0 R /A 2313 0 R >> endobj 4808 0 obj << /Title (function::ipmib_tcp_remote_port) /Parent 4770 0 R /Prev 4807 0 R /Next 4809 0 R /A 2316 0 R >> endobj 4809 0 obj << /Title (function::linuxmib_filter_key) /Parent 4770 0 R /Prev 4808 0 R /Next 4810 0 R /A 2319 0 R >> endobj 4810 0 obj << /Title (function::tcpmib_filter_key) /Parent 4770 0 R /Prev 4809 0 R /Next 4811 0 R /A 2322 0 R >> endobj 4811 0 obj << /Title (function::tcpmib_get_state) /Parent 4770 0 R /Prev 4810 0 R /Next 4812 0 R /A 2325 0 R >> endobj 4812 0 obj << /Title (function::tcpmib_local_addr) /Parent 4770 0 R /Prev 4811 0 R /Next 4813 0 R /A 2494 0 R >> endobj 4813 0 obj << /Title (function::tcpmib_local_port) /Parent 4770 0 R /Prev 4812 0 R /Next 4814 0 R /A 2497 0 R >> endobj 4814 0 obj << /Title (function::tcpmib_remote_addr) /Parent 4770 0 R /Prev 4813 0 R /Next 4815 0 R /A 2500 0 R >> endobj 4815 0 obj << /Title (function::tcpmib_remote_port) /Parent 4770 0 R /Prev 4814 0 R /Next 4816 0 R /A 2503 0 R >> endobj 4816 0 obj << /Title (probe::ipmib.ForwDatagrams) /Parent 4770 0 R /Prev 4815 0 R /Next 4817 0 R /A 2506 0 R >> endobj 4817 0 obj << /Title (probe::ipmib.FragFails) /Parent 4770 0 R /Prev 4816 0 R /Next 4818 0 R /A 2509 0 R >> endobj 4818 0 obj << /Title (probe::ipmib.FragOKs) /Parent 4770 0 R /Prev 4817 0 R /Next 4819 0 R /A 2512 0 R >> endobj 4819 0 obj << /Title (probe::ipmib.InAddrErrors) /Parent 4770 0 R /Prev 4818 0 R /Next 4820 0 R /A 2515 0 R >> endobj 4820 0 obj << /Title (probe::ipmib.InDiscards) /Parent 4770 0 R /Prev 4819 0 R /Next 4821 0 R /A 2518 0 R >> endobj 4821 0 obj << /Title (probe::ipmib.InNoRoutes) /Parent 4770 0 R /Prev 4820 0 R /Next 4822 0 R /A 2521 0 R >> endobj 4822 0 obj << /Title (probe::ipmib.InReceives) /Parent 4770 0 R /Prev 4821 0 R /Next 4823 0 R /A 2524 0 R >> endobj 4823 0 obj << /Title (probe::ipmib.InUnknownProtos) /Parent 4770 0 R /Prev 4822 0 R /Next 4824 0 R /A 2527 0 R >> endobj 4824 0 obj << /Title (probe::ipmib.OutRequests) /Parent 4770 0 R /Prev 4823 0 R /Next 4825 0 R /A 2530 0 R >> endobj 4825 0 obj << /Title (probe::ipmib.ReasmReqds) /Parent 4770 0 R /Prev 4824 0 R /Next 4826 0 R /A 2533 0 R >> endobj 4826 0 obj << /Title (probe::ipmib.ReasmTimeout) /Parent 4770 0 R /Prev 4825 0 R /Next 4827 0 R /A 2536 0 R >> endobj 4827 0 obj << /Title (probe::linuxmib.DelayedACKs) /Parent 4770 0 R /Prev 4826 0 R /Next 4828 0 R /A 2539 0 R >> endobj 4828 0 obj << /Title (probe::linuxmib.ListenDrops) /Parent 4770 0 R /Prev 4827 0 R /Next 4829 0 R /A 2542 0 R >> endobj 4829 0 obj << /Title (probe::linuxmib.ListenOverflows) /Parent 4770 0 R /Prev 4828 0 R /Next 4830 0 R /A 2545 0 R >> endobj 4830 0 obj << /Title (probe::linuxmib.TCPMemoryPressures) /Parent 4770 0 R /Prev 4829 0 R /Next 4831 0 R /A 2548 0 R >> endobj 4831 0 obj << /Title (probe::tcpmib.ActiveOpens) /Parent 4770 0 R /Prev 4830 0 R /Next 4832 0 R /A 2551 0 R >> endobj 4832 0 obj << /Title (probe::tcpmib.AttemptFails) /Parent 4770 0 R /Prev 4831 0 R /Next 4833 0 R /A 2554 0 R >> endobj 4833 0 obj << /Title (probe::tcpmib.CurrEstab) /Parent 4770 0 R /Prev 4832 0 R /Next 4834 0 R /A 2557 0 R >> endobj 4834 0 obj << /Title (probe::tcpmib.EstabResets) /Parent 4770 0 R /Prev 4833 0 R /Next 4835 0 R /A 2560 0 R >> endobj 4835 0 obj << /Title (probe::tcpmib.InSegs) /Parent 4770 0 R /Prev 4834 0 R /Next 4836 0 R /A 2563 0 R >> endobj 4836 0 obj << /Title (probe::tcpmib.OutRsts) /Parent 4770 0 R /Prev 4835 0 R /Next 4837 0 R /A 2566 0 R >> endobj 4837 0 obj << /Title (probe::tcpmib.OutSegs) /Parent 4770 0 R /Prev 4836 0 R /Next 4838 0 R /A 2569 0 R >> endobj 4838 0 obj << /Title (probe::tcpmib.PassiveOpens) /Parent 4770 0 R /Prev 4837 0 R /Next 4803 0 R /A 2572 0 R >> endobj 4803 0 obj << /Title (probe::tcpmib.RetransSegs) /Parent 4770 0 R /Prev 4838 0 R /A 2575 0 R >> endobj 4801 0 obj << /Title /Parent 4432 0 R /Prev 4770 0 R /Next 4839 0 R /First 4840 0 R /Last 4841 0 R /Count -10 /A 2578 0 R >> endobj 4840 0 obj << /Title (function::get_loadavg_index) /Parent 4801 0 R /Next 4842 0 R /A 2581 0 R >> endobj 4842 0 obj << /Title (function::sprint_loadavg) /Parent 4801 0 R /Prev 4840 0 R /Next 4843 0 R /A 2584 0 R >> endobj 4843 0 obj << /Title (function::target_set_pid) /Parent 4801 0 R /Prev 4842 0 R /Next 4844 0 R /A 2587 0 R >> endobj 4844 0 obj << /Title (function::target_set_report) /Parent 4801 0 R /Prev 4843 0 R /Next 4845 0 R /A 2590 0 R >> endobj 4845 0 obj << /Title (probe::kprocess.create) /Parent 4801 0 R /Prev 4844 0 R /Next 4846 0 R /A 2593 0 R >> endobj 4846 0 obj << /Title (probe::kprocess.exec) /Parent 4801 0 R /Prev 4845 0 R /Next 4847 0 R /A 2596 0 R >> endobj 4847 0 obj << /Title (probe::kprocess.exec_complete) /Parent 4801 0 R /Prev 4846 0 R /Next 4848 0 R /A 2599 0 R >> endobj 4848 0 obj << /Title (probe::kprocess.exit) /Parent 4801 0 R /Prev 4847 0 R /Next 4849 0 R /A 2602 0 R >> endobj 4849 0 obj << /Title (probe::kprocess.release) /Parent 4801 0 R /Prev 4848 0 R /Next 4841 0 R /A 2605 0 R >> endobj 4841 0 obj << /Title (probe::kprocess.start) /Parent 4801 0 R /Prev 4849 0 R /A 2608 0 R >> endobj 4839 0 obj << /Title /Parent 4432 0 R /Prev 4801 0 R /Next 4850 0 R /First 4851 0 R /Last 4852 0 R /Count -33 /A 2611 0 R >> endobj 4851 0 obj << /Title (function::get_sa_flags) /Parent 4839 0 R /Next 4853 0 R /A 2614 0 R >> endobj 4853 0 obj << /Title (function::get_sa_handler) /Parent 4839 0 R /Prev 4851 0 R /Next 4854 0 R /A 2617 0 R >> endobj 4854 0 obj << /Title (function::is_sig_blocked) /Parent 4839 0 R /Prev 4853 0 R /Next 4855 0 R /A 2620 0 R >> endobj 4855 0 obj << /Title (function::sa_flags_str) /Parent 4839 0 R /Prev 4854 0 R /Next 4856 0 R /A 2623 0 R >> endobj 4856 0 obj << /Title (function::sa_handler_str) /Parent 4839 0 R /Prev 4855 0 R /Next 4857 0 R /A 2626 0 R >> endobj 4857 0 obj << /Title (function::signal_str) /Parent 4839 0 R /Prev 4856 0 R /Next 4858 0 R /A 2629 0 R >> endobj 4858 0 obj << /Title (function::sigset_mask_str) /Parent 4839 0 R /Prev 4857 0 R /Next 4859 0 R /A 2632 0 R >> endobj 4859 0 obj << /Title (probe::signal.check_ignored) /Parent 4839 0 R /Prev 4858 0 R /Next 4860 0 R /A 2635 0 R >> endobj 4860 0 obj << /Title (probe::signal.check_ignored.return) /Parent 4839 0 R /Prev 4859 0 R /Next 4861 0 R /A 2638 0 R >> endobj 4861 0 obj << /Title (probe::signal.checkperm) /Parent 4839 0 R /Prev 4860 0 R /Next 4862 0 R /A 2641 0 R >> endobj 4862 0 obj << /Title (probe::signal.checkperm.return) /Parent 4839 0 R /Prev 4861 0 R /Next 4863 0 R /A 2644 0 R >> endobj 4863 0 obj << /Title (probe::signal.do_action) /Parent 4839 0 R /Prev 4862 0 R /Next 4864 0 R /A 2647 0 R >> endobj 4864 0 obj << /Title (probe::signal.do_action.return) /Parent 4839 0 R /Prev 4863 0 R /Next 4865 0 R /A 2650 0 R >> endobj 4865 0 obj << /Title (probe::signal.flush) /Parent 4839 0 R /Prev 4864 0 R /Next 4866 0 R /A 2653 0 R >> endobj 4866 0 obj << /Title (probe::signal.force_segv) /Parent 4839 0 R /Prev 4865 0 R /Next 4867 0 R /A 2822 0 R >> endobj 4867 0 obj << /Title (probe::signal.force_segv.return) /Parent 4839 0 R /Prev 4866 0 R /Next 4868 0 R /A 2825 0 R >> endobj 4868 0 obj << /Title (probe::signal.handle) /Parent 4839 0 R /Prev 4867 0 R /Next 4869 0 R /A 2828 0 R >> endobj 4869 0 obj << /Title (probe::signal.handle.return) /Parent 4839 0 R /Prev 4868 0 R /Next 4870 0 R /A 2831 0 R >> endobj 4870 0 obj << /Title (probe::signal.pending) /Parent 4839 0 R /Prev 4869 0 R /Next 4871 0 R /A 2834 0 R >> endobj 4871 0 obj << /Title (probe::signal.pending.return) /Parent 4839 0 R /Prev 4870 0 R /Next 4872 0 R /A 2837 0 R >> endobj 4872 0 obj << /Title (probe::signal.procmask) /Parent 4839 0 R /Prev 4871 0 R /Next 4873 0 R /A 2840 0 R >> endobj 4873 0 obj << /Title (probe::signal.procmask.return) /Parent 4839 0 R /Prev 4872 0 R /Next 4874 0 R /A 2843 0 R >> endobj 4874 0 obj << /Title (probe::signal.send) /Parent 4839 0 R /Prev 4873 0 R /Next 4875 0 R /A 2846 0 R >> endobj 4875 0 obj << /Title (probe::signal.send.return) /Parent 4839 0 R /Prev 4874 0 R /Next 4876 0 R /A 2849 0 R >> endobj 4876 0 obj << /Title (probe::signal.send_sig_queue) /Parent 4839 0 R /Prev 4875 0 R /Next 4877 0 R /A 2852 0 R >> endobj 4877 0 obj << /Title (probe::signal.send_sig_queue.return) /Parent 4839 0 R /Prev 4876 0 R /Next 4878 0 R /A 2855 0 R >> endobj 4878 0 obj << /Title (probe::signal.sys_tgkill) /Parent 4839 0 R /Prev 4877 0 R /Next 4879 0 R /A 2858 0 R >> endobj 4879 0 obj << /Title (probe::signal.sys_tgkill.return) /Parent 4839 0 R /Prev 4878 0 R /Next 4880 0 R /A 2861 0 R >> endobj 4880 0 obj << /Title (probe::signal.sys_tkill) /Parent 4839 0 R /Prev 4879 0 R /Next 4881 0 R /A 2864 0 R >> endobj 4881 0 obj << /Title (probe::signal.syskill) /Parent 4839 0 R /Prev 4880 0 R /Next 4882 0 R /A 2867 0 R >> endobj 4882 0 obj << /Title (probe::signal.syskill.return) /Parent 4839 0 R /Prev 4881 0 R /Next 4883 0 R /A 2870 0 R >> endobj 4883 0 obj << /Title (probe::signal.systkill.return) /Parent 4839 0 R /Prev 4882 0 R /Next 4852 0 R /A 2873 0 R >> endobj 4852 0 obj << /Title (probe::signal.wakeup) /Parent 4839 0 R /Prev 4883 0 R /A 2876 0 R >> endobj 4850 0 obj << /Title /Parent 4432 0 R /Prev 4839 0 R /Next 4884 0 R /First 4885 0 R /Last 4886 0 R /Count -4 /A 2879 0 R >> endobj 4885 0 obj << /Title (function::errno_str) /Parent 4850 0 R /Next 4887 0 R /A 2882 0 R >> endobj 4887 0 obj << /Title (function::return_str) /Parent 4850 0 R /Prev 4885 0 R /Next 4888 0 R /A 2885 0 R >> endobj 4888 0 obj << /Title (function::returnstr) /Parent 4850 0 R /Prev 4887 0 R /Next 4886 0 R /A 2888 0 R >> endobj 4886 0 obj << /Title (function::returnval) /Parent 4850 0 R /Prev 4888 0 R /A 2891 0 R >> endobj 4884 0 obj << /Title /Parent 4432 0 R /Prev 4850 0 R /Next 4889 0 R /First 4890 0 R /Last 4890 0 R /Count -1 /A 2894 0 R >> endobj 4890 0 obj << /Title (function::rlimit_from_str) /Parent 4884 0 R /A 2897 0 R >> endobj 4889 0 obj << /Title /Parent 4432 0 R /Prev 4884 0 R /Next 4891 0 R /First 4892 0 R /Last 4893 0 R /Count -4 /A 2900 0 R >> endobj 4892 0 obj << /Title (function::MAJOR) /Parent 4889 0 R /Next 4894 0 R /A 2903 0 R >> endobj 4894 0 obj << /Title (function::MINOR) /Parent 4889 0 R /Prev 4892 0 R /Next 4895 0 R /A 2906 0 R >> endobj 4895 0 obj << /Title (function::MKDEV) /Parent 4889 0 R /Prev 4894 0 R /Next 4893 0 R /A 2909 0 R >> endobj 4893 0 obj << /Title (function::usrdev2kerndev) /Parent 4889 0 R /Prev 4895 0 R /A 2912 0 R >> endobj 4891 0 obj << /Title /Parent 4432 0 R /Prev 4889 0 R /Next 4896 0 R /First 4897 0 R /Last 4898 0 R /Count -10 /A 2915 0 R >> endobj 4897 0 obj << /Title (function::d_name) /Parent 4891 0 R /Next 4899 0 R /A 2918 0 R >> endobj 4899 0 obj << /Title (function::d_path) /Parent 4891 0 R /Prev 4897 0 R /Next 4900 0 R /A 2921 0 R >> endobj 4900 0 obj << /Title (function::fullpath_struct_file) /Parent 4891 0 R /Prev 4899 0 R /Next 4901 0 R /A 2924 0 R >> endobj 4901 0 obj << /Title (function::fullpath_struct_nameidata) /Parent 4891 0 R /Prev 4900 0 R /Next 4902 0 R /A 2927 0 R >> endobj 4902 0 obj << /Title (function::fullpath_struct_path) /Parent 4891 0 R /Prev 4901 0 R /Next 4903 0 R /A 2930 0 R >> endobj 4903 0 obj << /Title (function::inode_name) /Parent 4891 0 R /Prev 4902 0 R /Next 4904 0 R /A 2933 0 R >> endobj 4904 0 obj << /Title (function::inode_path) /Parent 4891 0 R /Prev 4903 0 R /Next 4905 0 R /A 2936 0 R >> endobj 4905 0 obj << /Title (function::real_mount) /Parent 4891 0 R /Prev 4904 0 R /Next 4906 0 R /A 2939 0 R >> endobj 4906 0 obj << /Title (function::reverse_path_walk) /Parent 4891 0 R /Prev 4905 0 R /Next 4898 0 R /A 2942 0 R >> endobj 4898 0 obj << /Title (function::task_dentry_path) /Parent 4891 0 R /Prev 4906 0 R /A 2945 0 R >> endobj 4896 0 obj << /Title /Parent 4432 0 R /Prev 4891 0 R /Next 4907 0 R /First 4908 0 R /Last 4909 0 R /Count -8 /A 2948 0 R >> endobj 4908 0 obj << /Title (function::abort) /Parent 4896 0 R /Next 4910 0 R /A 2951 0 R >> endobj 4910 0 obj << /Title (function::assert) /Parent 4896 0 R /Prev 4908 0 R /Next 4911 0 R /A 2954 0 R >> endobj 4911 0 obj << /Title (function::error) /Parent 4896 0 R /Prev 4910 0 R /Next 4912 0 R /A 2957 0 R >> endobj 4912 0 obj << /Title (function::exit) /Parent 4896 0 R /Prev 4911 0 R /Next 4913 0 R /A 2960 0 R >> endobj 4913 0 obj << /Title (function::ftrace) /Parent 4896 0 R /Prev 4912 0 R /Next 4914 0 R /A 2963 0 R >> endobj 4914 0 obj << /Title (function::log) /Parent 4896 0 R /Prev 4913 0 R /Next 4915 0 R /A 2966 0 R >> endobj 4915 0 obj << /Title (function::printk) /Parent 4896 0 R /Prev 4914 0 R /Next 4909 0 R /A 2969 0 R >> endobj 4909 0 obj << /Title (function::warn) /Parent 4896 0 R /Prev 4915 0 R /A 2972 0 R >> endobj 4907 0 obj << /Title /Parent 4432 0 R /Prev 4896 0 R /Next 4916 0 R /First 4917 0 R /Last 4918 0 R /Count -11 /A 2975 0 R >> endobj 4917 0 obj << /Title (function::qs_done) /Parent 4907 0 R /Next 4919 0 R /A 2978 0 R >> endobj 4919 0 obj << /Title (function::qs_run) /Parent 4907 0 R /Prev 4917 0 R /Next 4920 0 R /A 2981 0 R >> endobj 4920 0 obj << /Title (function::qs_wait) /Parent 4907 0 R /Prev 4919 0 R /Next 4921 0 R /A 3150 0 R >> endobj 4921 0 obj << /Title (function::qsq_blocked) /Parent 4907 0 R /Prev 4920 0 R /Next 4922 0 R /A 3153 0 R >> endobj 4922 0 obj << /Title (function::qsq_print) /Parent 4907 0 R /Prev 4921 0 R /Next 4923 0 R /A 3156 0 R >> endobj 4923 0 obj << /Title (function::qsq_service_time) /Parent 4907 0 R /Prev 4922 0 R /Next 4924 0 R /A 3159 0 R >> endobj 4924 0 obj << /Title (function::qsq_start) /Parent 4907 0 R /Prev 4923 0 R /Next 4925 0 R /A 3162 0 R >> endobj 4925 0 obj << /Title (function::qsq_throughput) /Parent 4907 0 R /Prev 4924 0 R /Next 4926 0 R /A 3165 0 R >> endobj 4926 0 obj << /Title (function::qsq_utilization) /Parent 4907 0 R /Prev 4925 0 R /Next 4927 0 R /A 3168 0 R >> endobj 4927 0 obj << /Title (function::qsq_wait_queue_length) /Parent 4907 0 R /Prev 4926 0 R /Next 4918 0 R /A 3171 0 R >> endobj 4918 0 obj << /Title (function::qsq_wait_time) /Parent 4907 0 R /Prev 4927 0 R /A 3174 0 R >> endobj 4916 0 obj << /Title /Parent 4432 0 R /Prev 4907 0 R /Next 4928 0 R /First 4929 0 R /Last 4929 0 R /Count -1 /A 3177 0 R >> endobj 4929 0 obj << /Title (function::randint) /Parent 4916 0 R /A 3180 0 R >> endobj 4928 0 obj << /Title /Parent 4432 0 R /Prev 4916 0 R /Next 4930 0 R /First 4931 0 R /Last 4932 0 R /Count -62 /A 3183 0 R >> endobj 4931 0 obj << /Title (function::atomic_long_read) /Parent 4928 0 R /Next 4933 0 R /A 3186 0 R >> endobj 4933 0 obj << /Title (function::atomic_read) /Parent 4928 0 R /Prev 4931 0 R /Next 4934 0 R /A 3189 0 R >> endobj 4934 0 obj << /Title (function::kernel_buffer_quoted) /Parent 4928 0 R /Prev 4933 0 R /Next 4935 0 R /A 3192 0 R >> endobj 4935 0 obj << /Title (function::kernel_buffer_quoted_error) /Parent 4928 0 R /Prev 4934 0 R /Next 4936 0 R /A 3195 0 R >> endobj 4936 0 obj << /Title (function::kernel_char) /Parent 4928 0 R /Prev 4935 0 R /Next 4937 0 R /A 3198 0 R >> endobj 4937 0 obj << /Title (function::kernel_int) /Parent 4928 0 R /Prev 4936 0 R /Next 4938 0 R /A 3201 0 R >> endobj 4938 0 obj << /Title (function::kernel_long) /Parent 4928 0 R /Prev 4937 0 R /Next 4939 0 R /A 3204 0 R >> endobj 4939 0 obj << /Title (function::kernel_pointer) /Parent 4928 0 R /Prev 4938 0 R /Next 4940 0 R /A 3207 0 R >> endobj 4940 0 obj << /Title (function::kernel_short) /Parent 4928 0 R /Prev 4939 0 R /Next 4941 0 R /A 3210 0 R >> endobj 4941 0 obj << /Title (function::kernel_string) /Parent 4928 0 R /Prev 4940 0 R /Next 4942 0 R /A 3213 0 R >> endobj 4942 0 obj << /Title (function::kernel_string_n) /Parent 4928 0 R /Prev 4941 0 R /Next 4943 0 R /A 3216 0 R >> endobj 4943 0 obj << /Title (function::kernel_string_quoted) /Parent 4928 0 R /Prev 4942 0 R /Next 4944 0 R /A 3219 0 R >> endobj 4944 0 obj << /Title (function::kernel_string_quoted_utf16) /Parent 4928 0 R /Prev 4943 0 R /Next 4945 0 R /A 3222 0 R >> endobj 4945 0 obj << /Title (function::kernel_string_quoted_utf32) /Parent 4928 0 R /Prev 4944 0 R /Next 4946 0 R /A 3225 0 R >> endobj 4946 0 obj << /Title (function::kernel_string_utf16) /Parent 4928 0 R /Prev 4945 0 R /Next 4947 0 R /A 3228 0 R >> endobj 4947 0 obj << /Title (function::kernel_string_utf32) /Parent 4928 0 R /Prev 4946 0 R /Next 4948 0 R /A 3231 0 R >> endobj 4948 0 obj << /Title (function::user_buffer_quoted) /Parent 4928 0 R /Prev 4947 0 R /Next 4949 0 R /A 3234 0 R >> endobj 4949 0 obj << /Title (function::user_buffer_quoted_error) /Parent 4928 0 R /Prev 4948 0 R /Next 4950 0 R /A 3237 0 R >> endobj 4950 0 obj << /Title (function::user_char) /Parent 4928 0 R /Prev 4949 0 R /Next 4951 0 R /A 3240 0 R >> endobj 4951 0 obj << /Title (function::user_char_error) /Parent 4928 0 R /Prev 4950 0 R /Next 4952 0 R /A 3243 0 R >> endobj 4952 0 obj << /Title (function::user_char_warn) /Parent 4928 0 R /Prev 4951 0 R /Next 4953 0 R /A 3246 0 R >> endobj 4953 0 obj << /Title (function::user_int) /Parent 4928 0 R /Prev 4952 0 R /Next 4954 0 R /A 3249 0 R >> endobj 4954 0 obj << /Title (function::user_int16) /Parent 4928 0 R /Prev 4953 0 R /Next 4955 0 R /A 3252 0 R >> endobj 4955 0 obj << /Title (function::user_int16_error) /Parent 4928 0 R /Prev 4954 0 R /Next 4956 0 R /A 3255 0 R >> endobj 4956 0 obj << /Title (function::user_int32) /Parent 4928 0 R /Prev 4955 0 R /Next 4957 0 R /A 3258 0 R >> endobj 4957 0 obj << /Title (function::user_int32_error) /Parent 4928 0 R /Prev 4956 0 R /Next 4958 0 R /A 3261 0 R >> endobj 4958 0 obj << /Title (function::user_int64) /Parent 4928 0 R /Prev 4957 0 R /Next 4959 0 R /A 3264 0 R >> endobj 4959 0 obj << /Title (function::user_int64_error) /Parent 4928 0 R /Prev 4958 0 R /Next 4960 0 R /A 3267 0 R >> endobj 4960 0 obj << /Title (function::user_int8) /Parent 4928 0 R /Prev 4959 0 R /Next 4961 0 R /A 3270 0 R >> endobj 4961 0 obj << /Title (function::user_int8_error) /Parent 4928 0 R /Prev 4960 0 R /Next 4962 0 R /A 3273 0 R >> endobj 4962 0 obj << /Title (function::user_int_error) /Parent 4928 0 R /Prev 4961 0 R /Next 4963 0 R /A 3276 0 R >> endobj 4963 0 obj << /Title (function::user_int_warn) /Parent 4928 0 R /Prev 4962 0 R /Next 4964 0 R /A 3279 0 R >> endobj 4964 0 obj << /Title (function::user_long) /Parent 4928 0 R /Prev 4963 0 R /Next 4965 0 R /A 3282 0 R >> endobj 4965 0 obj << /Title (function::user_long_error) /Parent 4928 0 R /Prev 4964 0 R /Next 4966 0 R /A 3285 0 R >> endobj 4966 0 obj << /Title (function::user_long_warn) /Parent 4928 0 R /Prev 4965 0 R /Next 4967 0 R /A 3288 0 R >> endobj 4967 0 obj << /Title (function::user_short) /Parent 4928 0 R /Prev 4966 0 R /Next 4968 0 R /A 3291 0 R >> endobj 4968 0 obj << /Title (function::user_short_error) /Parent 4928 0 R /Prev 4967 0 R /Next 4969 0 R /A 3294 0 R >> endobj 4969 0 obj << /Title (function::user_short_warn) /Parent 4928 0 R /Prev 4968 0 R /Next 4970 0 R /A 3297 0 R >> endobj 4970 0 obj << /Title (function::user_string) /Parent 4928 0 R /Prev 4969 0 R /Next 4971 0 R /A 3300 0 R >> endobj 4971 0 obj << /Title (function::user_string_n) /Parent 4928 0 R /Prev 4970 0 R /Next 4972 0 R /A 3303 0 R >> endobj 4972 0 obj << /Title (function::user_string_n_quoted) /Parent 4928 0 R /Prev 4971 0 R /Next 4973 0 R /A 3306 0 R >> endobj 4973 0 obj << /Title (function::user_string_n_warn) /Parent 4928 0 R /Prev 4972 0 R /Next 4974 0 R /A 3309 0 R >> endobj 4974 0 obj << /Title (function::user_string_quoted) /Parent 4928 0 R /Prev 4973 0 R /Next 4975 0 R /A 3478 0 R >> endobj 4975 0 obj << /Title (function::user_string_quoted_utf16) /Parent 4928 0 R /Prev 4974 0 R /Next 4976 0 R /A 3481 0 R >> endobj 4976 0 obj << /Title (function::user_string_quoted_utf32) /Parent 4928 0 R /Prev 4975 0 R /Next 4977 0 R /A 3484 0 R >> endobj 4977 0 obj << /Title (function::user_string_utf16) /Parent 4928 0 R /Prev 4976 0 R /Next 4978 0 R /A 3487 0 R >> endobj 4978 0 obj << /Title (function::user_string_utf32) /Parent 4928 0 R /Prev 4977 0 R /Next 4979 0 R /A 3490 0 R >> endobj 4979 0 obj << /Title (function::user_string_warn) /Parent 4928 0 R /Prev 4978 0 R /Next 4980 0 R /A 3493 0 R >> endobj 4980 0 obj << /Title (function::user_uint16) /Parent 4928 0 R /Prev 4979 0 R /Next 4981 0 R /A 3496 0 R >> endobj 4981 0 obj << /Title (function::user_uint16_error) /Parent 4928 0 R /Prev 4980 0 R /Next 4982 0 R /A 3499 0 R >> endobj 4982 0 obj << /Title (function::user_uint32) /Parent 4928 0 R /Prev 4981 0 R /Next 4983 0 R /A 3502 0 R >> endobj 4983 0 obj << /Title (function::user_uint32_error) /Parent 4928 0 R /Prev 4982 0 R /Next 4984 0 R /A 3505 0 R >> endobj 4984 0 obj << /Title (function::user_uint64) /Parent 4928 0 R /Prev 4983 0 R /Next 4985 0 R /A 3508 0 R >> endobj 4985 0 obj << /Title (function::user_uint64_error) /Parent 4928 0 R /Prev 4984 0 R /Next 4986 0 R /A 3511 0 R >> endobj 4986 0 obj << /Title (function::user_uint8) /Parent 4928 0 R /Prev 4985 0 R /Next 4987 0 R /A 3514 0 R >> endobj 4987 0 obj << /Title (function::user_uint8_error) /Parent 4928 0 R /Prev 4986 0 R /Next 4988 0 R /A 3517 0 R >> endobj 4988 0 obj << /Title (function::user_ulong) /Parent 4928 0 R /Prev 4987 0 R /Next 4989 0 R /A 3520 0 R >> endobj 4989 0 obj << /Title (function::user_ulong_error) /Parent 4928 0 R /Prev 4988 0 R /Next 4990 0 R /A 3523 0 R >> endobj 4990 0 obj << /Title (function::user_ulong_warn) /Parent 4928 0 R /Prev 4989 0 R /Next 4991 0 R /A 3526 0 R >> endobj 4991 0 obj << /Title (function::user_ushort) /Parent 4928 0 R /Prev 4990 0 R /Next 4992 0 R /A 3529 0 R >> endobj 4992 0 obj << /Title (function::user_ushort_error) /Parent 4928 0 R /Prev 4991 0 R /Next 4932 0 R /A 3532 0 R >> endobj 4932 0 obj << /Title (function::user_ushort_warn) /Parent 4928 0 R /Prev 4992 0 R /A 3535 0 R >> endobj 4930 0 obj << /Title /Parent 4432 0 R /Prev 4928 0 R /Next 4993 0 R /First 4994 0 R /Last 4995 0 R /Count -14 /A 3538 0 R >> endobj 4994 0 obj << /Title (function::set_kernel_char) /Parent 4930 0 R /Next 4996 0 R /A 3541 0 R >> endobj 4996 0 obj << /Title (function::set_kernel_int) /Parent 4930 0 R /Prev 4994 0 R /Next 4997 0 R /A 3544 0 R >> endobj 4997 0 obj << /Title (function::set_kernel_long) /Parent 4930 0 R /Prev 4996 0 R /Next 4998 0 R /A 3547 0 R >> endobj 4998 0 obj << /Title (function::set_kernel_pointer) /Parent 4930 0 R /Prev 4997 0 R /Next 4999 0 R /A 3550 0 R >> endobj 4999 0 obj << /Title (function::set_kernel_short) /Parent 4930 0 R /Prev 4998 0 R /Next 5000 0 R /A 3553 0 R >> endobj 5000 0 obj << /Title (function::set_kernel_string) /Parent 4930 0 R /Prev 4999 0 R /Next 5001 0 R /A 3556 0 R >> endobj 5001 0 obj << /Title (function::set_kernel_string_n) /Parent 4930 0 R /Prev 5000 0 R /Next 5002 0 R /A 3559 0 R >> endobj 5002 0 obj << /Title (function::set_user_char) /Parent 4930 0 R /Prev 5001 0 R /Next 5003 0 R /A 3562 0 R >> endobj 5003 0 obj << /Title (function::set_user_int) /Parent 4930 0 R /Prev 5002 0 R /Next 5004 0 R /A 3565 0 R >> endobj 5004 0 obj << /Title (function::set_user_long) /Parent 4930 0 R /Prev 5003 0 R /Next 5005 0 R /A 3568 0 R >> endobj 5005 0 obj << /Title (function::set_user_pointer) /Parent 4930 0 R /Prev 5004 0 R /Next 5006 0 R /A 3571 0 R >> endobj 5006 0 obj << /Title (function::set_user_short) /Parent 4930 0 R /Prev 5005 0 R /Next 5007 0 R /A 3574 0 R >> endobj 5007 0 obj << /Title (function::set_user_string) /Parent 4930 0 R /Prev 5006 0 R /Next 4995 0 R /A 3577 0 R >> endobj 4995 0 obj << /Title (function::set_user_string_n) /Parent 4930 0 R /Prev 5007 0 R /A 3580 0 R >> endobj 4993 0 obj << /Title /Parent 4432 0 R /Prev 4930 0 R /Next 5008 0 R /First 5009 0 R /Last 5010 0 R /Count -4 /A 3583 0 R >> endobj 5009 0 obj << /Title (function::mdelay) /Parent 4993 0 R /Next 5011 0 R /A 3586 0 R >> endobj 5011 0 obj << /Title (function::panic) /Parent 4993 0 R /Prev 5009 0 R /Next 5012 0 R /A 3589 0 R >> endobj 5012 0 obj << /Title (function::raise) /Parent 4993 0 R /Prev 5011 0 R /Next 5010 0 R /A 3592 0 R >> endobj 5010 0 obj << /Title (function::udelay) /Parent 4993 0 R /Prev 5012 0 R /A 3595 0 R >> endobj 5008 0 obj << /Title /Parent 4432 0 R /Prev 4993 0 R /Next 5013 0 R /First 5014 0 R /Last 5015 0 R /Count -15 /A 3598 0 R >> endobj 5014 0 obj << /Title (function::isdigit) /Parent 5008 0 R /Next 5016 0 R /A 3601 0 R >> endobj 5016 0 obj << /Title (function::isinstr) /Parent 5008 0 R /Prev 5014 0 R /Next 5017 0 R /A 3604 0 R >> endobj 5017 0 obj << /Title (function::matched) /Parent 5008 0 R /Prev 5016 0 R /Next 5018 0 R /A 3607 0 R >> endobj 5018 0 obj << /Title (function::matched_str) /Parent 5008 0 R /Prev 5017 0 R /Next 5019 0 R /A 3610 0 R >> endobj 5019 0 obj << /Title (function::ngroups) /Parent 5008 0 R /Prev 5018 0 R /Next 5020 0 R /A 3613 0 R >> endobj 5020 0 obj << /Title (function::str_replace) /Parent 5008 0 R /Prev 5019 0 R /Next 5021 0 R /A 3616 0 R >> endobj 5021 0 obj << /Title (function::string_quoted) /Parent 5008 0 R /Prev 5020 0 R /Next 5022 0 R /A 3619 0 R >> endobj 5022 0 obj << /Title (function::stringat) /Parent 5008 0 R /Prev 5021 0 R /Next 5023 0 R /A 3622 0 R >> endobj 5023 0 obj << /Title (function::strlen) /Parent 5008 0 R /Prev 5022 0 R /Next 5024 0 R /A 3625 0 R >> endobj 5024 0 obj << /Title (function::strpos) /Parent 5008 0 R /Prev 5023 0 R /Next 5025 0 R /A 3628 0 R >> endobj 5025 0 obj << /Title (function::strtol) /Parent 5008 0 R /Prev 5024 0 R /Next 5026 0 R /A 3631 0 R >> endobj 5026 0 obj << /Title (function::substr) /Parent 5008 0 R /Prev 5025 0 R /Next 5027 0 R /A 3634 0 R >> endobj 5027 0 obj << /Title (function::text_str) /Parent 5008 0 R /Prev 5026 0 R /Next 5028 0 R /A 3637 0 R >> endobj 5028 0 obj << /Title (function::text_strn) /Parent 5008 0 R /Prev 5027 0 R /Next 5015 0 R /A 3806 0 R >> endobj 5015 0 obj << /Title (function::tokenize) /Parent 5008 0 R /Prev 5028 0 R /A 3809 0 R >> endobj 5013 0 obj << /Title /Parent 4432 0 R /Prev 5008 0 R /Next 5029 0 R /First 5030 0 R /Last 5031 0 R /Count -13 /A 3812 0 R >> endobj 5030 0 obj << /Title (function::ansi_clear_screen) /Parent 5013 0 R /Next 5032 0 R /A 3815 0 R >> endobj 5032 0 obj << /Title (function::ansi_cursor_hide) /Parent 5013 0 R /Prev 5030 0 R /Next 5033 0 R /A 3818 0 R >> endobj 5033 0 obj << /Title (function::ansi_cursor_move) /Parent 5013 0 R /Prev 5032 0 R /Next 5034 0 R /A 3821 0 R >> endobj 5034 0 obj << /Title (function::ansi_cursor_restore) /Parent 5013 0 R /Prev 5033 0 R /Next 5035 0 R /A 3824 0 R >> endobj 5035 0 obj << /Title (function::ansi_cursor_save) /Parent 5013 0 R /Prev 5034 0 R /Next 5036 0 R /A 3827 0 R >> endobj 5036 0 obj << /Title (function::ansi_cursor_show) /Parent 5013 0 R /Prev 5035 0 R /Next 5037 0 R /A 3830 0 R >> endobj 5037 0 obj << /Title (function::ansi_new_line) /Parent 5013 0 R /Prev 5036 0 R /Next 5038 0 R /A 3833 0 R >> endobj 5038 0 obj << /Title (function::ansi_reset_color) /Parent 5013 0 R /Prev 5037 0 R /Next 5039 0 R /A 3836 0 R >> endobj 5039 0 obj << /Title (function::ansi_set_color) /Parent 5013 0 R /Prev 5038 0 R /Next 5040 0 R /A 3839 0 R >> endobj 5040 0 obj << /Title (function::indent) /Parent 5013 0 R /Prev 5039 0 R /Next 5041 0 R /A 3842 0 R >> endobj 5041 0 obj << /Title (function::indent_depth) /Parent 5013 0 R /Prev 5040 0 R /Next 5042 0 R /A 3845 0 R >> endobj 5042 0 obj << /Title (function::thread_indent) /Parent 5013 0 R /Prev 5041 0 R /Next 5031 0 R /A 3848 0 R >> endobj 5031 0 obj << /Title (function::thread_indent_depth) /Parent 5013 0 R /Prev 5042 0 R /A 3851 0 R >> endobj 5029 0 obj << /Title /Parent 4432 0 R /Prev 5013 0 R /Next 5043 0 R /First 5044 0 R /Last 5045 0 R /Count -27 /A 3854 0 R >> endobj 5044 0 obj << /Title (probe::stap.cache_add_mod) /Parent 5029 0 R /Next 5046 0 R /A 3857 0 R >> endobj 5046 0 obj << /Title (probe::stap.cache_add_nss) /Parent 5029 0 R /Prev 5044 0 R /Next 5047 0 R /A 3860 0 R >> endobj 5047 0 obj << /Title (probe::stap.cache_add_src) /Parent 5029 0 R /Prev 5046 0 R /Next 5048 0 R /A 3863 0 R >> endobj 5048 0 obj << /Title (probe::stap.cache_clean) /Parent 5029 0 R /Prev 5047 0 R /Next 5049 0 R /A 3866 0 R >> endobj 5049 0 obj << /Title (probe::stap.cache_get) /Parent 5029 0 R /Prev 5048 0 R /Next 5050 0 R /A 3869 0 R >> endobj 5050 0 obj << /Title (probe::stap.pass0) /Parent 5029 0 R /Prev 5049 0 R /Next 5051 0 R /A 3872 0 R >> endobj 5051 0 obj << /Title (probe::stap.pass0.end) /Parent 5029 0 R /Prev 5050 0 R /Next 5052 0 R /A 3875 0 R >> endobj 5052 0 obj << /Title (probe::stap.pass1.end) /Parent 5029 0 R /Prev 5051 0 R /Next 5053 0 R /A 3878 0 R >> endobj 5053 0 obj << /Title (probe::stap.pass1a) /Parent 5029 0 R /Prev 5052 0 R /Next 5054 0 R /A 3881 0 R >> endobj 5054 0 obj << /Title (probe::stap.pass1b) /Parent 5029 0 R /Prev 5053 0 R /Next 5055 0 R /A 3884 0 R >> endobj 5055 0 obj << /Title (probe::stap.pass2) /Parent 5029 0 R /Prev 5054 0 R /Next 5056 0 R /A 3887 0 R >> endobj 5056 0 obj << /Title (probe::stap.pass2.end) /Parent 5029 0 R /Prev 5055 0 R /Next 5057 0 R /A 3890 0 R >> endobj 5057 0 obj << /Title (probe::stap.pass3) /Parent 5029 0 R /Prev 5056 0 R /Next 5058 0 R /A 3893 0 R >> endobj 5058 0 obj << /Title (probe::stap.pass3.end) /Parent 5029 0 R /Prev 5057 0 R /Next 5059 0 R /A 3896 0 R >> endobj 5059 0 obj << /Title (probe::stap.pass4) /Parent 5029 0 R /Prev 5058 0 R /Next 5060 0 R /A 3899 0 R >> endobj 5060 0 obj << /Title (probe::stap.pass4.end) /Parent 5029 0 R /Prev 5059 0 R /Next 5061 0 R /A 3902 0 R >> endobj 5061 0 obj << /Title (probe::stap.pass5) /Parent 5029 0 R /Prev 5060 0 R /Next 5062 0 R /A 3905 0 R >> endobj 5062 0 obj << /Title (probe::stap.pass5.end) /Parent 5029 0 R /Prev 5061 0 R /Next 5063 0 R /A 3908 0 R >> endobj 5063 0 obj << /Title (probe::stap.pass6) /Parent 5029 0 R /Prev 5062 0 R /Next 5064 0 R /A 3911 0 R >> endobj 5064 0 obj << /Title (probe::stap.pass6.end) /Parent 5029 0 R /Prev 5063 0 R /Next 5065 0 R /A 3914 0 R >> endobj 5065 0 obj << /Title (probe::stap.system) /Parent 5029 0 R /Prev 5064 0 R /Next 5066 0 R /A 3917 0 R >> endobj 5066 0 obj << /Title (probe::stap.system.return) /Parent 5029 0 R /Prev 5065 0 R /Next 5067 0 R /A 3920 0 R >> endobj 5067 0 obj << /Title (probe::stap.system.spawn) /Parent 5029 0 R /Prev 5066 0 R /Next 5068 0 R /A 3923 0 R >> endobj 5068 0 obj << /Title (probe::stapio.receive_control_message) /Parent 5029 0 R /Prev 5067 0 R /Next 5069 0 R /A 3926 0 R >> endobj 5069 0 obj << /Title (probe::staprun.insert_module) /Parent 5029 0 R /Prev 5068 0 R /Next 5070 0 R /A 3929 0 R >> endobj 5070 0 obj << /Title (probe::staprun.remove_module) /Parent 5029 0 R /Prev 5069 0 R /Next 5045 0 R /A 3932 0 R >> endobj 5045 0 obj << /Title (probe::staprun.send_control_message) /Parent 5029 0 R /Prev 5070 0 R /A 3935 0 R >> endobj 5043 0 obj << /Title /Parent 4432 0 R /Prev 5029 0 R /Next 5071 0 R /First 5072 0 R /Last 5073 0 R /Count -60 /A 3938 0 R >> endobj 5072 0 obj << /Title (function::nfsderror) /Parent 5043 0 R /Next 5074 0 R /A 3941 0 R >> endobj 5074 0 obj << /Title (probe::nfs.aop.readpage) /Parent 5043 0 R /Prev 5072 0 R /Next 5075 0 R /A 3944 0 R >> endobj 5075 0 obj << /Title (probe::nfs.aop.readpages) /Parent 5043 0 R /Prev 5074 0 R /Next 5076 0 R /A 3947 0 R >> endobj 5076 0 obj << /Title (probe::nfs.aop.release_page) /Parent 5043 0 R /Prev 5075 0 R /Next 5077 0 R /A 3950 0 R >> endobj 5077 0 obj << /Title (probe::nfs.aop.set_page_dirty) /Parent 5043 0 R /Prev 5076 0 R /Next 5078 0 R /A 3953 0 R >> endobj 5078 0 obj << /Title (probe::nfs.aop.write_begin) /Parent 5043 0 R /Prev 5077 0 R /Next 5079 0 R /A 3956 0 R >> endobj 5079 0 obj << /Title (probe::nfs.aop.write_end) /Parent 5043 0 R /Prev 5078 0 R /Next 5080 0 R /A 3959 0 R >> endobj 5080 0 obj << /Title (probe::nfs.aop.writepage) /Parent 5043 0 R /Prev 5079 0 R /Next 5081 0 R /A 3962 0 R >> endobj 5081 0 obj << /Title (probe::nfs.aop.writepages) /Parent 5043 0 R /Prev 5080 0 R /Next 5082 0 R /A 3965 0 R >> endobj 5082 0 obj << /Title (probe::nfs.fop.aio_read) /Parent 5043 0 R /Prev 5081 0 R /Next 5083 0 R /A 4134 0 R >> endobj 5083 0 obj << /Title (probe::nfs.fop.aio_write) /Parent 5043 0 R /Prev 5082 0 R /Next 5084 0 R /A 4137 0 R >> endobj 5084 0 obj << /Title (probe::nfs.fop.check_flags) /Parent 5043 0 R /Prev 5083 0 R /Next 5085 0 R /A 4140 0 R >> endobj 5085 0 obj << /Title (probe::nfs.fop.flush) /Parent 5043 0 R /Prev 5084 0 R /Next 5086 0 R /A 4143 0 R >> endobj 5086 0 obj << /Title (probe::nfs.fop.fsync) /Parent 5043 0 R /Prev 5085 0 R /Next 5087 0 R /A 4146 0 R >> endobj 5087 0 obj << /Title (probe::nfs.fop.llseek) /Parent 5043 0 R /Prev 5086 0 R /Next 5088 0 R /A 4149 0 R >> endobj 5088 0 obj << /Title (probe::nfs.fop.lock) /Parent 5043 0 R /Prev 5087 0 R /Next 5089 0 R /A 4152 0 R >> endobj 5089 0 obj << /Title (probe::nfs.fop.mmap) /Parent 5043 0 R /Prev 5088 0 R /Next 5090 0 R /A 4155 0 R >> endobj 5090 0 obj << /Title (probe::nfs.fop.open) /Parent 5043 0 R /Prev 5089 0 R /Next 5091 0 R /A 4158 0 R >> endobj 5091 0 obj << /Title (probe::nfs.fop.read) /Parent 5043 0 R /Prev 5090 0 R /Next 5092 0 R /A 4161 0 R >> endobj 5092 0 obj << /Title (probe::nfs.fop.read_iter) /Parent 5043 0 R /Prev 5091 0 R /Next 5093 0 R /A 4164 0 R >> endobj 5093 0 obj << /Title (probe::nfs.fop.release) /Parent 5043 0 R /Prev 5092 0 R /Next 5094 0 R /A 4167 0 R >> endobj 5094 0 obj << /Title (probe::nfs.fop.sendfile) /Parent 5043 0 R /Prev 5093 0 R /Next 5095 0 R /A 4170 0 R >> endobj 5095 0 obj << /Title (probe::nfs.fop.write) /Parent 5043 0 R /Prev 5094 0 R /Next 5096 0 R /A 4173 0 R >> endobj 5096 0 obj << /Title (probe::nfs.fop.write_iter) /Parent 5043 0 R /Prev 5095 0 R /Next 5097 0 R /A 4176 0 R >> endobj 5097 0 obj << /Title (probe::nfs.proc.commit) /Parent 5043 0 R /Prev 5096 0 R /Next 5098 0 R /A 4179 0 R >> endobj 5098 0 obj << /Title (probe::nfs.proc.commit_done) /Parent 5043 0 R /Prev 5097 0 R /Next 5099 0 R /A 4182 0 R >> endobj 5099 0 obj << /Title (probe::nfs.proc.commit_setup) /Parent 5043 0 R /Prev 5098 0 R /Next 5100 0 R /A 4185 0 R >> endobj 5100 0 obj << /Title (probe::nfs.proc.create) /Parent 5043 0 R /Prev 5099 0 R /Next 5101 0 R /A 4188 0 R >> endobj 5101 0 obj << /Title (probe::nfs.proc.handle_exception) /Parent 5043 0 R /Prev 5100 0 R /Next 5102 0 R /A 4191 0 R >> endobj 5102 0 obj << /Title (probe::nfs.proc.lookup) /Parent 5043 0 R /Prev 5101 0 R /Next 5103 0 R /A 4194 0 R >> endobj 5103 0 obj << /Title (probe::nfs.proc.open) /Parent 5043 0 R /Prev 5102 0 R /Next 5104 0 R /A 4197 0 R >> endobj 5104 0 obj << /Title (probe::nfs.proc.read) /Parent 5043 0 R /Prev 5103 0 R /Next 5105 0 R /A 4200 0 R >> endobj 5105 0 obj << /Title (probe::nfs.proc.read_done) /Parent 5043 0 R /Prev 5104 0 R /Next 5106 0 R /A 4203 0 R >> endobj 5106 0 obj << /Title (probe::nfs.proc.read_setup) /Parent 5043 0 R /Prev 5105 0 R /Next 5107 0 R /A 4206 0 R >> endobj 5107 0 obj << /Title (probe::nfs.proc.release) /Parent 5043 0 R /Prev 5106 0 R /Next 5108 0 R /A 4209 0 R >> endobj 5108 0 obj << /Title (probe::nfs.proc.remove) /Parent 5043 0 R /Prev 5107 0 R /Next 5109 0 R /A 4212 0 R >> endobj 5109 0 obj << /Title (probe::nfs.proc.rename) /Parent 5043 0 R /Prev 5108 0 R /Next 5110 0 R /A 4215 0 R >> endobj 5110 0 obj << /Title (probe::nfs.proc.rename_done) /Parent 5043 0 R /Prev 5109 0 R /Next 5111 0 R /A 4218 0 R >> endobj 5111 0 obj << /Title (probe::nfs.proc.rename_setup) /Parent 5043 0 R /Prev 5110 0 R /Next 5112 0 R /A 4221 0 R >> endobj 5112 0 obj << /Title (probe::nfs.proc.write) /Parent 5043 0 R /Prev 5111 0 R /Next 5113 0 R /A 4224 0 R >> endobj 5113 0 obj << /Title (probe::nfs.proc.write_done) /Parent 5043 0 R /Prev 5112 0 R /Next 5114 0 R /A 4227 0 R >> endobj 5114 0 obj << /Title (probe::nfs.proc.write_setup) /Parent 5043 0 R /Prev 5113 0 R /Next 5115 0 R /A 4230 0 R >> endobj 5115 0 obj << /Title (probe::nfsd.close) /Parent 5043 0 R /Prev 5114 0 R /Next 5116 0 R /A 4233 0 R >> endobj 5116 0 obj << /Title (probe::nfsd.commit) /Parent 5043 0 R /Prev 5115 0 R /Next 5117 0 R /A 4236 0 R >> endobj 5117 0 obj << /Title (probe::nfsd.create) /Parent 5043 0 R /Prev 5116 0 R /Next 5118 0 R /A 4239 0 R >> endobj 5118 0 obj << /Title (probe::nfsd.createv3) /Parent 5043 0 R /Prev 5117 0 R /Next 5119 0 R /A 4242 0 R >> endobj 5119 0 obj << /Title (probe::nfsd.dispatch) /Parent 5043 0 R /Prev 5118 0 R /Next 5120 0 R /A 4245 0 R >> endobj 5120 0 obj << /Title (probe::nfsd.lookup) /Parent 5043 0 R /Prev 5119 0 R /Next 5121 0 R /A 4248 0 R >> endobj 5121 0 obj << /Title (probe::nfsd.open) /Parent 5043 0 R /Prev 5120 0 R /Next 5122 0 R /A 4251 0 R >> endobj 5122 0 obj << /Title (probe::nfsd.proc.commit) /Parent 5043 0 R /Prev 5121 0 R /Next 5123 0 R /A 4254 0 R >> endobj 5123 0 obj << /Title (probe::nfsd.proc.create) /Parent 5043 0 R /Prev 5122 0 R /Next 5124 0 R /A 4257 0 R >> endobj 5124 0 obj << /Title (probe::nfsd.proc.lookup) /Parent 5043 0 R /Prev 5123 0 R /Next 5125 0 R /A 4260 0 R >> endobj 5125 0 obj << /Title (probe::nfsd.proc.read) /Parent 5043 0 R /Prev 5124 0 R /Next 5126 0 R /A 4263 0 R >> endobj 5126 0 obj << /Title (probe::nfsd.proc.remove) /Parent 5043 0 R /Prev 5125 0 R /Next 5127 0 R /A 4266 0 R >> endobj 5127 0 obj << /Title (probe::nfsd.proc.rename) /Parent 5043 0 R /Prev 5126 0 R /Next 5128 0 R /A 4269 0 R >> endobj 5128 0 obj << /Title (probe::nfsd.proc.write) /Parent 5043 0 R /Prev 5127 0 R /Next 5129 0 R /A 4272 0 R >> endobj 5129 0 obj << /Title (probe::nfsd.read) /Parent 5043 0 R /Prev 5128 0 R /Next 5130 0 R /A 4275 0 R >> endobj 5130 0 obj << /Title (probe::nfsd.rename) /Parent 5043 0 R /Prev 5129 0 R /Next 5131 0 R /A 4278 0 R >> endobj 5131 0 obj << /Title (probe::nfsd.unlink) /Parent 5043 0 R /Prev 5130 0 R /Next 5073 0 R /A 4281 0 R >> endobj 5073 0 obj << /Title (probe::nfsd.write) /Parent 5043 0 R /Prev 5131 0 R /A 4284 0 R >> endobj 5071 0 obj << /Title /Parent 4432 0 R /Prev 5043 0 R /Next 5132 0 R /First 5133 0 R /Last 5134 0 R /Count -4 /A 4287 0 R >> endobj 5133 0 obj << /Title (function::commit) /Parent 5071 0 R /Next 5135 0 R /A 4290 0 R >> endobj 5135 0 obj << /Title (function::discard) /Parent 5071 0 R /Prev 5133 0 R /Next 5136 0 R /A 4293 0 R >> endobj 5136 0 obj << /Title (function::speculate) /Parent 5071 0 R /Prev 5135 0 R /Next 5134 0 R /A 4363 0 R >> endobj 5134 0 obj << /Title (function::speculation) /Parent 5071 0 R /Prev 5136 0 R /A 4366 0 R >> endobj 5132 0 obj << /Title /Parent 4432 0 R /Prev 5071 0 R /Next 5137 0 R /First 5138 0 R /Last 5139 0 R /Count -13 /A 4369 0 R >> endobj 5138 0 obj << /Title (function::json_add_array) /Parent 5132 0 R /Next 5140 0 R /A 4372 0 R >> endobj 5140 0 obj << /Title (function::json_add_array_numeric_metric) /Parent 5132 0 R /Prev 5138 0 R /Next 5141 0 R /A 4375 0 R >> endobj 5141 0 obj << /Title (function::json_add_array_string_metric) /Parent 5132 0 R /Prev 5140 0 R /Next 5142 0 R /A 4378 0 R >> endobj 5142 0 obj << /Title (function::json_add_numeric_metric) /Parent 5132 0 R /Prev 5141 0 R /Next 5143 0 R /A 4381 0 R >> endobj 5143 0 obj << /Title (function::json_add_string_metric) /Parent 5132 0 R /Prev 5142 0 R /Next 5144 0 R /A 4384 0 R >> endobj 5144 0 obj << /Title (function::json_set_prefix) /Parent 5132 0 R /Prev 5143 0 R /Next 5145 0 R /A 4387 0 R >> endobj 5145 0 obj << /Title (macro::json_output_array_numeric_value) /Parent 5132 0 R /Prev 5144 0 R /Next 5146 0 R /A 4390 0 R >> endobj 5146 0 obj << /Title (macro::json_output_array_string_value) /Parent 5132 0 R /Prev 5145 0 R /Next 5147 0 R /A 4393 0 R >> endobj 5147 0 obj << /Title (macro::json_output_data_end) /Parent 5132 0 R /Prev 5146 0 R /Next 5148 0 R /A 4396 0 R >> endobj 5148 0 obj << /Title (macro::json_output_data_start) /Parent 5132 0 R /Prev 5147 0 R /Next 5149 0 R /A 4399 0 R >> endobj 5149 0 obj << /Title (macro::json_output_numeric_value) /Parent 5132 0 R /Prev 5148 0 R /Next 5150 0 R /A 4402 0 R >> endobj 5150 0 obj << /Title (macro::json_output_string_value) /Parent 5132 0 R /Prev 5149 0 R /Next 5139 0 R /A 4405 0 R >> endobj 5139 0 obj << /Title (probe::json_data) /Parent 5132 0 R /Prev 5150 0 R /A 4408 0 R >> endobj 5137 0 obj << /Title /Parent 4432 0 R /Prev 5132 0 R /Next 5151 0 R /First 5152 0 R /Last 5152 0 R /Count -1 /A 4411 0 R >> endobj 5152 0 obj << /Title (function::switch_file) /Parent 5137 0 R /A 4414 0 R >> endobj 5151 0 obj << /Title /Parent 4432 0 R /Prev 5137 0 R /First 5153 0 R /Last 5154 0 R /Count -2 /A 4417 0 R >> endobj 5153 0 obj << /Title (probe::syscall_any) /Parent 5151 0 R /Next 5154 0 R /A 4420 0 R >> endobj 5154 0 obj << /Title (probe::syscall_any.return) /Parent 5151 0 R /Prev 5153 0 R /A 4423 0 R >> endobj 5155 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Italic /Encoding /WinAnsiEncoding >> endobj 5156 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Bold /Encoding /WinAnsiEncoding >> endobj 5157 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 5158 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Oblique /Encoding /WinAnsiEncoding >> endobj 5159 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj 5160 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 5161 0 obj << /Limits [(API-HZ) (API-HZ)] /Names [(API-HZ) 899 0 R] >> endobj 5162 0 obj << /Limits [(API-MAJOR) (API-MAJOR)] /Names [(API-MAJOR) 2903 0 R] >> endobj 5163 0 obj << /Limits [(API-MINOR) (API-MINOR)] /Names [(API-MINOR) 2906 0 R] >> endobj 5164 0 obj << /Limits [(API-MKDEV) (API-MKDEV)] /Names [(API-MKDEV) 2909 0 R] >> endobj 5165 0 obj << /Limits [(API-abort) (API-abort)] /Names [(API-abort) 2951 0 R] >> endobj 5166 0 obj << /Limits [(API-addr) (API-addr)] /Names [(API-addr) 174 0 R] >> endobj 5167 0 obj << /Limits [(API-addr-to-node) (API-addr-to-node)] /Names [(API-addr-to-node) 1158 0 R] >> endobj 5168 0 obj << /Limits [(API-ansi-clear-screen) (API-ansi-clear-screen)] /Names [(API-ansi-clear-screen) 3815 0 R] >> endobj 5169 0 obj << /Limits [(API-ansi-cursor-hide) (API-ansi-cursor-hide)] /Names [(API-ansi-cursor-hide) 3818 0 R] >> endobj 5170 0 obj << /Limits [(API-ansi-cursor-move) (API-ansi-cursor-move)] /Names [(API-ansi-cursor-move) 3821 0 R] >> endobj 5171 0 obj << /Limits [(API-ansi-cursor-restore) (API-ansi-cursor-restore)] /Names [(API-ansi-cursor-restore) 3824 0 R] >> endobj 5172 0 obj << /Limits [(API-ansi-cursor-save) (API-ansi-cursor-save)] /Names [(API-ansi-cursor-save) 3827 0 R] >> endobj 5173 0 obj << /Limits [(API-ansi-cursor-show) (API-ansi-cursor-show)] /Names [(API-ansi-cursor-show) 3830 0 R] >> endobj 5174 0 obj << /Limits [(API-ansi-new-line) (API-ansi-new-line)] /Names [(API-ansi-new-line) 3833 0 R] >> endobj 5175 0 obj << /Limits [(API-ansi-reset-color) (API-ansi-reset-color)] /Names [(API-ansi-reset-color) 3836 0 R] >> endobj 5176 0 obj << /Limits [(API-ansi-set-color) (API-ansi-set-color)] /Names [(API-ansi-set-color) 3839 0 R] >> endobj 5177 0 obj << /Limits [(API-asmlinkage) (API-asmlinkage)] /Names [(API-asmlinkage) 177 0 R] >> endobj 5178 0 obj << /Limits [(API-assert) (API-assert)] /Names [(API-assert) 2954 0 R] >> endobj 5179 0 obj << /Limits [(API-atomic-long-read) (API-atomic-long-read)] /Names [(API-atomic-long-read) 3186 0 R] >> endobj 5180 0 obj << /Limits [(API-atomic-read) (API-atomic-read)] /Names [(API-atomic-read) 3189 0 R] >> endobj 5181 0 obj << /Limits [(API-backtrace) (API-backtrace)] /Names [(API-backtrace) 180 0 R] >> endobj 5182 0 obj << /Limits [(API-bytes-to-string) (API-bytes-to-string)] /Names [(API-bytes-to-string) 1161 0 R] >> endobj 5183 0 obj << /Limits [(API-caller) (API-caller)] /Names [(API-caller) 183 0 R] >> endobj 5184 0 obj << /Limits [(API-caller-addr) (API-caller-addr)] /Names [(API-caller-addr) 186 0 R] >> endobj 5185 0 obj << /Limits [(API-callers) (API-callers)] /Names [(API-callers) 189 0 R] >> endobj 5186 0 obj << /Limits [(API-cmdline-arg) (API-cmdline-arg)] /Names [(API-cmdline-arg) 192 0 R] >> endobj 5187 0 obj << /Limits [(API-cmdline-args) (API-cmdline-args)] /Names [(API-cmdline-args) 195 0 R] >> endobj 5188 0 obj << /Limits [(API-cmdline-str) (API-cmdline-str)] /Names [(API-cmdline-str) 198 0 R] >> endobj 5189 0 obj << /Limits [(API-commit) (API-commit)] /Names [(API-commit) 4290 0 R] >> endobj 5190 0 obj << /Limits [(API-cpu) (API-cpu)] /Names [(API-cpu) 201 0 R] >> endobj 5191 0 obj << /Limits [(API-cpu-clock-ms) (API-cpu-clock-ms)] /Names [(API-cpu-clock-ms) 902 0 R] >> endobj 5192 0 obj << /Limits [(API-cpu-clock-ns) (API-cpu-clock-ns)] /Names [(API-cpu-clock-ns) 905 0 R] >> endobj 5193 0 obj << /Limits [(API-cpu-clock-s) (API-cpu-clock-s)] /Names [(API-cpu-clock-s) 908 0 R] >> endobj 5194 0 obj << /Limits [(API-cpu-clock-us) (API-cpu-clock-us)] /Names [(API-cpu-clock-us) 911 0 R] >> endobj 5195 0 obj << /Limits [(API-cpuid) (API-cpuid)] /Names [(API-cpuid) 204 0 R] >> endobj 5196 0 obj << /Limits [(API-cputime-to-msecs) (API-cputime-to-msecs)] /Names [(API-cputime-to-msecs) 1236 0 R] >> endobj 5197 0 obj << /Limits [(API-cputime-to-string) (API-cputime-to-string)] /Names [(API-cputime-to-string) 1239 0 R] >> endobj 5198 0 obj << /Limits [(API-cputime-to-usecs) (API-cputime-to-usecs)] /Names [(API-cputime-to-usecs) 1242 0 R] >> endobj 5199 0 obj << /Limits [(API-ctime) (API-ctime)] /Names [(API-ctime) 971 0 R] >> endobj 5200 0 obj << /Limits [(API-current-exe-file) (API-current-exe-file)] /Names [(API-current-exe-file) 207 0 R] >> endobj 5201 0 obj << /Limits [(API-d-name) (API-d-name)] /Names [(API-d-name) 2918 0 R] >> endobj 5202 0 obj << /Limits [(API-d-path) (API-d-path)] /Names [(API-d-path) 2921 0 R] >> endobj 5203 0 obj << /Limits [(API-delete-stopwatch) (API-delete-stopwatch)] /Names [(API-delete-stopwatch) 914 0 R] >> endobj 5204 0 obj << /Limits [(API-discard) (API-discard)] /Names [(API-discard) 4293 0 R] >> endobj 5205 0 obj << /Limits [(API-egid) (API-egid)] /Names [(API-egid) 210 0 R] >> endobj 5206 0 obj << /Limits [(API-env-var) (API-env-var)] /Names [(API-env-var) 213 0 R] >> endobj 5207 0 obj << /Limits [(API-errno-str) (API-errno-str)] /Names [(API-errno-str) 2882 0 R] >> endobj 5208 0 obj << /Limits [(API-error) (API-error)] /Names [(API-error) 2957 0 R] >> endobj 5209 0 obj << /Limits [(API-euid) (API-euid)] /Names [(API-euid) 216 0 R] >> endobj 5210 0 obj << /Limits [(API-execname) (API-execname)] /Names [(API-execname) 219 0 R] >> endobj 5211 0 obj << /Limits [(API-exit) (API-exit)] /Names [(API-exit) 2960 0 R] >> endobj 5212 0 obj << /Limits [(API-fastcall) (API-fastcall)] /Names [(API-fastcall) 222 0 R] >> endobj 5213 0 obj << /Limits [(API-format-ipaddr) (API-format-ipaddr)] /Names [(API-format-ipaddr) 1630 0 R] >> endobj 5214 0 obj << /Limits [(API-ftrace) (API-ftrace)] /Names [(API-ftrace) 2963 0 R] >> endobj 5215 0 obj << /Limits [(API-fullpath-struct-file) (API-fullpath-struct-file)] /Names [(API-fullpath-struct-file) 2924 0 R] >> endobj 5216 0 obj << /Limits [(API-fullpath-struct-nameidata) (API-fullpath-struct-nameidata)] /Names [(API-fullpath-struct-nameidata) 2927 0 R] >> endobj 5217 0 obj << /Limits [(API-fullpath-struct-path) (API-fullpath-struct-path)] /Names [(API-fullpath-struct-path) 2930 0 R] >> endobj 5218 0 obj << /Limits [(API-get-cycles) (API-get-cycles)] /Names [(API-get-cycles) 917 0 R] >> endobj 5219 0 obj << /Limits [(API-get-loadavg-index) (API-get-loadavg-index)] /Names [(API-get-loadavg-index) 2581 0 R] >> endobj 5220 0 obj << /Limits [(API-get-sa-flags) (API-get-sa-flags)] /Names [(API-get-sa-flags) 2614 0 R] >> endobj 5221 0 obj << /Limits [(API-get-sa-handler) (API-get-sa-handler)] /Names [(API-get-sa-handler) 2617 0 R] >> endobj 5222 0 obj << /Limits [(API-gettimeofday-ms) (API-gettimeofday-ms)] /Names [(API-gettimeofday-ms) 920 0 R] >> endobj 5223 0 obj << /Limits [(API-gettimeofday-ns) (API-gettimeofday-ns)] /Names [(API-gettimeofday-ns) 923 0 R] >> endobj 5224 0 obj << /Limits [(API-gettimeofday-s) (API-gettimeofday-s)] /Names [(API-gettimeofday-s) 926 0 R] >> endobj 5225 0 obj << /Limits [(API-gettimeofday-us) (API-gettimeofday-us)] /Names [(API-gettimeofday-us) 929 0 R] >> endobj 5226 0 obj << /Limits [(API-gid) (API-gid)] /Names [(API-gid) 225 0 R] >> endobj 5227 0 obj << /Limits [(API-htonl) (API-htonl)] /Names [(API-htonl) 1838 0 R] >> endobj 5228 0 obj << /Limits [(API-htonll) (API-htonll)] /Names [(API-htonll) 1841 0 R] >> endobj 5229 0 obj << /Limits [(API-htons) (API-htons)] /Names [(API-htons) 1844 0 R] >> endobj 5230 0 obj << /Limits [(API-indent) (API-indent)] /Names [(API-indent) 3842 0 R] >> endobj 5231 0 obj << /Limits [(API-indent-depth) (API-indent-depth)] /Names [(API-indent-depth) 3845 0 R] >> endobj 5232 0 obj << /Limits [(API-inet-get-ip-source) (API-inet-get-ip-source)] /Names [(API-inet-get-ip-source) 2208 0 R] >> endobj 5233 0 obj << /Limits [(API-inet-get-local-port) (API-inet-get-local-port)] /Names [(API-inet-get-local-port) 2211 0 R] >> endobj 5234 0 obj << /Limits [(API-inode-name) (API-inode-name)] /Names [(API-inode-name) 2933 0 R] >> endobj 5235 0 obj << /Limits [(API-inode-path) (API-inode-path)] /Names [(API-inode-path) 2936 0 R] >> endobj 5236 0 obj << /Limits [(API-int-arg) (API-int-arg)] /Names [(API-int-arg) 228 0 R] >> endobj 5237 0 obj << /Limits [(API-ioblock-end) (API-ioblock-end)] /Names [(API-ioblock-end) 1489 0 R] >> endobj 5238 0 obj << /Limits [(API-ioblock-request) (API-ioblock-request)] /Names [(API-ioblock-request) 1492 0 R] >> endobj 5239 0 obj << /Limits [(API-ioblock-trace-bounce) (API-ioblock-trace-bounce)] /Names [(API-ioblock-trace-bounce) 1495 0 R] >> endobj 5240 0 obj << /Limits [(API-ioblock-trace-end) (API-ioblock-trace-end)] /Names [(API-ioblock-trace-end) 1498 0 R] >> endobj 5241 0 obj << /Limits [(API-ioblock-trace-request) (API-ioblock-trace-request)] /Names [(API-ioblock-trace-request) 1501 0 R] >> endobj 5242 0 obj << /Limits [(API-ioscheduler-elv-add-request) (API-ioscheduler-elv-add-request)] /Names [(API-ioscheduler-elv-add-request) 1504 0 R] >> endobj 5243 0 obj << /Limits [(API-ioscheduler-elv-add-request-kp) (API-ioscheduler-elv-add-request-kp)] /Names [(API-ioscheduler-elv-add-request-kp) 1507 0 R] >> endobj 5244 0 obj << /Limits [(API-ioscheduler-elv-add-request-tp) (API-ioscheduler-elv-add-request-tp)] /Names [(API-ioscheduler-elv-add-request-tp) 1510 0 R] >> endobj 5245 0 obj << /Limits [(API-ioscheduler-elv-completed-request) (API-ioscheduler-elv-completed-request)] /Names [(API-ioscheduler-elv-completed-request) 1513 0 R] >> endobj 5246 0 obj << /Limits [(API-ioscheduler-elv-next-request) (API-ioscheduler-elv-next-request)] /Names [(API-ioscheduler-elv-next-request) 1516 0 R] >> endobj 5247 0 obj << /Limits [(API-ioscheduler-elv-next-request-return) (API-ioscheduler-elv-next-request-return)] /Names [(API-ioscheduler-elv-next-request-return) 1519 0 R] >> endobj 5248 0 obj << /Limits [(API-ioscheduler-trace-elv-abort-request) (API-ioscheduler-trace-elv-abort-request)] /Names [(API-ioscheduler-trace-elv-abort-request) 1522 0 R] >> endobj 5249 0 obj << /Limits [(API-ioscheduler-trace-elv-completed-request) (API-ioscheduler-trace-elv-completed-request)] /Names [(API-ioscheduler-trace-elv-completed-request) 1525 0 R] >> endobj 5250 0 obj << /Limits [(API-ioscheduler-trace-elv-issue-request) (API-ioscheduler-trace-elv-issue-request)] /Names [(API-ioscheduler-trace-elv-issue-request) 1528 0 R] >> endobj 5251 0 obj << /Limits [(API-ioscheduler-trace-elv-requeue-request) (API-ioscheduler-trace-elv-requeue-request)] /Names [(API-ioscheduler-trace-elv-requeue-request) 1531 0 R] >> endobj 5252 0 obj << /Limits [(API-ioscheduler-trace-plug) (API-ioscheduler-trace-plug)] /Names [(API-ioscheduler-trace-plug) 1534 0 R] >> endobj 5253 0 obj << /Limits [(API-ioscheduler-trace-unplug-io) (API-ioscheduler-trace-unplug-io)] /Names [(API-ioscheduler-trace-unplug-io) 1537 0 R] >> endobj 5254 0 obj << /Limits [(API-ioscheduler-trace-unplug-timer) (API-ioscheduler-trace-unplug-timer)] /Names [(API-ioscheduler-trace-unplug-timer) 1540 0 R] >> endobj 5255 0 obj << /Limits [(API-ip-ntop) (API-ip-ntop)] /Names [(API-ip-ntop) 1847 0 R] >> endobj 5256 0 obj << /Limits [(API-ipmib-ForwDatagrams) (API-ipmib-ForwDatagrams)] /Names [(API-ipmib-ForwDatagrams) 2506 0 R] >> endobj 5257 0 obj << /Limits [(API-ipmib-FragFails) (API-ipmib-FragFails)] /Names [(API-ipmib-FragFails) 2509 0 R] >> endobj 5258 0 obj << /Limits [(API-ipmib-FragOKs) (API-ipmib-FragOKs)] /Names [(API-ipmib-FragOKs) 2512 0 R] >> endobj 5259 0 obj << /Limits [(API-ipmib-InAddrErrors) (API-ipmib-InAddrErrors)] /Names [(API-ipmib-InAddrErrors) 2515 0 R] >> endobj 5260 0 obj << /Limits [(API-ipmib-InDiscards) (API-ipmib-InDiscards)] /Names [(API-ipmib-InDiscards) 2518 0 R] >> endobj 5261 0 obj << /Limits [(API-ipmib-InNoRoutes) (API-ipmib-InNoRoutes)] /Names [(API-ipmib-InNoRoutes) 2521 0 R] >> endobj 5262 0 obj << /Limits [(API-ipmib-InReceives) (API-ipmib-InReceives)] /Names [(API-ipmib-InReceives) 2524 0 R] >> endobj 5263 0 obj << /Limits [(API-ipmib-InUnknownProtos) (API-ipmib-InUnknownProtos)] /Names [(API-ipmib-InUnknownProtos) 2527 0 R] >> endobj 5264 0 obj << /Limits [(API-ipmib-OutRequests) (API-ipmib-OutRequests)] /Names [(API-ipmib-OutRequests) 2530 0 R] >> endobj 5265 0 obj << /Limits [(API-ipmib-ReasmReqds) (API-ipmib-ReasmReqds)] /Names [(API-ipmib-ReasmReqds) 2533 0 R] >> endobj 5266 0 obj << /Limits [(API-ipmib-ReasmTimeout) (API-ipmib-ReasmTimeout)] /Names [(API-ipmib-ReasmTimeout) 2536 0 R] >> endobj 5267 0 obj << /Limits [(API-ipmib-filter-key) (API-ipmib-filter-key)] /Names [(API-ipmib-filter-key) 2301 0 R] >> endobj 5268 0 obj << /Limits [(API-ipmib-get-proto) (API-ipmib-get-proto)] /Names [(API-ipmib-get-proto) 2304 0 R] >> endobj 5269 0 obj << /Limits [(API-ipmib-local-addr) (API-ipmib-local-addr)] /Names [(API-ipmib-local-addr) 2307 0 R] >> endobj 5270 0 obj << /Limits [(API-ipmib-remote-addr) (API-ipmib-remote-addr)] /Names [(API-ipmib-remote-addr) 2310 0 R] >> endobj 5271 0 obj << /Limits [(API-ipmib-tcp-local-port) (API-ipmib-tcp-local-port)] /Names [(API-ipmib-tcp-local-port) 2313 0 R] >> endobj 5272 0 obj << /Limits [(API-ipmib-tcp-remote-port) (API-ipmib-tcp-remote-port)] /Names [(API-ipmib-tcp-remote-port) 2316 0 R] >> endobj 5273 0 obj << /Limits [(API-irq-handler-entry) (API-irq-handler-entry)] /Names [(API-irq-handler-entry) 1603 0 R] >> endobj 5274 0 obj << /Limits [(API-irq-handler-exit) (API-irq-handler-exit)] /Names [(API-irq-handler-exit) 1606 0 R] >> endobj 5275 0 obj << /Limits [(API-is-myproc) (API-is-myproc)] /Names [(API-is-myproc) 231 0 R] >> endobj 5276 0 obj << /Limits [(API-is-return) (API-is-return)] /Names [(API-is-return) 234 0 R] >> endobj 5277 0 obj << /Limits [(API-is-sig-blocked) (API-is-sig-blocked)] /Names [(API-is-sig-blocked) 2620 0 R] >> endobj 5278 0 obj << /Limits [(API-isdigit) (API-isdigit)] /Names [(API-isdigit) 3601 0 R] >> endobj 5279 0 obj << /Limits [(API-isinstr) (API-isinstr)] /Names [(API-isinstr) 3604 0 R] >> endobj 5280 0 obj << /Limits [(API-jiffies) (API-jiffies)] /Names [(API-jiffies) 932 0 R] >> endobj 5281 0 obj << /Limits [(API-json-add-array) (API-json-add-array)] /Names [(API-json-add-array) 4372 0 R] >> endobj 5282 0 obj << /Limits [(API-json-add-array-numeric-metric) (API-json-add-array-numeric-metric)] /Names [(API-json-add-array-numeric-metric) 4375 0 R] >> endobj 5283 0 obj << /Limits [(API-json-add-array-string-metric) (API-json-add-array-string-metric)] /Names [(API-json-add-array-string-metric) 4378 0 R] >> endobj 5284 0 obj << /Limits [(API-json-add-numeric-metric) (API-json-add-numeric-metric)] /Names [(API-json-add-numeric-metric) 4381 0 R] >> endobj 5285 0 obj << /Limits [(API-json-add-string-metric) (API-json-add-string-metric)] /Names [(API-json-add-string-metric) 4384 0 R] >> endobj 5286 0 obj << /Limits [(API-json-data) (API-json-data)] /Names [(API-json-data) 4408 0 R] >> endobj 5287 0 obj << /Limits [(API-json-output-array-numeric-value) (API-json-output-array-numeric-value)] /Names [(API-json-output-array-numeric-value) 4390 0 R] >> endobj 5288 0 obj << /Limits [(API-json-output-array-string-value) (API-json-output-array-string-value)] /Names [(API-json-output-array-string-value) 4393 0 R] >> endobj 5289 0 obj << /Limits [(API-json-output-data-end) (API-json-output-data-end)] /Names [(API-json-output-data-end) 4396 0 R] >> endobj 5290 0 obj << /Limits [(API-json-output-data-start) (API-json-output-data-start)] /Names [(API-json-output-data-start) 4399 0 R] >> endobj 5291 0 obj << /Limits [(API-json-output-numeric-value) (API-json-output-numeric-value)] /Names [(API-json-output-numeric-value) 4402 0 R] >> endobj 5292 0 obj << /Limits [(API-json-output-string-value) (API-json-output-string-value)] /Names [(API-json-output-string-value) 4405 0 R] >> endobj 5293 0 obj << /Limits [(API-json-set-prefix) (API-json-set-prefix)] /Names [(API-json-set-prefix) 4387 0 R] >> endobj 5294 0 obj << /Limits [(API-kernel-buffer-quoted) (API-kernel-buffer-quoted)] /Names [(API-kernel-buffer-quoted) 3192 0 R] >> endobj 5295 0 obj << /Limits [(API-kernel-buffer-quoted-error) (API-kernel-buffer-quoted-error)] /Names [(API-kernel-buffer-quoted-error) 3195 0 R] >> endobj 5296 0 obj << /Limits [(API-kernel-char) (API-kernel-char)] /Names [(API-kernel-char) 3198 0 R] >> endobj 5297 0 obj << /Limits [(API-kernel-int) (API-kernel-int)] /Names [(API-kernel-int) 3201 0 R] >> endobj 5298 0 obj << /Limits [(API-kernel-long) (API-kernel-long)] /Names [(API-kernel-long) 3204 0 R] >> endobj 5299 0 obj << /Limits [(API-kernel-pointer) (API-kernel-pointer)] /Names [(API-kernel-pointer) 3207 0 R] >> endobj 5300 0 obj << /Limits [(API-kernel-short) (API-kernel-short)] /Names [(API-kernel-short) 3210 0 R] >> endobj 5301 0 obj << /Limits [(API-kernel-string) (API-kernel-string)] /Names [(API-kernel-string) 3213 0 R] >> endobj 5302 0 obj << /Limits [(API-kernel-string-n) (API-kernel-string-n)] /Names [(API-kernel-string-n) 3216 0 R] >> endobj 5303 0 obj << /Limits [(API-kernel-string-quoted) (API-kernel-string-quoted)] /Names [(API-kernel-string-quoted) 3219 0 R] >> endobj 5304 0 obj << /Limits [(API-kernel-string-quoted-utf16) (API-kernel-string-quoted-utf16)] /Names [(API-kernel-string-quoted-utf16) 3222 0 R] >> endobj 5305 0 obj << /Limits [(API-kernel-string-quoted-utf32) (API-kernel-string-quoted-utf32)] /Names [(API-kernel-string-quoted-utf32) 3225 0 R] >> endobj 5306 0 obj << /Limits [(API-kernel-string-utf16) (API-kernel-string-utf16)] /Names [(API-kernel-string-utf16) 3228 0 R] >> endobj 5307 0 obj << /Limits [(API-kernel-string-utf32) (API-kernel-string-utf32)] /Names [(API-kernel-string-utf32) 3231 0 R] >> endobj 5308 0 obj << /Limits [(API-kprocess-create) (API-kprocess-create)] /Names [(API-kprocess-create) 2593 0 R] >> endobj 5309 0 obj << /Limits [(API-kprocess-exec) (API-kprocess-exec)] /Names [(API-kprocess-exec) 2596 0 R] >> endobj 5310 0 obj << /Limits [(API-kprocess-exec-complete) (API-kprocess-exec-complete)] /Names [(API-kprocess-exec-complete) 2599 0 R] >> endobj 5311 0 obj << /Limits [(API-kprocess-exit) (API-kprocess-exit)] /Names [(API-kprocess-exit) 2602 0 R] >> endobj 5312 0 obj << /Limits [(API-kprocess-release) (API-kprocess-release)] /Names [(API-kprocess-release) 2605 0 R] >> endobj 5313 0 obj << /Limits [(API-kprocess-start) (API-kprocess-start)] /Names [(API-kprocess-start) 2608 0 R] >> endobj 5314 0 obj << /Limits [(API-ktime-get-ns) (API-ktime-get-ns)] /Names [(API-ktime-get-ns) 935 0 R] >> endobj 5315 0 obj << /Limits [(API-linuxmib-DelayedACKs) (API-linuxmib-DelayedACKs)] /Names [(API-linuxmib-DelayedACKs) 2539 0 R] >> endobj 5316 0 obj << /Limits [(API-linuxmib-ListenDrops) (API-linuxmib-ListenDrops)] /Names [(API-linuxmib-ListenDrops) 2542 0 R] >> endobj 5317 0 obj << /Limits [(API-linuxmib-ListenOverflows) (API-linuxmib-ListenOverflows)] /Names [(API-linuxmib-ListenOverflows) 2545 0 R] >> endobj 5318 0 obj << /Limits [(API-linuxmib-TCPMemoryPressures) (API-linuxmib-TCPMemoryPressures)] /Names [(API-linuxmib-TCPMemoryPressures) 2548 0 R] >> endobj 5319 0 obj << /Limits [(API-linuxmib-filter-key) (API-linuxmib-filter-key)] /Names [(API-linuxmib-filter-key) 2319 0 R] >> endobj 5320 0 obj << /Limits [(API-local-clock-ms) (API-local-clock-ms)] /Names [(API-local-clock-ms) 938 0 R] >> endobj 5321 0 obj << /Limits [(API-local-clock-ns) (API-local-clock-ns)] /Names [(API-local-clock-ns) 941 0 R] >> endobj 5322 0 obj << /Limits [(API-local-clock-s) (API-local-clock-s)] /Names [(API-local-clock-s) 944 0 R] >> endobj 5323 0 obj << /Limits [(API-local-clock-us) (API-local-clock-us)] /Names [(API-local-clock-us) 947 0 R] >> endobj 5324 0 obj << /Limits [(API-log) (API-log)] /Names [(API-log) 2966 0 R] >> endobj 5325 0 obj << /Limits [(API-long-arg) (API-long-arg)] /Names [(API-long-arg) 237 0 R] >> endobj 5326 0 obj << /Limits [(API-longlong-arg) (API-longlong-arg)] /Names [(API-longlong-arg) 240 0 R] >> endobj 5327 0 obj << /Limits [(API-matched) (API-matched)] /Names [(API-matched) 3607 0 R] >> endobj 5328 0 obj << /Limits [(API-matched-str) (API-matched-str)] /Names [(API-matched-str) 3610 0 R] >> endobj 5329 0 obj << /Limits [(API-mdelay) (API-mdelay)] /Names [(API-mdelay) 3586 0 R] >> endobj 5330 0 obj << /Limits [(API-mem-page-size) (API-mem-page-size)] /Names [(API-mem-page-size) 1164 0 R] >> endobj 5331 0 obj << /Limits [(API-modname) (API-modname)] /Names [(API-modname) 243 0 R] >> endobj 5332 0 obj << /Limits [(API-module-name) (API-module-name)] /Names [(API-module-name) 246 0 R] >> endobj 5333 0 obj << /Limits [(API-module-size) (API-module-size)] /Names [(API-module-size) 249 0 R] >> endobj 5334 0 obj << /Limits [(API-msecs-to-string) (API-msecs-to-string)] /Names [(API-msecs-to-string) 1245 0 R] >> endobj 5335 0 obj << /Limits [(API-netdev-change-mac) (API-netdev-change-mac)] /Names [(API-netdev-change-mac) 1859 0 R] >> endobj 5336 0 obj << /Limits [(API-netdev-change-mtu) (API-netdev-change-mtu)] /Names [(API-netdev-change-mtu) 1862 0 R] >> endobj 5337 0 obj << /Limits [(API-netdev-change-rx-flag) (API-netdev-change-rx-flag)] /Names [(API-netdev-change-rx-flag) 1865 0 R] >> endobj 5338 0 obj << /Limits [(API-netdev-close) (API-netdev-close)] /Names [(API-netdev-close) 1868 0 R] >> endobj 5339 0 obj << /Limits [(API-netdev-get-stats) (API-netdev-get-stats)] /Names [(API-netdev-get-stats) 1871 0 R] >> endobj 5340 0 obj << /Limits [(API-netdev-hard-transmit) (API-netdev-hard-transmit)] /Names [(API-netdev-hard-transmit) 1874 0 R] >> endobj 5341 0 obj << /Limits [(API-netdev-ioctl) (API-netdev-ioctl)] /Names [(API-netdev-ioctl) 1877 0 R] >> endobj 5342 0 obj << /Limits [(API-netdev-open) (API-netdev-open)] /Names [(API-netdev-open) 1880 0 R] >> endobj 5343 0 obj << /Limits [(API-netdev-receive) (API-netdev-receive)] /Names [(API-netdev-receive) 1883 0 R] >> endobj 5344 0 obj << /Limits [(API-netdev-register) (API-netdev-register)] /Names [(API-netdev-register) 1886 0 R] >> endobj 5345 0 obj << /Limits [(API-netdev-rx) (API-netdev-rx)] /Names [(API-netdev-rx) 1889 0 R] >> endobj 5346 0 obj << /Limits [(API-netdev-set-promiscuity) (API-netdev-set-promiscuity)] /Names [(API-netdev-set-promiscuity) 1892 0 R] >> endobj 5347 0 obj << /Limits [(API-netdev-transmit) (API-netdev-transmit)] /Names [(API-netdev-transmit) 1895 0 R] >> endobj 5348 0 obj << /Limits [(API-netdev-unregister) (API-netdev-unregister)] /Names [(API-netdev-unregister) 1898 0 R] >> endobj 5349 0 obj << /Limits [(API-netfilter-arp-forward) (API-netfilter-arp-forward)] /Names [(API-netfilter-arp-forward) 1901 0 R] >> endobj 5350 0 obj << /Limits [(API-netfilter-arp-in) (API-netfilter-arp-in)] /Names [(API-netfilter-arp-in) 1904 0 R] >> endobj 5351 0 obj << /Limits [(API-netfilter-arp-out) (API-netfilter-arp-out)] /Names [(API-netfilter-arp-out) 1907 0 R] >> endobj 5352 0 obj << /Limits [(API-netfilter-bridge-forward) (API-netfilter-bridge-forward)] /Names [(API-netfilter-bridge-forward) 1910 0 R] >> endobj 5353 0 obj << /Limits [(API-netfilter-bridge-local-in) (API-netfilter-bridge-local-in)] /Names [(API-netfilter-bridge-local-in) 1913 0 R] >> endobj 5354 0 obj << /Limits [(API-netfilter-bridge-local-out) (API-netfilter-bridge-local-out)] /Names [(API-netfilter-bridge-local-out) 1916 0 R] >> endobj 5355 0 obj << /Limits [(API-netfilter-bridge-post-routing) (API-netfilter-bridge-post-routing)] /Names [(API-netfilter-bridge-post-routing) 1919 0 R] >> endobj 5356 0 obj << /Limits [(API-netfilter-bridge-pre-routing) (API-netfilter-bridge-pre-routing)] /Names [(API-netfilter-bridge-pre-routing) 1922 0 R] >> endobj 5357 0 obj << /Limits [(API-netfilter-ip-forward) (API-netfilter-ip-forward)] /Names [(API-netfilter-ip-forward) 1925 0 R] >> endobj 5358 0 obj << /Limits [(API-netfilter-ip-local-in) (API-netfilter-ip-local-in)] /Names [(API-netfilter-ip-local-in) 1928 0 R] >> endobj 5359 0 obj << /Limits [(API-netfilter-ip-local-out) (API-netfilter-ip-local-out)] /Names [(API-netfilter-ip-local-out) 1931 0 R] >> endobj 5360 0 obj << /Limits [(API-netfilter-ip-post-routing) (API-netfilter-ip-post-routing)] /Names [(API-netfilter-ip-post-routing) 1934 0 R] >> endobj 5361 0 obj << /Limits [(API-netfilter-ip-pre-routing) (API-netfilter-ip-pre-routing)] /Names [(API-netfilter-ip-pre-routing) 1937 0 R] >> endobj 5362 0 obj << /Limits [(API-nfs-aop-readpage) (API-nfs-aop-readpage)] /Names [(API-nfs-aop-readpage) 3944 0 R] >> endobj 5363 0 obj << /Limits [(API-nfs-aop-readpages) (API-nfs-aop-readpages)] /Names [(API-nfs-aop-readpages) 3947 0 R] >> endobj 5364 0 obj << /Limits [(API-nfs-aop-release-page) (API-nfs-aop-release-page)] /Names [(API-nfs-aop-release-page) 3950 0 R] >> endobj 5365 0 obj << /Limits [(API-nfs-aop-set-page-dirty) (API-nfs-aop-set-page-dirty)] /Names [(API-nfs-aop-set-page-dirty) 3953 0 R] >> endobj 5366 0 obj << /Limits [(API-nfs-aop-write-begin) (API-nfs-aop-write-begin)] /Names [(API-nfs-aop-write-begin) 3956 0 R] >> endobj 5367 0 obj << /Limits [(API-nfs-aop-write-end) (API-nfs-aop-write-end)] /Names [(API-nfs-aop-write-end) 3959 0 R] >> endobj 5368 0 obj << /Limits [(API-nfs-aop-writepage) (API-nfs-aop-writepage)] /Names [(API-nfs-aop-writepage) 3962 0 R] >> endobj 5369 0 obj << /Limits [(API-nfs-aop-writepages) (API-nfs-aop-writepages)] /Names [(API-nfs-aop-writepages) 3965 0 R] >> endobj 5370 0 obj << /Limits [(API-nfs-fop-aio-read) (API-nfs-fop-aio-read)] /Names [(API-nfs-fop-aio-read) 4134 0 R] >> endobj 5371 0 obj << /Limits [(API-nfs-fop-aio-write) (API-nfs-fop-aio-write)] /Names [(API-nfs-fop-aio-write) 4137 0 R] >> endobj 5372 0 obj << /Limits [(API-nfs-fop-check-flags) (API-nfs-fop-check-flags)] /Names [(API-nfs-fop-check-flags) 4140 0 R] >> endobj 5373 0 obj << /Limits [(API-nfs-fop-flush) (API-nfs-fop-flush)] /Names [(API-nfs-fop-flush) 4143 0 R] >> endobj 5374 0 obj << /Limits [(API-nfs-fop-fsync) (API-nfs-fop-fsync)] /Names [(API-nfs-fop-fsync) 4146 0 R] >> endobj 5375 0 obj << /Limits [(API-nfs-fop-llseek) (API-nfs-fop-llseek)] /Names [(API-nfs-fop-llseek) 4149 0 R] >> endobj 5376 0 obj << /Limits [(API-nfs-fop-lock) (API-nfs-fop-lock)] /Names [(API-nfs-fop-lock) 4152 0 R] >> endobj 5377 0 obj << /Limits [(API-nfs-fop-mmap) (API-nfs-fop-mmap)] /Names [(API-nfs-fop-mmap) 4155 0 R] >> endobj 5378 0 obj << /Limits [(API-nfs-fop-open) (API-nfs-fop-open)] /Names [(API-nfs-fop-open) 4158 0 R] >> endobj 5379 0 obj << /Limits [(API-nfs-fop-read) (API-nfs-fop-read)] /Names [(API-nfs-fop-read) 4161 0 R] >> endobj 5380 0 obj << /Limits [(API-nfs-fop-read-iter) (API-nfs-fop-read-iter)] /Names [(API-nfs-fop-read-iter) 4164 0 R] >> endobj 5381 0 obj << /Limits [(API-nfs-fop-release) (API-nfs-fop-release)] /Names [(API-nfs-fop-release) 4167 0 R] >> endobj 5382 0 obj << /Limits [(API-nfs-fop-sendfile) (API-nfs-fop-sendfile)] /Names [(API-nfs-fop-sendfile) 4170 0 R] >> endobj 5383 0 obj << /Limits [(API-nfs-fop-write) (API-nfs-fop-write)] /Names [(API-nfs-fop-write) 4173 0 R] >> endobj 5384 0 obj << /Limits [(API-nfs-fop-write-iter) (API-nfs-fop-write-iter)] /Names [(API-nfs-fop-write-iter) 4176 0 R] >> endobj 5385 0 obj << /Limits [(API-nfs-proc-commit) (API-nfs-proc-commit)] /Names [(API-nfs-proc-commit) 4179 0 R] >> endobj 5386 0 obj << /Limits [(API-nfs-proc-commit-done) (API-nfs-proc-commit-done)] /Names [(API-nfs-proc-commit-done) 4182 0 R] >> endobj 5387 0 obj << /Limits [(API-nfs-proc-commit-setup) (API-nfs-proc-commit-setup)] /Names [(API-nfs-proc-commit-setup) 4185 0 R] >> endobj 5388 0 obj << /Limits [(API-nfs-proc-create) (API-nfs-proc-create)] /Names [(API-nfs-proc-create) 4188 0 R] >> endobj 5389 0 obj << /Limits [(API-nfs-proc-handle-exception) (API-nfs-proc-handle-exception)] /Names [(API-nfs-proc-handle-exception) 4191 0 R] >> endobj 5390 0 obj << /Limits [(API-nfs-proc-lookup) (API-nfs-proc-lookup)] /Names [(API-nfs-proc-lookup) 4194 0 R] >> endobj 5391 0 obj << /Limits [(API-nfs-proc-open) (API-nfs-proc-open)] /Names [(API-nfs-proc-open) 4197 0 R] >> endobj 5392 0 obj << /Limits [(API-nfs-proc-read) (API-nfs-proc-read)] /Names [(API-nfs-proc-read) 4200 0 R] >> endobj 5393 0 obj << /Limits [(API-nfs-proc-read-done) (API-nfs-proc-read-done)] /Names [(API-nfs-proc-read-done) 4203 0 R] >> endobj 5394 0 obj << /Limits [(API-nfs-proc-read-setup) (API-nfs-proc-read-setup)] /Names [(API-nfs-proc-read-setup) 4206 0 R] >> endobj 5395 0 obj << /Limits [(API-nfs-proc-release) (API-nfs-proc-release)] /Names [(API-nfs-proc-release) 4209 0 R] >> endobj 5396 0 obj << /Limits [(API-nfs-proc-remove) (API-nfs-proc-remove)] /Names [(API-nfs-proc-remove) 4212 0 R] >> endobj 5397 0 obj << /Limits [(API-nfs-proc-rename) (API-nfs-proc-rename)] /Names [(API-nfs-proc-rename) 4215 0 R] >> endobj 5398 0 obj << /Limits [(API-nfs-proc-rename-done) (API-nfs-proc-rename-done)] /Names [(API-nfs-proc-rename-done) 4218 0 R] >> endobj 5399 0 obj << /Limits [(API-nfs-proc-rename-setup) (API-nfs-proc-rename-setup)] /Names [(API-nfs-proc-rename-setup) 4221 0 R] >> endobj 5400 0 obj << /Limits [(API-nfs-proc-write) (API-nfs-proc-write)] /Names [(API-nfs-proc-write) 4224 0 R] >> endobj 5401 0 obj << /Limits [(API-nfs-proc-write-done) (API-nfs-proc-write-done)] /Names [(API-nfs-proc-write-done) 4227 0 R] >> endobj 5402 0 obj << /Limits [(API-nfs-proc-write-setup) (API-nfs-proc-write-setup)] /Names [(API-nfs-proc-write-setup) 4230 0 R] >> endobj 5403 0 obj << /Limits [(API-nfsd-close) (API-nfsd-close)] /Names [(API-nfsd-close) 4233 0 R] >> endobj 5404 0 obj << /Limits [(API-nfsd-commit) (API-nfsd-commit)] /Names [(API-nfsd-commit) 4236 0 R] >> endobj 5405 0 obj << /Limits [(API-nfsd-create) (API-nfsd-create)] /Names [(API-nfsd-create) 4239 0 R] >> endobj 5406 0 obj << /Limits [(API-nfsd-createv3) (API-nfsd-createv3)] /Names [(API-nfsd-createv3) 4242 0 R] >> endobj 5407 0 obj << /Limits [(API-nfsd-dispatch) (API-nfsd-dispatch)] /Names [(API-nfsd-dispatch) 4245 0 R] >> endobj 5408 0 obj << /Limits [(API-nfsd-lookup) (API-nfsd-lookup)] /Names [(API-nfsd-lookup) 4248 0 R] >> endobj 5409 0 obj << /Limits [(API-nfsd-open) (API-nfsd-open)] /Names [(API-nfsd-open) 4251 0 R] >> endobj 5410 0 obj << /Limits [(API-nfsd-proc-commit) (API-nfsd-proc-commit)] /Names [(API-nfsd-proc-commit) 4254 0 R] >> endobj 5411 0 obj << /Limits [(API-nfsd-proc-create) (API-nfsd-proc-create)] /Names [(API-nfsd-proc-create) 4257 0 R] >> endobj 5412 0 obj << /Limits [(API-nfsd-proc-lookup) (API-nfsd-proc-lookup)] /Names [(API-nfsd-proc-lookup) 4260 0 R] >> endobj 5413 0 obj << /Limits [(API-nfsd-proc-read) (API-nfsd-proc-read)] /Names [(API-nfsd-proc-read) 4263 0 R] >> endobj 5414 0 obj << /Limits [(API-nfsd-proc-remove) (API-nfsd-proc-remove)] /Names [(API-nfsd-proc-remove) 4266 0 R] >> endobj 5415 0 obj << /Limits [(API-nfsd-proc-rename) (API-nfsd-proc-rename)] /Names [(API-nfsd-proc-rename) 4269 0 R] >> endobj 5416 0 obj << /Limits [(API-nfsd-proc-write) (API-nfsd-proc-write)] /Names [(API-nfsd-proc-write) 4272 0 R] >> endobj 5417 0 obj << /Limits [(API-nfsd-read) (API-nfsd-read)] /Names [(API-nfsd-read) 4275 0 R] >> endobj 5418 0 obj << /Limits [(API-nfsd-rename) (API-nfsd-rename)] /Names [(API-nfsd-rename) 4278 0 R] >> endobj 5419 0 obj << /Limits [(API-nfsd-unlink) (API-nfsd-unlink)] /Names [(API-nfsd-unlink) 4281 0 R] >> endobj 5420 0 obj << /Limits [(API-nfsd-write) (API-nfsd-write)] /Names [(API-nfsd-write) 4284 0 R] >> endobj 5421 0 obj << /Limits [(API-nfsderror) (API-nfsderror)] /Names [(API-nfsderror) 3941 0 R] >> endobj 5422 0 obj << /Limits [(API-ngroups) (API-ngroups)] /Names [(API-ngroups) 3613 0 R] >> endobj 5423 0 obj << /Limits [(API-ns-egid) (API-ns-egid)] /Names [(API-ns-egid) 252 0 R] >> endobj 5424 0 obj << /Limits [(API-ns-euid) (API-ns-euid)] /Names [(API-ns-euid) 255 0 R] >> endobj 5425 0 obj << /Limits [(API-ns-gid) (API-ns-gid)] /Names [(API-ns-gid) 258 0 R] >> endobj 5426 0 obj << /Limits [(API-ns-pgrp) (API-ns-pgrp)] /Names [(API-ns-pgrp) 261 0 R] >> endobj 5427 0 obj << /Limits [(API-ns-pid) (API-ns-pid)] /Names [(API-ns-pid) 264 0 R] >> endobj 5428 0 obj << /Limits [(API-ns-ppid) (API-ns-ppid)] /Names [(API-ns-ppid) 267 0 R] >> endobj 5429 0 obj << /Limits [(API-ns-sid) (API-ns-sid)] /Names [(API-ns-sid) 270 0 R] >> endobj 5430 0 obj << /Limits [(API-ns-tid) (API-ns-tid)] /Names [(API-ns-tid) 273 0 R] >> endobj 5431 0 obj << /Limits [(API-ns-uid) (API-ns-uid)] /Names [(API-ns-uid) 276 0 R] >> endobj 5432 0 obj << /Limits [(API-nsecs-to-string) (API-nsecs-to-string)] /Names [(API-nsecs-to-string) 1248 0 R] >> endobj 5433 0 obj << /Limits [(API-ntohl) (API-ntohl)] /Names [(API-ntohl) 1850 0 R] >> endobj 5434 0 obj << /Limits [(API-ntohll) (API-ntohll)] /Names [(API-ntohll) 1853 0 R] >> endobj 5435 0 obj << /Limits [(API-ntohs) (API-ntohs)] /Names [(API-ntohs) 1856 0 R] >> endobj 5436 0 obj << /Limits [(API-pages-to-string) (API-pages-to-string)] /Names [(API-pages-to-string) 1167 0 R] >> endobj 5437 0 obj << /Limits [(API-panic) (API-panic)] /Names [(API-panic) 3589 0 R] >> endobj 5438 0 obj << /Limits [(API-pexecname) (API-pexecname)] /Names [(API-pexecname) 279 0 R] >> endobj 5439 0 obj << /Limits [(API-pgrp) (API-pgrp)] /Names [(API-pgrp) 282 0 R] >> endobj 5440 0 obj << /Limits [(API-pid) (API-pid)] /Names [(API-pid) 285 0 R] >> endobj 5441 0 obj << /Limits [(API-pid2execname) (API-pid2execname)] /Names [(API-pid2execname) 288 0 R] >> endobj 5442 0 obj << /Limits [(API-pid2task) (API-pid2task)] /Names [(API-pid2task) 291 0 R] >> endobj 5443 0 obj << /Limits [(API-pn) (API-pn)] /Names [(API-pn) 294 0 R] >> endobj 5444 0 obj << /Limits [(API-pnlabel) (API-pnlabel)] /Names [(API-pnlabel) 297 0 R] >> endobj 5445 0 obj << /Limits [(API-pointer-arg) (API-pointer-arg)] /Names [(API-pointer-arg) 300 0 R] >> endobj 5446 0 obj << /Limits [(API-pp) (API-pp)] /Names [(API-pp) 303 0 R] >> endobj 5447 0 obj << /Limits [(API-ppfunc) (API-ppfunc)] /Names [(API-ppfunc) 306 0 R] >> endobj 5448 0 obj << /Limits [(API-ppid) (API-ppid)] /Names [(API-ppid) 309 0 R] >> endobj 5449 0 obj << /Limits [(API-print-backtrace) (API-print-backtrace)] /Names [(API-print-backtrace) 312 0 R] >> endobj 5450 0 obj << /Limits [(API-print-backtrace-fileline) (API-print-backtrace-fileline)] /Names [(API-print-backtrace-fileline) 315 0 R] >> endobj 5451 0 obj << /Limits [(API-print-regs) (API-print-regs)] /Names [(API-print-regs) 318 0 R] >> endobj 5452 0 obj << /Limits [(API-print-stack) (API-print-stack)] /Names [(API-print-stack) 487 0 R] >> endobj 5453 0 obj << /Limits [(API-print-syms) (API-print-syms)] /Names [(API-print-syms) 490 0 R] >> endobj 5454 0 obj << /Limits [(API-print-ubacktrace) (API-print-ubacktrace)] /Names [(API-print-ubacktrace) 493 0 R] >> endobj 5455 0 obj << /Limits [(API-print-ubacktrace-brief) (API-print-ubacktrace-brief)] /Names [(API-print-ubacktrace-brief) 496 0 R] >> endobj 5456 0 obj << /Limits [(API-print-ubacktrace-fileline) (API-print-ubacktrace-fileline)] /Names [(API-print-ubacktrace-fileline) 499 0 R] >> endobj 5457 0 obj << /Limits [(API-print-ustack) (API-print-ustack)] /Names [(API-print-ustack) 502 0 R] >> endobj 5458 0 obj << /Limits [(API-print-usyms) (API-print-usyms)] /Names [(API-print-usyms) 505 0 R] >> endobj 5459 0 obj << /Limits [(API-printk) (API-printk)] /Names [(API-printk) 2969 0 R] >> endobj 5460 0 obj << /Limits [(API-probe-type) (API-probe-type)] /Names [(API-probe-type) 508 0 R] >> endobj 5461 0 obj << /Limits [(API-probefunc) (API-probefunc)] /Names [(API-probefunc) 511 0 R] >> endobj 5462 0 obj << /Limits [(API-probemod) (API-probemod)] /Names [(API-probemod) 514 0 R] >> endobj 5463 0 obj << /Limits [(API-proc-mem-data) (API-proc-mem-data)] /Names [(API-proc-mem-data) 1170 0 R] >> endobj 5464 0 obj << /Limits [(API-proc-mem-rss) (API-proc-mem-rss)] /Names [(API-proc-mem-rss) 1173 0 R] >> endobj 5465 0 obj << /Limits [(API-proc-mem-shr) (API-proc-mem-shr)] /Names [(API-proc-mem-shr) 1176 0 R] >> endobj 5466 0 obj << /Limits [(API-proc-mem-size) (API-proc-mem-size)] /Names [(API-proc-mem-size) 1179 0 R] >> endobj 5467 0 obj << /Limits [(API-proc-mem-string) (API-proc-mem-string)] /Names [(API-proc-mem-string) 1182 0 R] >> endobj 5468 0 obj << /Limits [(API-proc-mem-txt) (API-proc-mem-txt)] /Names [(API-proc-mem-txt) 1185 0 R] >> endobj 5469 0 obj << /Limits [(API-pstrace) (API-pstrace)] /Names [(API-pstrace) 517 0 R] >> endobj 5470 0 obj << /Limits [(API-qs-done) (API-qs-done)] /Names [(API-qs-done) 2978 0 R] >> endobj 5471 0 obj << /Limits [(API-qs-run) (API-qs-run)] /Names [(API-qs-run) 2981 0 R] >> endobj 5472 0 obj << /Limits [(API-qs-wait) (API-qs-wait)] /Names [(API-qs-wait) 3150 0 R] >> endobj 5473 0 obj << /Limits [(API-qsq-blocked) (API-qsq-blocked)] /Names [(API-qsq-blocked) 3153 0 R] >> endobj 5474 0 obj << /Limits [(API-qsq-print) (API-qsq-print)] /Names [(API-qsq-print) 3156 0 R] >> endobj 5475 0 obj << /Limits [(API-qsq-service-time) (API-qsq-service-time)] /Names [(API-qsq-service-time) 3159 0 R] >> endobj 5476 0 obj << /Limits [(API-qsq-start) (API-qsq-start)] /Names [(API-qsq-start) 3162 0 R] >> endobj 5477 0 obj << /Limits [(API-qsq-throughput) (API-qsq-throughput)] /Names [(API-qsq-throughput) 3165 0 R] >> endobj 5478 0 obj << /Limits [(API-qsq-utilization) (API-qsq-utilization)] /Names [(API-qsq-utilization) 3168 0 R] >> endobj 5479 0 obj << /Limits [(API-qsq-wait-queue-length) (API-qsq-wait-queue-length)] /Names [(API-qsq-wait-queue-length) 3171 0 R] >> endobj 5480 0 obj << /Limits [(API-qsq-wait-time) (API-qsq-wait-time)] /Names [(API-qsq-wait-time) 3174 0 R] >> endobj 5481 0 obj << /Limits [(API-raise) (API-raise)] /Names [(API-raise) 3592 0 R] >> endobj 5482 0 obj << /Limits [(API-randint) (API-randint)] /Names [(API-randint) 3180 0 R] >> endobj 5483 0 obj << /Limits [(API-read-stopwatch-ms) (API-read-stopwatch-ms)] /Names [(API-read-stopwatch-ms) 950 0 R] >> endobj 5484 0 obj << /Limits [(API-read-stopwatch-ns) (API-read-stopwatch-ns)] /Names [(API-read-stopwatch-ns) 953 0 R] >> endobj 5485 0 obj << /Limits [(API-read-stopwatch-s) (API-read-stopwatch-s)] /Names [(API-read-stopwatch-s) 956 0 R] >> endobj 5486 0 obj << /Limits [(API-read-stopwatch-us) (API-read-stopwatch-us)] /Names [(API-read-stopwatch-us) 959 0 R] >> endobj 5487 0 obj << /Limits [(API-real-mount) (API-real-mount)] /Names [(API-real-mount) 2939 0 R] >> endobj 5488 0 obj << /Limits [(API-register) (API-register)] /Names [(API-register) 520 0 R] >> endobj 5489 0 obj << /Limits [(API-registers-valid) (API-registers-valid)] /Names [(API-registers-valid) 523 0 R] >> endobj 5490 0 obj << /Limits [(API-regparm) (API-regparm)] /Names [(API-regparm) 526 0 R] >> endobj 5491 0 obj << /Limits [(API-remote-id) (API-remote-id)] /Names [(API-remote-id) 529 0 R] >> endobj 5492 0 obj << /Limits [(API-remote-uri) (API-remote-uri)] /Names [(API-remote-uri) 532 0 R] >> endobj 5493 0 obj << /Limits [(API-return-str) (API-return-str)] /Names [(API-return-str) 2885 0 R] >> endobj 5494 0 obj << /Limits [(API-returnstr) (API-returnstr)] /Names [(API-returnstr) 2888 0 R] >> endobj 5495 0 obj << /Limits [(API-returnval) (API-returnval)] /Names [(API-returnval) 2891 0 R] >> endobj 5496 0 obj << /Limits [(API-reverse-path-walk) (API-reverse-path-walk)] /Names [(API-reverse-path-walk) 2942 0 R] >> endobj 5497 0 obj << /Limits [(API-rlimit-from-str) (API-rlimit-from-str)] /Names [(API-rlimit-from-str) 2897 0 R] >> endobj 5498 0 obj << /Limits [(API-s32-arg) (API-s32-arg)] /Names [(API-s32-arg) 535 0 R] >> endobj 5499 0 obj << /Limits [(API-s64-arg) (API-s64-arg)] /Names [(API-s64-arg) 538 0 R] >> endobj 5500 0 obj << /Limits [(API-sa-flags-str) (API-sa-flags-str)] /Names [(API-sa-flags-str) 2623 0 R] >> endobj 5501 0 obj << /Limits [(API-sa-handler-str) (API-sa-handler-str)] /Names [(API-sa-handler-str) 2626 0 R] >> endobj 5502 0 obj << /Limits [(API-scheduler-balance) (API-scheduler-balance)] /Names [(API-scheduler-balance) 1272 0 R] >> endobj 5503 0 obj << /Limits [(API-scheduler-cpu-off) (API-scheduler-cpu-off)] /Names [(API-scheduler-cpu-off) 1275 0 R] >> endobj 5504 0 obj << /Limits [(API-scheduler-cpu-on) (API-scheduler-cpu-on)] /Names [(API-scheduler-cpu-on) 1278 0 R] >> endobj 5505 0 obj << /Limits [(API-scheduler-ctxswitch) (API-scheduler-ctxswitch)] /Names [(API-scheduler-ctxswitch) 1281 0 R] >> endobj 5506 0 obj << /Limits [(API-scheduler-kthread-stop) (API-scheduler-kthread-stop)] /Names [(API-scheduler-kthread-stop) 1284 0 R] >> endobj 5507 0 obj << /Limits [(API-scheduler-kthread-stop-return) (API-scheduler-kthread-stop-return)] /Names [(API-scheduler-kthread-stop-return) 1287 0 R] >> endobj 5508 0 obj << /Limits [(API-scheduler-migrate) (API-scheduler-migrate)] /Names [(API-scheduler-migrate) 1290 0 R] >> endobj 5509 0 obj << /Limits [(API-scheduler-process-exit) (API-scheduler-process-exit)] /Names [(API-scheduler-process-exit) 1293 0 R] >> endobj 5510 0 obj << /Limits [(API-scheduler-process-fork) (API-scheduler-process-fork)] /Names [(API-scheduler-process-fork) 1296 0 R] >> endobj 5511 0 obj << /Limits [(API-scheduler-process-free) (API-scheduler-process-free)] /Names [(API-scheduler-process-free) 1299 0 R] >> endobj 5512 0 obj << /Limits [(API-scheduler-process-wait) (API-scheduler-process-wait)] /Names [(API-scheduler-process-wait) 1302 0 R] >> endobj 5513 0 obj << /Limits [(API-scheduler-signal-send) (API-scheduler-signal-send)] /Names [(API-scheduler-signal-send) 1471 0 R] >> endobj 5514 0 obj << /Limits [(API-scheduler-tick) (API-scheduler-tick)] /Names [(API-scheduler-tick) 1474 0 R] >> endobj 5515 0 obj << /Limits [(API-scheduler-wait-task) (API-scheduler-wait-task)] /Names [(API-scheduler-wait-task) 1477 0 R] >> endobj 5516 0 obj << /Limits [(API-scheduler-wakeup) (API-scheduler-wakeup)] /Names [(API-scheduler-wakeup) 1480 0 R] >> endobj 5517 0 obj << /Limits [(API-scheduler-wakeup-new) (API-scheduler-wakeup-new)] /Names [(API-scheduler-wakeup-new) 1483 0 R] >> endobj 5518 0 obj << /Limits [(API-scsi-iocompleted) (API-scsi-iocompleted)] /Names [(API-scsi-iocompleted) 1546 0 R] >> endobj 5519 0 obj << /Limits [(API-scsi-iodispatching) (API-scsi-iodispatching)] /Names [(API-scsi-iodispatching) 1549 0 R] >> endobj 5520 0 obj << /Limits [(API-scsi-iodone) (API-scsi-iodone)] /Names [(API-scsi-iodone) 1552 0 R] >> endobj 5521 0 obj << /Limits [(API-scsi-ioentry) (API-scsi-ioentry)] /Names [(API-scsi-ioentry) 1555 0 R] >> endobj 5522 0 obj << /Limits [(API-scsi-ioexecute) (API-scsi-ioexecute)] /Names [(API-scsi-ioexecute) 1558 0 R] >> endobj 5523 0 obj << /Limits [(API-scsi-set-state) (API-scsi-set-state)] /Names [(API-scsi-set-state) 1561 0 R] >> endobj 5524 0 obj << /Limits [(API-set-kernel-char) (API-set-kernel-char)] /Names [(API-set-kernel-char) 3541 0 R] >> endobj 5525 0 obj << /Limits [(API-set-kernel-int) (API-set-kernel-int)] /Names [(API-set-kernel-int) 3544 0 R] >> endobj 5526 0 obj << /Limits [(API-set-kernel-long) (API-set-kernel-long)] /Names [(API-set-kernel-long) 3547 0 R] >> endobj 5527 0 obj << /Limits [(API-set-kernel-pointer) (API-set-kernel-pointer)] /Names [(API-set-kernel-pointer) 3550 0 R] >> endobj 5528 0 obj << /Limits [(API-set-kernel-short) (API-set-kernel-short)] /Names [(API-set-kernel-short) 3553 0 R] >> endobj 5529 0 obj << /Limits [(API-set-kernel-string) (API-set-kernel-string)] /Names [(API-set-kernel-string) 3556 0 R] >> endobj 5530 0 obj << /Limits [(API-set-kernel-string-n) (API-set-kernel-string-n)] /Names [(API-set-kernel-string-n) 3559 0 R] >> endobj 5531 0 obj << /Limits [(API-set-user-char) (API-set-user-char)] /Names [(API-set-user-char) 3562 0 R] >> endobj 5532 0 obj << /Limits [(API-set-user-int) (API-set-user-int)] /Names [(API-set-user-int) 3565 0 R] >> endobj 5533 0 obj << /Limits [(API-set-user-long) (API-set-user-long)] /Names [(API-set-user-long) 3568 0 R] >> endobj 5534 0 obj << /Limits [(API-set-user-pointer) (API-set-user-pointer)] /Names [(API-set-user-pointer) 3571 0 R] >> endobj 5535 0 obj << /Limits [(API-set-user-short) (API-set-user-short)] /Names [(API-set-user-short) 3574 0 R] >> endobj 5536 0 obj << /Limits [(API-set-user-string) (API-set-user-string)] /Names [(API-set-user-string) 3577 0 R] >> endobj 5537 0 obj << /Limits [(API-set-user-string-n) (API-set-user-string-n)] /Names [(API-set-user-string-n) 3580 0 R] >> endobj 5538 0 obj << /Limits [(API-sid) (API-sid)] /Names [(API-sid) 541 0 R] >> endobj 5539 0 obj << /Limits [(API-signal-check-ignored) (API-signal-check-ignored)] /Names [(API-signal-check-ignored) 2635 0 R] >> endobj 5540 0 obj << /Limits [(API-signal-check-ignored-return) (API-signal-check-ignored-return)] /Names [(API-signal-check-ignored-return) 2638 0 R] >> endobj 5541 0 obj << /Limits [(API-signal-checkperm) (API-signal-checkperm)] /Names [(API-signal-checkperm) 2641 0 R] >> endobj 5542 0 obj << /Limits [(API-signal-checkperm-return) (API-signal-checkperm-return)] /Names [(API-signal-checkperm-return) 2644 0 R] >> endobj 5543 0 obj << /Limits [(API-signal-do-action) (API-signal-do-action)] /Names [(API-signal-do-action) 2647 0 R] >> endobj 5544 0 obj << /Limits [(API-signal-do-action-return) (API-signal-do-action-return)] /Names [(API-signal-do-action-return) 2650 0 R] >> endobj 5545 0 obj << /Limits [(API-signal-flush) (API-signal-flush)] /Names [(API-signal-flush) 2653 0 R] >> endobj 5546 0 obj << /Limits [(API-signal-force-segv) (API-signal-force-segv)] /Names [(API-signal-force-segv) 2822 0 R] >> endobj 5547 0 obj << /Limits [(API-signal-force-segv-return) (API-signal-force-segv-return)] /Names [(API-signal-force-segv-return) 2825 0 R] >> endobj 5548 0 obj << /Limits [(API-signal-handle) (API-signal-handle)] /Names [(API-signal-handle) 2828 0 R] >> endobj 5549 0 obj << /Limits [(API-signal-handle-return) (API-signal-handle-return)] /Names [(API-signal-handle-return) 2831 0 R] >> endobj 5550 0 obj << /Limits [(API-signal-pending) (API-signal-pending)] /Names [(API-signal-pending) 2834 0 R] >> endobj 5551 0 obj << /Limits [(API-signal-pending-return) (API-signal-pending-return)] /Names [(API-signal-pending-return) 2837 0 R] >> endobj 5552 0 obj << /Limits [(API-signal-procmask) (API-signal-procmask)] /Names [(API-signal-procmask) 2840 0 R] >> endobj 5553 0 obj << /Limits [(API-signal-procmask-return) (API-signal-procmask-return)] /Names [(API-signal-procmask-return) 2843 0 R] >> endobj 5554 0 obj << /Limits [(API-signal-send) (API-signal-send)] /Names [(API-signal-send) 2846 0 R] >> endobj 5555 0 obj << /Limits [(API-signal-send-return) (API-signal-send-return)] /Names [(API-signal-send-return) 2849 0 R] >> endobj 5556 0 obj << /Limits [(API-signal-send-sig-queue) (API-signal-send-sig-queue)] /Names [(API-signal-send-sig-queue) 2852 0 R] >> endobj 5557 0 obj << /Limits [(API-signal-send-sig-queue-return) (API-signal-send-sig-queue-return)] /Names [(API-signal-send-sig-queue-return) 2855 0 R] >> endobj 5558 0 obj << /Limits [(API-signal-str) (API-signal-str)] /Names [(API-signal-str) 2629 0 R] >> endobj 5559 0 obj << /Limits [(API-signal-sys-tgkill) (API-signal-sys-tgkill)] /Names [(API-signal-sys-tgkill) 2858 0 R] >> endobj 5560 0 obj << /Limits [(API-signal-sys-tgkill-return) (API-signal-sys-tgkill-return)] /Names [(API-signal-sys-tgkill-return) 2861 0 R] >> endobj 5561 0 obj << /Limits [(API-signal-sys-tkill) (API-signal-sys-tkill)] /Names [(API-signal-sys-tkill) 2864 0 R] >> endobj 5562 0 obj << /Limits [(API-signal-syskill) (API-signal-syskill)] /Names [(API-signal-syskill) 2867 0 R] >> endobj 5563 0 obj << /Limits [(API-signal-syskill-return) (API-signal-syskill-return)] /Names [(API-signal-syskill-return) 2870 0 R] >> endobj 5564 0 obj << /Limits [(API-signal-systkill-return) (API-signal-systkill-return)] /Names [(API-signal-systkill-return) 2873 0 R] >> endobj 5565 0 obj << /Limits [(API-signal-wakeup) (API-signal-wakeup)] /Names [(API-signal-wakeup) 2876 0 R] >> endobj 5566 0 obj << /Limits [(API-sigset-mask-str) (API-sigset-mask-str)] /Names [(API-sigset-mask-str) 2632 0 R] >> endobj 5567 0 obj << /Limits [(API-sock-fam-num2str) (API-sock-fam-num2str)] /Names [(API-sock-fam-num2str) 2214 0 R] >> endobj 5568 0 obj << /Limits [(API-sock-fam-str2num) (API-sock-fam-str2num)] /Names [(API-sock-fam-str2num) 2217 0 R] >> endobj 5569 0 obj << /Limits [(API-sock-prot-num2str) (API-sock-prot-num2str)] /Names [(API-sock-prot-num2str) 2220 0 R] >> endobj 5570 0 obj << /Limits [(API-sock-prot-str2num) (API-sock-prot-str2num)] /Names [(API-sock-prot-str2num) 2223 0 R] >> endobj 5571 0 obj << /Limits [(API-sock-state-num2str) (API-sock-state-num2str)] /Names [(API-sock-state-num2str) 2226 0 R] >> endobj 5572 0 obj << /Limits [(API-sock-state-str2num) (API-sock-state-str2num)] /Names [(API-sock-state-str2num) 2229 0 R] >> endobj 5573 0 obj << /Limits [(API-socket-aio-read) (API-socket-aio-read)] /Names [(API-socket-aio-read) 2232 0 R] >> endobj 5574 0 obj << /Limits [(API-socket-aio-read-return) (API-socket-aio-read-return)] /Names [(API-socket-aio-read-return) 2235 0 R] >> endobj 5575 0 obj << /Limits [(API-socket-aio-write) (API-socket-aio-write)] /Names [(API-socket-aio-write) 2238 0 R] >> endobj 5576 0 obj << /Limits [(API-socket-aio-write-return) (API-socket-aio-write-return)] /Names [(API-socket-aio-write-return) 2241 0 R] >> endobj 5577 0 obj << /Limits [(API-socket-close) (API-socket-close)] /Names [(API-socket-close) 2244 0 R] >> endobj 5578 0 obj << /Limits [(API-socket-close-return) (API-socket-close-return)] /Names [(API-socket-close-return) 2247 0 R] >> endobj 5579 0 obj << /Limits [(API-socket-create) (API-socket-create)] /Names [(API-socket-create) 2250 0 R] >> endobj 5580 0 obj << /Limits [(API-socket-create-return) (API-socket-create-return)] /Names [(API-socket-create-return) 2253 0 R] >> endobj 5581 0 obj << /Limits [(API-socket-read-iter) (API-socket-read-iter)] /Names [(API-socket-read-iter) 2256 0 R] >> endobj 5582 0 obj << /Limits [(API-socket-read-iter-return) (API-socket-read-iter-return)] /Names [(API-socket-read-iter-return) 2259 0 R] >> endobj 5583 0 obj << /Limits [(API-socket-readv) (API-socket-readv)] /Names [(API-socket-readv) 2262 0 R] >> endobj 5584 0 obj << /Limits [(API-socket-readv-return) (API-socket-readv-return)] /Names [(API-socket-readv-return) 2265 0 R] >> endobj 5585 0 obj << /Limits [(API-socket-receive) (API-socket-receive)] /Names [(API-socket-receive) 2268 0 R] >> endobj 5586 0 obj << /Limits [(API-socket-recvmsg) (API-socket-recvmsg)] /Names [(API-socket-recvmsg) 2271 0 R] >> endobj 5587 0 obj << /Limits [(API-socket-recvmsg-return) (API-socket-recvmsg-return)] /Names [(API-socket-recvmsg-return) 2274 0 R] >> endobj 5588 0 obj << /Limits [(API-socket-send) (API-socket-send)] /Names [(API-socket-send) 2277 0 R] >> endobj 5589 0 obj << /Limits [(API-socket-sendmsg) (API-socket-sendmsg)] /Names [(API-socket-sendmsg) 2280 0 R] >> endobj 5590 0 obj << /Limits [(API-socket-sendmsg-return) (API-socket-sendmsg-return)] /Names [(API-socket-sendmsg-return) 2283 0 R] >> endobj 5591 0 obj << /Limits [(API-socket-write-iter) (API-socket-write-iter)] /Names [(API-socket-write-iter) 2286 0 R] >> endobj 5592 0 obj << /Limits [(API-socket-write-iter-return) (API-socket-write-iter-return)] /Names [(API-socket-write-iter-return) 2289 0 R] >> endobj 5593 0 obj << /Limits [(API-socket-writev) (API-socket-writev)] /Names [(API-socket-writev) 2292 0 R] >> endobj 5594 0 obj << /Limits [(API-socket-writev-return) (API-socket-writev-return)] /Names [(API-socket-writev-return) 2295 0 R] >> endobj 5595 0 obj << /Limits [(API-softirq-entry) (API-softirq-entry)] /Names [(API-softirq-entry) 1609 0 R] >> endobj 5596 0 obj << /Limits [(API-softirq-exit) (API-softirq-exit)] /Names [(API-softirq-exit) 1612 0 R] >> endobj 5597 0 obj << /Limits [(API-speculate) (API-speculate)] /Names [(API-speculate) 4363 0 R] >> endobj 5598 0 obj << /Limits [(API-speculation) (API-speculation)] /Names [(API-speculation) 4366 0 R] >> endobj 5599 0 obj << /Limits [(API-sprint-backtrace) (API-sprint-backtrace)] /Names [(API-sprint-backtrace) 544 0 R] >> endobj 5600 0 obj << /Limits [(API-sprint-loadavg) (API-sprint-loadavg)] /Names [(API-sprint-loadavg) 2584 0 R] >> endobj 5601 0 obj << /Limits [(API-sprint-stack) (API-sprint-stack)] /Names [(API-sprint-stack) 547 0 R] >> endobj 5602 0 obj << /Limits [(API-sprint-syms) (API-sprint-syms)] /Names [(API-sprint-syms) 550 0 R] >> endobj 5603 0 obj << /Limits [(API-sprint-ubacktrace) (API-sprint-ubacktrace)] /Names [(API-sprint-ubacktrace) 553 0 R] >> endobj 5604 0 obj << /Limits [(API-sprint-ustack) (API-sprint-ustack)] /Names [(API-sprint-ustack) 556 0 R] >> endobj 5605 0 obj << /Limits [(API-sprint-usyms) (API-sprint-usyms)] /Names [(API-sprint-usyms) 559 0 R] >> endobj 5606 0 obj << /Limits [(API-stack) (API-stack)] /Names [(API-stack) 562 0 R] >> endobj 5607 0 obj << /Limits [(API-stack-size) (API-stack-size)] /Names [(API-stack-size) 565 0 R] >> endobj 5608 0 obj << /Limits [(API-stack-unused) (API-stack-unused)] /Names [(API-stack-unused) 568 0 R] >> endobj 5609 0 obj << /Limits [(API-stack-used) (API-stack-used)] /Names [(API-stack-used) 571 0 R] >> endobj 5610 0 obj << /Limits [(API-stap-cache-add-mod) (API-stap-cache-add-mod)] /Names [(API-stap-cache-add-mod) 3857 0 R] >> endobj 5611 0 obj << /Limits [(API-stap-cache-add-nss) (API-stap-cache-add-nss)] /Names [(API-stap-cache-add-nss) 3860 0 R] >> endobj 5612 0 obj << /Limits [(API-stap-cache-add-src) (API-stap-cache-add-src)] /Names [(API-stap-cache-add-src) 3863 0 R] >> endobj 5613 0 obj << /Limits [(API-stap-cache-clean) (API-stap-cache-clean)] /Names [(API-stap-cache-clean) 3866 0 R] >> endobj 5614 0 obj << /Limits [(API-stap-cache-get) (API-stap-cache-get)] /Names [(API-stap-cache-get) 3869 0 R] >> endobj 5615 0 obj << /Limits [(API-stap-pass0) (API-stap-pass0)] /Names [(API-stap-pass0) 3872 0 R] >> endobj 5616 0 obj << /Limits [(API-stap-pass0-end) (API-stap-pass0-end)] /Names [(API-stap-pass0-end) 3875 0 R] >> endobj 5617 0 obj << /Limits [(API-stap-pass1-end) (API-stap-pass1-end)] /Names [(API-stap-pass1-end) 3878 0 R] >> endobj 5618 0 obj << /Limits [(API-stap-pass1a) (API-stap-pass1a)] /Names [(API-stap-pass1a) 3881 0 R] >> endobj 5619 0 obj << /Limits [(API-stap-pass1b) (API-stap-pass1b)] /Names [(API-stap-pass1b) 3884 0 R] >> endobj 5620 0 obj << /Limits [(API-stap-pass2) (API-stap-pass2)] /Names [(API-stap-pass2) 3887 0 R] >> endobj 5621 0 obj << /Limits [(API-stap-pass2-end) (API-stap-pass2-end)] /Names [(API-stap-pass2-end) 3890 0 R] >> endobj 5622 0 obj << /Limits [(API-stap-pass3) (API-stap-pass3)] /Names [(API-stap-pass3) 3893 0 R] >> endobj 5623 0 obj << /Limits [(API-stap-pass3-end) (API-stap-pass3-end)] /Names [(API-stap-pass3-end) 3896 0 R] >> endobj 5624 0 obj << /Limits [(API-stap-pass4) (API-stap-pass4)] /Names [(API-stap-pass4) 3899 0 R] >> endobj 5625 0 obj << /Limits [(API-stap-pass4-end) (API-stap-pass4-end)] /Names [(API-stap-pass4-end) 3902 0 R] >> endobj 5626 0 obj << /Limits [(API-stap-pass5) (API-stap-pass5)] /Names [(API-stap-pass5) 3905 0 R] >> endobj 5627 0 obj << /Limits [(API-stap-pass5-end) (API-stap-pass5-end)] /Names [(API-stap-pass5-end) 3908 0 R] >> endobj 5628 0 obj << /Limits [(API-stap-pass6) (API-stap-pass6)] /Names [(API-stap-pass6) 3911 0 R] >> endobj 5629 0 obj << /Limits [(API-stap-pass6-end) (API-stap-pass6-end)] /Names [(API-stap-pass6-end) 3914 0 R] >> endobj 5630 0 obj << /Limits [(API-stap-system) (API-stap-system)] /Names [(API-stap-system) 3917 0 R] >> endobj 5631 0 obj << /Limits [(API-stap-system-return) (API-stap-system-return)] /Names [(API-stap-system-return) 3920 0 R] >> endobj 5632 0 obj << /Limits [(API-stap-system-spawn) (API-stap-system-spawn)] /Names [(API-stap-system-spawn) 3923 0 R] >> endobj 5633 0 obj << /Limits [(API-stapio-receive-control-message) (API-stapio-receive-control-message)] /Names [(API-stapio-receive-control-message) 3926 0 R] >> endobj 5634 0 obj << /Limits [(API-staprun-insert-module) (API-staprun-insert-module)] /Names [(API-staprun-insert-module) 3929 0 R] >> endobj 5635 0 obj << /Limits [(API-staprun-remove-module) (API-staprun-remove-module)] /Names [(API-staprun-remove-module) 3932 0 R] >> endobj 5636 0 obj << /Limits [(API-staprun-send-control-message) (API-staprun-send-control-message)] /Names [(API-staprun-send-control-message) 3935 0 R] >> endobj 5637 0 obj << /Limits [(API-start-stopwatch) (API-start-stopwatch)] /Names [(API-start-stopwatch) 962 0 R] >> endobj 5638 0 obj << /Limits [(API-stop-stopwatch) (API-stop-stopwatch)] /Names [(API-stop-stopwatch) 965 0 R] >> endobj 5639 0 obj << /Limits [(API-stp-pid) (API-stp-pid)] /Names [(API-stp-pid) 574 0 R] >> endobj 5640 0 obj << /Limits [(API-str-replace) (API-str-replace)] /Names [(API-str-replace) 3616 0 R] >> endobj 5641 0 obj << /Limits [(API-string-quoted) (API-string-quoted)] /Names [(API-string-quoted) 3619 0 R] >> endobj 5642 0 obj << /Limits [(API-stringat) (API-stringat)] /Names [(API-stringat) 3622 0 R] >> endobj 5643 0 obj << /Limits [(API-strlen) (API-strlen)] /Names [(API-strlen) 3625 0 R] >> endobj 5644 0 obj << /Limits [(API-strpos) (API-strpos)] /Names [(API-strpos) 3628 0 R] >> endobj 5645 0 obj << /Limits [(API-strtol) (API-strtol)] /Names [(API-strtol) 3631 0 R] >> endobj 5646 0 obj << /Limits [(API-substr) (API-substr)] /Names [(API-substr) 3634 0 R] >> endobj 5647 0 obj << /Limits [(API-sunrpc-clnt-bind-new-program) (API-sunrpc-clnt-bind-new-program)] /Names [(API-sunrpc-clnt-bind-new-program) 1940 0 R] >> endobj 5648 0 obj << /Limits [(API-sunrpc-clnt-call-async) (API-sunrpc-clnt-call-async)] /Names [(API-sunrpc-clnt-call-async) 1943 0 R] >> endobj 5649 0 obj << /Limits [(API-sunrpc-clnt-call-sync) (API-sunrpc-clnt-call-sync)] /Names [(API-sunrpc-clnt-call-sync) 1946 0 R] >> endobj 5650 0 obj << /Limits [(API-sunrpc-clnt-clone-client) (API-sunrpc-clnt-clone-client)] /Names [(API-sunrpc-clnt-clone-client) 1949 0 R] >> endobj 5651 0 obj << /Limits [(API-sunrpc-clnt-create-client) (API-sunrpc-clnt-create-client)] /Names [(API-sunrpc-clnt-create-client) 1952 0 R] >> endobj 5652 0 obj << /Limits [(API-sunrpc-clnt-restart-call) (API-sunrpc-clnt-restart-call)] /Names [(API-sunrpc-clnt-restart-call) 1955 0 R] >> endobj 5653 0 obj << /Limits [(API-sunrpc-clnt-shutdown-client) (API-sunrpc-clnt-shutdown-client)] /Names [(API-sunrpc-clnt-shutdown-client) 1958 0 R] >> endobj 5654 0 obj << /Limits [(API-sunrpc-sched-delay) (API-sunrpc-sched-delay)] /Names [(API-sunrpc-sched-delay) 1961 0 R] >> endobj 5655 0 obj << /Limits [(API-sunrpc-sched-execute) (API-sunrpc-sched-execute)] /Names [(API-sunrpc-sched-execute) 1964 0 R] >> endobj 5656 0 obj << /Limits [(API-sunrpc-sched-new-task) (API-sunrpc-sched-new-task)] /Names [(API-sunrpc-sched-new-task) 1967 0 R] >> endobj 5657 0 obj << /Limits [(API-sunrpc-sched-release-task) (API-sunrpc-sched-release-task)] /Names [(API-sunrpc-sched-release-task) 1970 0 R] >> endobj 5658 0 obj << /Limits [(API-sunrpc-svc-create) (API-sunrpc-svc-create)] /Names [(API-sunrpc-svc-create) 1973 0 R] >> endobj 5659 0 obj << /Limits [(API-sunrpc-svc-destroy) (API-sunrpc-svc-destroy)] /Names [(API-sunrpc-svc-destroy) 1976 0 R] >> endobj 5660 0 obj << /Limits [(API-sunrpc-svc-drop) (API-sunrpc-svc-drop)] /Names [(API-sunrpc-svc-drop) 1979 0 R] >> endobj 5661 0 obj << /Limits [(API-sunrpc-svc-process) (API-sunrpc-svc-process)] /Names [(API-sunrpc-svc-process) 1982 0 R] >> endobj 5662 0 obj << /Limits [(API-sunrpc-svc-recv) (API-sunrpc-svc-recv)] /Names [(API-sunrpc-svc-recv) 1985 0 R] >> endobj 5663 0 obj << /Limits [(API-sunrpc-svc-register) (API-sunrpc-svc-register)] /Names [(API-sunrpc-svc-register) 1988 0 R] >> endobj 5664 0 obj << /Limits [(API-sunrpc-svc-send) (API-sunrpc-svc-send)] /Names [(API-sunrpc-svc-send) 1991 0 R] >> endobj 5665 0 obj << /Limits [(API-switch-file) (API-switch-file)] /Names [(API-switch-file) 4414 0 R] >> endobj 5666 0 obj << /Limits [(API-symdata) (API-symdata)] /Names [(API-symdata) 577 0 R] >> endobj 5667 0 obj << /Limits [(API-symfile) (API-symfile)] /Names [(API-symfile) 580 0 R] >> endobj 5668 0 obj << /Limits [(API-symfileline) (API-symfileline)] /Names [(API-symfileline) 583 0 R] >> endobj 5669 0 obj << /Limits [(API-symline) (API-symline)] /Names [(API-symline) 586 0 R] >> endobj 5670 0 obj << /Limits [(API-symname) (API-symname)] /Names [(API-symname) 589 0 R] >> endobj 5671 0 obj << /Limits [(API-syscall-any) (API-syscall-any)] /Names [(API-syscall-any) 4420 0 R] >> endobj 5672 0 obj << /Limits [(API-syscall-any-return) (API-syscall-any-return)] /Names [(API-syscall-any-return) 4423 0 R] >> endobj 5673 0 obj << /Limits [(API-system) (API-system)] /Names [(API-system) 1152 0 R] >> endobj 5674 0 obj << /Limits [(API-target) (API-target)] /Names [(API-target) 592 0 R] >> endobj 5675 0 obj << /Limits [(API-target-set-pid) (API-target-set-pid)] /Names [(API-target-set-pid) 2587 0 R] >> endobj 5676 0 obj << /Limits [(API-target-set-report) (API-target-set-report)] /Names [(API-target-set-report) 2590 0 R] >> endobj 5677 0 obj << /Limits [(API-task-ancestry) (API-task-ancestry)] /Names [(API-task-ancestry) 595 0 R] >> endobj 5678 0 obj << /Limits [(API-task-backtrace) (API-task-backtrace)] /Names [(API-task-backtrace) 598 0 R] >> endobj 5679 0 obj << /Limits [(API-task-cpu) (API-task-cpu)] /Names [(API-task-cpu) 601 0 R] >> endobj 5680 0 obj << /Limits [(API-task-current) (API-task-current)] /Names [(API-task-current) 604 0 R] >> endobj 5681 0 obj << /Limits [(API-task-cwd-path) (API-task-cwd-path)] /Names [(API-task-cwd-path) 607 0 R] >> endobj 5682 0 obj << /Limits [(API-task-dentry-path) (API-task-dentry-path)] /Names [(API-task-dentry-path) 2945 0 R] >> endobj 5683 0 obj << /Limits [(API-task-egid) (API-task-egid)] /Names [(API-task-egid) 610 0 R] >> endobj 5684 0 obj << /Limits [(API-task-euid) (API-task-euid)] /Names [(API-task-euid) 613 0 R] >> endobj 5685 0 obj << /Limits [(API-task-exe-file) (API-task-exe-file)] /Names [(API-task-exe-file) 616 0 R] >> endobj 5686 0 obj << /Limits [(API-task-execname) (API-task-execname)] /Names [(API-task-execname) 619 0 R] >> endobj 5687 0 obj << /Limits [(API-task-fd-lookup) (API-task-fd-lookup)] /Names [(API-task-fd-lookup) 622 0 R] >> endobj 5688 0 obj << /Limits [(API-task-gid) (API-task-gid)] /Names [(API-task-gid) 625 0 R] >> endobj 5689 0 obj << /Limits [(API-task-max-file-handles) (API-task-max-file-handles)] /Names [(API-task-max-file-handles) 628 0 R] >> endobj 5690 0 obj << /Limits [(API-task-nice) (API-task-nice)] /Names [(API-task-nice) 631 0 R] >> endobj 5691 0 obj << /Limits [(API-task-ns-egid) (API-task-ns-egid)] /Names [(API-task-ns-egid) 634 0 R] >> endobj 5692 0 obj << /Limits [(API-task-ns-euid) (API-task-ns-euid)] /Names [(API-task-ns-euid) 637 0 R] >> endobj 5693 0 obj << /Limits [(API-task-ns-gid) (API-task-ns-gid)] /Names [(API-task-ns-gid) 640 0 R] >> endobj 5694 0 obj << /Limits [(API-task-ns-pid) (API-task-ns-pid)] /Names [(API-task-ns-pid) 643 0 R] >> endobj 5695 0 obj << /Limits [(API-task-ns-tid) (API-task-ns-tid)] /Names [(API-task-ns-tid) 646 0 R] >> endobj 5696 0 obj << /Limits [(API-task-ns-uid) (API-task-ns-uid)] /Names [(API-task-ns-uid) 815 0 R] >> endobj 5697 0 obj << /Limits [(API-task-open-file-handles) (API-task-open-file-handles)] /Names [(API-task-open-file-handles) 818 0 R] >> endobj 5698 0 obj << /Limits [(API-task-parent) (API-task-parent)] /Names [(API-task-parent) 821 0 R] >> endobj 5699 0 obj << /Limits [(API-task-pid) (API-task-pid)] /Names [(API-task-pid) 824 0 R] >> endobj 5700 0 obj << /Limits [(API-task-prio) (API-task-prio)] /Names [(API-task-prio) 827 0 R] >> endobj 5701 0 obj << /Limits [(API-task-start-time) (API-task-start-time)] /Names [(API-task-start-time) 1251 0 R] >> endobj 5702 0 obj << /Limits [(API-task-state) (API-task-state)] /Names [(API-task-state) 830 0 R] >> endobj 5703 0 obj << /Limits [(API-task-stime) (API-task-stime)] /Names [(API-task-stime) 1254 0 R] >> endobj 5704 0 obj << /Limits [(API-task-tid) (API-task-tid)] /Names [(API-task-tid) 833 0 R] >> endobj 5705 0 obj << /Limits [(API-task-time-string) (API-task-time-string)] /Names [(API-task-time-string) 1257 0 R] >> endobj 5706 0 obj << /Limits [(API-task-time-string-tid) (API-task-time-string-tid)] /Names [(API-task-time-string-tid) 1260 0 R] >> endobj 5707 0 obj << /Limits [(API-task-uid) (API-task-uid)] /Names [(API-task-uid) 836 0 R] >> endobj 5708 0 obj << /Limits [(API-task-utime) (API-task-utime)] /Names [(API-task-utime) 1263 0 R] >> endobj 5709 0 obj << /Limits [(API-tcp-disconnect) (API-tcp-disconnect)] /Names [(API-tcp-disconnect) 1994 0 R] >> endobj 5710 0 obj << /Limits [(API-tcp-disconnect-return) (API-tcp-disconnect-return)] /Names [(API-tcp-disconnect-return) 1997 0 R] >> endobj 5711 0 obj << /Limits [(API-tcp-receive) (API-tcp-receive)] /Names [(API-tcp-receive) 2166 0 R] >> endobj 5712 0 obj << /Limits [(API-tcp-recvmsg) (API-tcp-recvmsg)] /Names [(API-tcp-recvmsg) 2169 0 R] >> endobj 5713 0 obj << /Limits [(API-tcp-recvmsg-return) (API-tcp-recvmsg-return)] /Names [(API-tcp-recvmsg-return) 2172 0 R] >> endobj 5714 0 obj << /Limits [(API-tcp-sendmsg) (API-tcp-sendmsg)] /Names [(API-tcp-sendmsg) 2175 0 R] >> endobj 5715 0 obj << /Limits [(API-tcp-sendmsg-return) (API-tcp-sendmsg-return)] /Names [(API-tcp-sendmsg-return) 2178 0 R] >> endobj 5716 0 obj << /Limits [(API-tcp-setsockopt) (API-tcp-setsockopt)] /Names [(API-tcp-setsockopt) 2181 0 R] >> endobj 5717 0 obj << /Limits [(API-tcp-setsockopt-return) (API-tcp-setsockopt-return)] /Names [(API-tcp-setsockopt-return) 2184 0 R] >> endobj 5718 0 obj << /Limits [(API-tcpmib-ActiveOpens) (API-tcpmib-ActiveOpens)] /Names [(API-tcpmib-ActiveOpens) 2551 0 R] >> endobj 5719 0 obj << /Limits [(API-tcpmib-AttemptFails) (API-tcpmib-AttemptFails)] /Names [(API-tcpmib-AttemptFails) 2554 0 R] >> endobj 5720 0 obj << /Limits [(API-tcpmib-CurrEstab) (API-tcpmib-CurrEstab)] /Names [(API-tcpmib-CurrEstab) 2557 0 R] >> endobj 5721 0 obj << /Limits [(API-tcpmib-EstabResets) (API-tcpmib-EstabResets)] /Names [(API-tcpmib-EstabResets) 2560 0 R] >> endobj 5722 0 obj << /Limits [(API-tcpmib-InSegs) (API-tcpmib-InSegs)] /Names [(API-tcpmib-InSegs) 2563 0 R] >> endobj 5723 0 obj << /Limits [(API-tcpmib-OutRsts) (API-tcpmib-OutRsts)] /Names [(API-tcpmib-OutRsts) 2566 0 R] >> endobj 5724 0 obj << /Limits [(API-tcpmib-OutSegs) (API-tcpmib-OutSegs)] /Names [(API-tcpmib-OutSegs) 2569 0 R] >> endobj 5725 0 obj << /Limits [(API-tcpmib-PassiveOpens) (API-tcpmib-PassiveOpens)] /Names [(API-tcpmib-PassiveOpens) 2572 0 R] >> endobj 5726 0 obj << /Limits [(API-tcpmib-RetransSegs) (API-tcpmib-RetransSegs)] /Names [(API-tcpmib-RetransSegs) 2575 0 R] >> endobj 5727 0 obj << /Limits [(API-tcpmib-filter-key) (API-tcpmib-filter-key)] /Names [(API-tcpmib-filter-key) 2322 0 R] >> endobj 5728 0 obj << /Limits [(API-tcpmib-get-state) (API-tcpmib-get-state)] /Names [(API-tcpmib-get-state) 2325 0 R] >> endobj 5729 0 obj << /Limits [(API-tcpmib-local-addr) (API-tcpmib-local-addr)] /Names [(API-tcpmib-local-addr) 2494 0 R] >> endobj 5730 0 obj << /Limits [(API-tcpmib-local-port) (API-tcpmib-local-port)] /Names [(API-tcpmib-local-port) 2497 0 R] >> endobj 5731 0 obj << /Limits [(API-tcpmib-remote-addr) (API-tcpmib-remote-addr)] /Names [(API-tcpmib-remote-addr) 2500 0 R] >> endobj 5732 0 obj << /Limits [(API-tcpmib-remote-port) (API-tcpmib-remote-port)] /Names [(API-tcpmib-remote-port) 2503 0 R] >> endobj 5733 0 obj << /Limits [(API-text-str) (API-text-str)] /Names [(API-text-str) 3637 0 R] >> endobj 5734 0 obj << /Limits [(API-text-strn) (API-text-strn)] /Names [(API-text-strn) 3806 0 R] >> endobj 5735 0 obj << /Limits [(API-thread-indent) (API-thread-indent)] /Names [(API-thread-indent) 3848 0 R] >> endobj 5736 0 obj << /Limits [(API-thread-indent-depth) (API-thread-indent-depth)] /Names [(API-thread-indent-depth) 3851 0 R] >> endobj 5737 0 obj << /Limits [(API-tid) (API-tid)] /Names [(API-tid) 839 0 R] >> endobj 5738 0 obj << /Limits [(API-tokenize) (API-tokenize)] /Names [(API-tokenize) 3809 0 R] >> endobj 5739 0 obj << /Limits [(API-tty-init) (API-tty-init)] /Names [(API-tty-init) 1567 0 R] >> endobj 5740 0 obj << /Limits [(API-tty-ioctl) (API-tty-ioctl)] /Names [(API-tty-ioctl) 1570 0 R] >> endobj 5741 0 obj << /Limits [(API-tty-open) (API-tty-open)] /Names [(API-tty-open) 1573 0 R] >> endobj 5742 0 obj << /Limits [(API-tty-poll) (API-tty-poll)] /Names [(API-tty-poll) 1576 0 R] >> endobj 5743 0 obj << /Limits [(API-tty-read) (API-tty-read)] /Names [(API-tty-read) 1579 0 R] >> endobj 5744 0 obj << /Limits [(API-tty-receive) (API-tty-receive)] /Names [(API-tty-receive) 1582 0 R] >> endobj 5745 0 obj << /Limits [(API-tty-register) (API-tty-register)] /Names [(API-tty-register) 1585 0 R] >> endobj 5746 0 obj << /Limits [(API-tty-release) (API-tty-release)] /Names [(API-tty-release) 1588 0 R] >> endobj 5747 0 obj << /Limits [(API-tty-resize) (API-tty-resize)] /Names [(API-tty-resize) 1591 0 R] >> endobj 5748 0 obj << /Limits [(API-tty-unregister) (API-tty-unregister)] /Names [(API-tty-unregister) 1594 0 R] >> endobj 5749 0 obj << /Limits [(API-tty-write) (API-tty-write)] /Names [(API-tty-write) 1597 0 R] >> endobj 5750 0 obj << /Limits [(API-tz-ctime) (API-tz-ctime)] /Names [(API-tz-ctime) 974 0 R] >> endobj 5751 0 obj << /Limits [(API-tz-gmtoff) (API-tz-gmtoff)] /Names [(API-tz-gmtoff) 1143 0 R] >> endobj 5752 0 obj << /Limits [(API-tz-name) (API-tz-name)] /Names [(API-tz-name) 1146 0 R] >> endobj 5753 0 obj << /Limits [(API-u-register) (API-u-register)] /Names [(API-u-register) 848 0 R] >> endobj 5754 0 obj << /Limits [(API-u32-arg) (API-u32-arg)] /Names [(API-u32-arg) 842 0 R] >> endobj 5755 0 obj << /Limits [(API-u64-arg) (API-u64-arg)] /Names [(API-u64-arg) 845 0 R] >> endobj 5756 0 obj << /Limits [(API-uaddr) (API-uaddr)] /Names [(API-uaddr) 851 0 R] >> endobj 5757 0 obj << /Limits [(API-ubacktrace) (API-ubacktrace)] /Names [(API-ubacktrace) 854 0 R] >> endobj 5758 0 obj << /Limits [(API-ucallers) (API-ucallers)] /Names [(API-ucallers) 857 0 R] >> endobj 5759 0 obj << /Limits [(API-udelay) (API-udelay)] /Names [(API-udelay) 3595 0 R] >> endobj 5760 0 obj << /Limits [(API-udp-disconnect) (API-udp-disconnect)] /Names [(API-udp-disconnect) 2187 0 R] >> endobj 5761 0 obj << /Limits [(API-udp-disconnect-return) (API-udp-disconnect-return)] /Names [(API-udp-disconnect-return) 2190 0 R] >> endobj 5762 0 obj << /Limits [(API-udp-recvmsg) (API-udp-recvmsg)] /Names [(API-udp-recvmsg) 2193 0 R] >> endobj 5763 0 obj << /Limits [(API-udp-recvmsg-return) (API-udp-recvmsg-return)] /Names [(API-udp-recvmsg-return) 2196 0 R] >> endobj 5764 0 obj << /Limits [(API-udp-sendmsg) (API-udp-sendmsg)] /Names [(API-udp-sendmsg) 2199 0 R] >> endobj 5765 0 obj << /Limits [(API-udp-sendmsg-return) (API-udp-sendmsg-return)] /Names [(API-udp-sendmsg-return) 2202 0 R] >> endobj 5766 0 obj << /Limits [(API-uid) (API-uid)] /Names [(API-uid) 860 0 R] >> endobj 5767 0 obj << /Limits [(API-uint-arg) (API-uint-arg)] /Names [(API-uint-arg) 863 0 R] >> endobj 5768 0 obj << /Limits [(API-ulong-arg) (API-ulong-arg)] /Names [(API-ulong-arg) 866 0 R] >> endobj 5769 0 obj << /Limits [(API-ulonglong-arg) (API-ulonglong-arg)] /Names [(API-ulonglong-arg) 869 0 R] >> endobj 5770 0 obj << /Limits [(API-umodname) (API-umodname)] /Names [(API-umodname) 872 0 R] >> endobj 5771 0 obj << /Limits [(API-usecs-to-string) (API-usecs-to-string)] /Names [(API-usecs-to-string) 1266 0 R] >> endobj 5772 0 obj << /Limits [(API-user-buffer-quoted) (API-user-buffer-quoted)] /Names [(API-user-buffer-quoted) 3234 0 R] >> endobj 5773 0 obj << /Limits [(API-user-buffer-quoted-error) (API-user-buffer-quoted-error)] /Names [(API-user-buffer-quoted-error) 3237 0 R] >> endobj 5774 0 obj << /Limits [(API-user-char) (API-user-char)] /Names [(API-user-char) 3240 0 R] >> endobj 5775 0 obj << /Limits [(API-user-char-error) (API-user-char-error)] /Names [(API-user-char-error) 3243 0 R] >> endobj 5776 0 obj << /Limits [(API-user-char-warn) (API-user-char-warn)] /Names [(API-user-char-warn) 3246 0 R] >> endobj 5777 0 obj << /Limits [(API-user-int) (API-user-int)] /Names [(API-user-int) 3249 0 R] >> endobj 5778 0 obj << /Limits [(API-user-int-error) (API-user-int-error)] /Names [(API-user-int-error) 3276 0 R] >> endobj 5779 0 obj << /Limits [(API-user-int-warn) (API-user-int-warn)] /Names [(API-user-int-warn) 3279 0 R] >> endobj 5780 0 obj << /Limits [(API-user-int16) (API-user-int16)] /Names [(API-user-int16) 3252 0 R] >> endobj 5781 0 obj << /Limits [(API-user-int16-error) (API-user-int16-error)] /Names [(API-user-int16-error) 3255 0 R] >> endobj 5782 0 obj << /Limits [(API-user-int32) (API-user-int32)] /Names [(API-user-int32) 3258 0 R] >> endobj 5783 0 obj << /Limits [(API-user-int32-error) (API-user-int32-error)] /Names [(API-user-int32-error) 3261 0 R] >> endobj 5784 0 obj << /Limits [(API-user-int64) (API-user-int64)] /Names [(API-user-int64) 3264 0 R] >> endobj 5785 0 obj << /Limits [(API-user-int64-error) (API-user-int64-error)] /Names [(API-user-int64-error) 3267 0 R] >> endobj 5786 0 obj << /Limits [(API-user-int8) (API-user-int8)] /Names [(API-user-int8) 3270 0 R] >> endobj 5787 0 obj << /Limits [(API-user-int8-error) (API-user-int8-error)] /Names [(API-user-int8-error) 3273 0 R] >> endobj 5788 0 obj << /Limits [(API-user-long) (API-user-long)] /Names [(API-user-long) 3282 0 R] >> endobj 5789 0 obj << /Limits [(API-user-long-error) (API-user-long-error)] /Names [(API-user-long-error) 3285 0 R] >> endobj 5790 0 obj << /Limits [(API-user-long-warn) (API-user-long-warn)] /Names [(API-user-long-warn) 3288 0 R] >> endobj 5791 0 obj << /Limits [(API-user-mode) (API-user-mode)] /Names [(API-user-mode) 875 0 R] >> endobj 5792 0 obj << /Limits [(API-user-short) (API-user-short)] /Names [(API-user-short) 3291 0 R] >> endobj 5793 0 obj << /Limits [(API-user-short-error) (API-user-short-error)] /Names [(API-user-short-error) 3294 0 R] >> endobj 5794 0 obj << /Limits [(API-user-short-warn) (API-user-short-warn)] /Names [(API-user-short-warn) 3297 0 R] >> endobj 5795 0 obj << /Limits [(API-user-string) (API-user-string)] /Names [(API-user-string) 3300 0 R] >> endobj 5796 0 obj << /Limits [(API-user-string-n) (API-user-string-n)] /Names [(API-user-string-n) 3303 0 R] >> endobj 5797 0 obj << /Limits [(API-user-string-n-quoted) (API-user-string-n-quoted)] /Names [(API-user-string-n-quoted) 3306 0 R] >> endobj 5798 0 obj << /Limits [(API-user-string-n-warn) (API-user-string-n-warn)] /Names [(API-user-string-n-warn) 3309 0 R] >> endobj 5799 0 obj << /Limits [(API-user-string-quoted) (API-user-string-quoted)] /Names [(API-user-string-quoted) 3478 0 R] >> endobj 5800 0 obj << /Limits [(API-user-string-quoted-utf16) (API-user-string-quoted-utf16)] /Names [(API-user-string-quoted-utf16) 3481 0 R] >> endobj 5801 0 obj << /Limits [(API-user-string-quoted-utf32) (API-user-string-quoted-utf32)] /Names [(API-user-string-quoted-utf32) 3484 0 R] >> endobj 5802 0 obj << /Limits [(API-user-string-utf16) (API-user-string-utf16)] /Names [(API-user-string-utf16) 3487 0 R] >> endobj 5803 0 obj << /Limits [(API-user-string-utf32) (API-user-string-utf32)] /Names [(API-user-string-utf32) 3490 0 R] >> endobj 5804 0 obj << /Limits [(API-user-string-warn) (API-user-string-warn)] /Names [(API-user-string-warn) 3493 0 R] >> endobj 5805 0 obj << /Limits [(API-user-uint16) (API-user-uint16)] /Names [(API-user-uint16) 3496 0 R] >> endobj 5806 0 obj << /Limits [(API-user-uint16-error) (API-user-uint16-error)] /Names [(API-user-uint16-error) 3499 0 R] >> endobj 5807 0 obj << /Limits [(API-user-uint32) (API-user-uint32)] /Names [(API-user-uint32) 3502 0 R] >> endobj 5808 0 obj << /Limits [(API-user-uint32-error) (API-user-uint32-error)] /Names [(API-user-uint32-error) 3505 0 R] >> endobj 5809 0 obj << /Limits [(API-user-uint64) (API-user-uint64)] /Names [(API-user-uint64) 3508 0 R] >> endobj 5810 0 obj << /Limits [(API-user-uint64-error) (API-user-uint64-error)] /Names [(API-user-uint64-error) 3511 0 R] >> endobj 5811 0 obj << /Limits [(API-user-uint8) (API-user-uint8)] /Names [(API-user-uint8) 3514 0 R] >> endobj 5812 0 obj << /Limits [(API-user-uint8-error) (API-user-uint8-error)] /Names [(API-user-uint8-error) 3517 0 R] >> endobj 5813 0 obj << /Limits [(API-user-ulong) (API-user-ulong)] /Names [(API-user-ulong) 3520 0 R] >> endobj 5814 0 obj << /Limits [(API-user-ulong-error) (API-user-ulong-error)] /Names [(API-user-ulong-error) 3523 0 R] >> endobj 5815 0 obj << /Limits [(API-user-ulong-warn) (API-user-ulong-warn)] /Names [(API-user-ulong-warn) 3526 0 R] >> endobj 5816 0 obj << /Limits [(API-user-ushort) (API-user-ushort)] /Names [(API-user-ushort) 3529 0 R] >> endobj 5817 0 obj << /Limits [(API-user-ushort-error) (API-user-ushort-error)] /Names [(API-user-ushort-error) 3532 0 R] >> endobj 5818 0 obj << /Limits [(API-user-ushort-warn) (API-user-ushort-warn)] /Names [(API-user-ushort-warn) 3535 0 R] >> endobj 5819 0 obj << /Limits [(API-usrdev2kerndev) (API-usrdev2kerndev)] /Names [(API-usrdev2kerndev) 2912 0 R] >> endobj 5820 0 obj << /Limits [(API-ustack) (API-ustack)] /Names [(API-ustack) 878 0 R] >> endobj 5821 0 obj << /Limits [(API-usymdata) (API-usymdata)] /Names [(API-usymdata) 881 0 R] >> endobj 5822 0 obj << /Limits [(API-usymfile) (API-usymfile)] /Names [(API-usymfile) 884 0 R] >> endobj 5823 0 obj << /Limits [(API-usymfileline) (API-usymfileline)] /Names [(API-usymfileline) 887 0 R] >> endobj 5824 0 obj << /Limits [(API-usymline) (API-usymline)] /Names [(API-usymline) 890 0 R] >> endobj 5825 0 obj << /Limits [(API-usymname) (API-usymname)] /Names [(API-usymname) 893 0 R] >> endobj 5826 0 obj << /Limits [(API-vm-brk) (API-vm-brk)] /Names [(API-vm-brk) 1191 0 R] >> endobj 5827 0 obj << /Limits [(API-vm-fault-contains) (API-vm-fault-contains)] /Names [(API-vm-fault-contains) 1188 0 R] >> endobj 5828 0 obj << /Limits [(API-vm-kfree) (API-vm-kfree)] /Names [(API-vm-kfree) 1194 0 R] >> endobj 5829 0 obj << /Limits [(API-vm-kmalloc) (API-vm-kmalloc)] /Names [(API-vm-kmalloc) 1197 0 R] >> endobj 5830 0 obj << /Limits [(API-vm-kmalloc-node) (API-vm-kmalloc-node)] /Names [(API-vm-kmalloc-node) 1200 0 R] >> endobj 5831 0 obj << /Limits [(API-vm-kmem-cache-alloc) (API-vm-kmem-cache-alloc)] /Names [(API-vm-kmem-cache-alloc) 1203 0 R] >> endobj 5832 0 obj << /Limits [(API-vm-kmem-cache-alloc-node) (API-vm-kmem-cache-alloc-node)] /Names [(API-vm-kmem-cache-alloc-node) 1206 0 R] >> endobj 5833 0 obj << /Limits [(API-vm-kmem-cache-free) (API-vm-kmem-cache-free)] /Names [(API-vm-kmem-cache-free) 1209 0 R] >> endobj 5834 0 obj << /Limits [(API-vm-mmap) (API-vm-mmap)] /Names [(API-vm-mmap) 1212 0 R] >> endobj 5835 0 obj << /Limits [(API-vm-munmap) (API-vm-munmap)] /Names [(API-vm-munmap) 1215 0 R] >> endobj 5836 0 obj << /Limits [(API-vm-oom-kill) (API-vm-oom-kill)] /Names [(API-vm-oom-kill) 1218 0 R] >> endobj 5837 0 obj << /Limits [(API-vm-pagefault) (API-vm-pagefault)] /Names [(API-vm-pagefault) 1221 0 R] >> endobj 5838 0 obj << /Limits [(API-vm-pagefault-return) (API-vm-pagefault-return)] /Names [(API-vm-pagefault-return) 1224 0 R] >> endobj 5839 0 obj << /Limits [(API-vm-write-shared) (API-vm-write-shared)] /Names [(API-vm-write-shared) 1227 0 R] >> endobj 5840 0 obj << /Limits [(API-vm-write-shared-copy) (API-vm-write-shared-copy)] /Names [(API-vm-write-shared-copy) 1230 0 R] >> endobj 5841 0 obj << /Limits [(API-warn) (API-warn)] /Names [(API-warn) 2972 0 R] >> endobj 5842 0 obj << /Limits [(API-workqueue-create) (API-workqueue-create)] /Names [(API-workqueue-create) 1615 0 R] >> endobj 5843 0 obj << /Limits [(API-workqueue-destroy) (API-workqueue-destroy)] /Names [(API-workqueue-destroy) 1618 0 R] >> endobj 5844 0 obj << /Limits [(API-workqueue-execute) (API-workqueue-execute)] /Names [(API-workqueue-execute) 1621 0 R] >> endobj 5845 0 obj << /Limits [(API-workqueue-insert) (API-workqueue-insert)] /Names [(API-workqueue-insert) 1624 0 R] >> endobj 5846 0 obj << /Limits [(TapsetRef) (TapsetRef)] /Names [(TapsetRef) 4430 0 R] >> endobj 5847 0 obj << /Limits [(ansi.stp) (ansi.stp)] /Names [(ansi.stp) 3812 0 R] >> endobj 5848 0 obj << /Limits [(context_stp) (context_stp)] /Names [(context_stp) 171 0 R] >> endobj 5849 0 obj << /Limits [(conversions-guru.stp) (conversions-guru.stp)] /Names [(conversions-guru.stp) 3538 0 R] >> endobj 5850 0 obj << /Limits [(conversions.stp) (conversions.stp)] /Names [(conversions.stp) 3183 0 R] >> endobj 5851 0 obj << /Limits [(ctime.stp) (ctime.stp)] /Names [(ctime.stp) 968 0 R] >> endobj 5852 0 obj << /Limits [(dentry.stp) (dentry.stp)] /Names [(dentry.stp) 2915 0 R] >> endobj 5853 0 obj << /Limits [(dev.stp) (dev.stp)] /Names [(dev.stp) 2900 0 R] >> endobj 5854 0 obj << /Limits [(errno.stp) (errno.stp)] /Names [(errno.stp) 2879 0 R] >> endobj 5855 0 obj << /Limits [(guru-delay.stp) (guru-delay.stp)] /Names [(guru-delay.stp) 3583 0 R] >> endobj 5856 0 obj << /Limits [(introduction) (introduction)] /Names [(introduction) 168 0 R] >> endobj 5857 0 obj << /Limits [(iosched.stp) (iosched.stp)] /Names [(iosched.stp) 1486 0 R] >> endobj 5858 0 obj << /Limits [(irq.stp) (irq.stp)] /Names [(irq.stp) 1600 0 R] >> endobj 5859 0 obj << /Limits [(json.stp) (json.stp)] /Names [(json.stp) 4369 0 R] >> endobj 5860 0 obj << /Limits [(kprocess.stp) (kprocess.stp)] /Names [(kprocess.stp) 2578 0 R] >> endobj 5861 0 obj << /Limits [(logging.stp) (logging.stp)] /Names [(logging.stp) 2948 0 R] >> endobj 5862 0 obj << /Limits [(memory_stp) (memory_stp)] /Names [(memory_stp) 1155 0 R] >> endobj 5863 0 obj << /Limits [(networking.stp) (networking.stp)] /Names [(networking.stp) 1627 0 R] >> endobj 5864 0 obj << /Limits [(nfsd.stp) (nfsd.stp)] /Names [(nfsd.stp) 3938 0 R] >> endobj 5865 0 obj << /Limits [(queue_stats.stp) (queue_stats.stp)] /Names [(queue_stats.stp) 2975 0 R] >> endobj 5866 0 obj << /Limits [(random.stp) (random.stp)] /Names [(random.stp) 3177 0 R] >> endobj 5867 0 obj << /Limits [(rlimit.stp) (rlimit.stp)] /Names [(rlimit.stp) 2894 0 R] >> endobj 5868 0 obj << /Limits [(sched.stp) (sched.stp)] /Names [(sched.stp) 1269 0 R] >> endobj 5869 0 obj << /Limits [(scsi.stp) (scsi.stp)] /Names [(scsi.stp) 1543 0 R] >> endobj 5870 0 obj << /Limits [(signal.stp) (signal.stp)] /Names [(signal.stp) 2611 0 R] >> endobj 5871 0 obj << /Limits [(snmp.stp) (snmp.stp)] /Names [(snmp.stp) 2298 0 R] >> endobj 5872 0 obj << /Limits [(socket.stp) (socket.stp)] /Names [(socket.stp) 2205 0 R] >> endobj 5873 0 obj << /Limits [(speculation.stp) (speculation.stp)] /Names [(speculation.stp) 4287 0 R] >> endobj 5874 0 obj << /Limits [(stap_staticmarkers.stp) (stap_staticmarkers.stp)] /Names [(stap_staticmarkers.stp) 3854 0 R] >> endobj 5875 0 obj << /Limits [(string.stp) (string.stp)] /Names [(string.stp) 3598 0 R] >> endobj 5876 0 obj << /Limits [(switchfile.stp) (switchfile.stp)] /Names [(switchfile.stp) 4411 0 R] >> endobj 5877 0 obj << /Limits [(syscall_any.stp) (syscall_any.stp)] /Names [(syscall_any.stp) 4417 0 R] >> endobj 5878 0 obj << /Limits [(system.stp) (system.stp)] /Names [(system.stp) 1149 0 R] >> endobj 5879 0 obj << /Limits [(task_time_stp) (task_time_stp)] /Names [(task_time_stp) 1233 0 R] >> endobj 5880 0 obj << /Limits [(timestamp_stp) (timestamp_stp)] /Names [(timestamp_stp) 896 0 R] >> endobj 5881 0 obj << /Limits [(tty.stp) (tty.stp)] /Names [(tty.stp) 1564 0 R] >> endobj 5882 0 obj << /Limits [(API-HZ) (tty.stp)] /Kids [5161 0 R 5162 0 R 5163 0 R 5164 0 R 5165 0 R 5166 0 R 5167 0 R 5168 0 R 5169 0 R 5170 0 R 5171 0 R 5172 0 R 5173 0 R 5174 0 R 5175 0 R 5176 0 R 5177 0 R 5178 0 R 5179 0 R 5180 0 R 5181 0 R 5182 0 R 5183 0 R 5184 0 R 5185 0 R 5186 0 R 5187 0 R 5188 0 R 5189 0 R 5190 0 R 5191 0 R 5192 0 R 5193 0 R 5194 0 R 5195 0 R 5196 0 R 5197 0 R 5198 0 R 5199 0 R 5200 0 R 5201 0 R 5202 0 R 5203 0 R 5204 0 R 5205 0 R 5206 0 R 5207 0 R 5208 0 R 5209 0 R 5210 0 R 5211 0 R 5212 0 R 5213 0 R 5214 0 R 5215 0 R 5216 0 R 5217 0 R 5218 0 R 5219 0 R 5220 0 R 5221 0 R 5222 0 R 5223 0 R 5224 0 R 5225 0 R 5226 0 R 5227 0 R 5228 0 R 5229 0 R 5230 0 R 5231 0 R 5232 0 R 5233 0 R 5234 0 R 5235 0 R 5236 0 R 5237 0 R 5238 0 R 5239 0 R 5240 0 R 5241 0 R 5242 0 R 5243 0 R 5244 0 R 5245 0 R 5246 0 R 5247 0 R 5248 0 R 5249 0 R 5250 0 R 5251 0 R 5252 0 R 5253 0 R 5254 0 R 5255 0 R 5256 0 R 5257 0 R 5258 0 R 5259 0 R 5260 0 R 5261 0 R 5262 0 R 5263 0 R 5264 0 R 5265 0 R 5266 0 R 5267 0 R 5268 0 R 5269 0 R 5270 0 R 5271 0 R 5272 0 R 5273 0 R 5274 0 R 5275 0 R 5276 0 R 5277 0 R 5278 0 R 5279 0 R 5280 0 R 5281 0 R 5282 0 R 5283 0 R 5284 0 R 5285 0 R 5286 0 R 5287 0 R 5288 0 R 5289 0 R 5290 0 R 5291 0 R 5292 0 R 5293 0 R 5294 0 R 5295 0 R 5296 0 R 5297 0 R 5298 0 R 5299 0 R 5300 0 R 5301 0 R 5302 0 R 5303 0 R 5304 0 R 5305 0 R 5306 0 R 5307 0 R 5308 0 R 5309 0 R 5310 0 R 5311 0 R 5312 0 R 5313 0 R 5314 0 R 5315 0 R 5316 0 R 5317 0 R 5318 0 R 5319 0 R 5320 0 R 5321 0 R 5322 0 R 5323 0 R 5324 0 R 5325 0 R 5326 0 R 5327 0 R 5328 0 R 5329 0 R 5330 0 R 5331 0 R 5332 0 R 5333 0 R 5334 0 R 5335 0 R 5336 0 R 5337 0 R 5338 0 R 5339 0 R 5340 0 R 5341 0 R 5342 0 R 5343 0 R 5344 0 R 5345 0 R 5346 0 R 5347 0 R 5348 0 R 5349 0 R 5350 0 R 5351 0 R 5352 0 R 5353 0 R 5354 0 R 5355 0 R 5356 0 R 5357 0 R 5358 0 R 5359 0 R 5360 0 R 5361 0 R 5362 0 R 5363 0 R 5364 0 R 5365 0 R 5366 0 R 5367 0 R 5368 0 R 5369 0 R 5370 0 R 5371 0 R 5372 0 R 5373 0 R 5374 0 R 5375 0 R 5376 0 R 5377 0 R 5378 0 R 5379 0 R 5380 0 R 5381 0 R 5382 0 R 5383 0 R 5384 0 R 5385 0 R 5386 0 R 5387 0 R 5388 0 R 5389 0 R 5390 0 R 5391 0 R 5392 0 R 5393 0 R 5394 0 R 5395 0 R 5396 0 R 5397 0 R 5398 0 R 5399 0 R 5400 0 R 5401 0 R 5402 0 R 5403 0 R 5404 0 R 5405 0 R 5406 0 R 5407 0 R 5408 0 R 5409 0 R 5410 0 R 5411 0 R 5412 0 R 5413 0 R 5414 0 R 5415 0 R 5416 0 R 5417 0 R 5418 0 R 5419 0 R 5420 0 R 5421 0 R 5422 0 R 5423 0 R 5424 0 R 5425 0 R 5426 0 R 5427 0 R 5428 0 R 5429 0 R 5430 0 R 5431 0 R 5432 0 R 5433 0 R 5434 0 R 5435 0 R 5436 0 R 5437 0 R 5438 0 R 5439 0 R 5440 0 R 5441 0 R 5442 0 R 5443 0 R 5444 0 R 5445 0 R 5446 0 R 5447 0 R 5448 0 R 5449 0 R 5450 0 R 5451 0 R 5452 0 R 5453 0 R 5454 0 R 5455 0 R 5456 0 R 5457 0 R 5458 0 R 5459 0 R 5460 0 R 5461 0 R 5462 0 R 5463 0 R 5464 0 R 5465 0 R 5466 0 R 5467 0 R 5468 0 R 5469 0 R 5470 0 R 5471 0 R 5472 0 R 5473 0 R 5474 0 R 5475 0 R 5476 0 R 5477 0 R 5478 0 R 5479 0 R 5480 0 R 5481 0 R 5482 0 R 5483 0 R 5484 0 R 5485 0 R 5486 0 R 5487 0 R 5488 0 R 5489 0 R 5490 0 R 5491 0 R 5492 0 R 5493 0 R 5494 0 R 5495 0 R 5496 0 R 5497 0 R 5498 0 R 5499 0 R 5500 0 R 5501 0 R 5502 0 R 5503 0 R 5504 0 R 5505 0 R 5506 0 R 5507 0 R 5508 0 R 5509 0 R 5510 0 R 5511 0 R 5512 0 R 5513 0 R 5514 0 R 5515 0 R 5516 0 R 5517 0 R 5518 0 R 5519 0 R 5520 0 R 5521 0 R 5522 0 R 5523 0 R 5524 0 R 5525 0 R 5526 0 R 5527 0 R 5528 0 R 5529 0 R 5530 0 R 5531 0 R 5532 0 R 5533 0 R 5534 0 R 5535 0 R 5536 0 R 5537 0 R 5538 0 R 5539 0 R 5540 0 R 5541 0 R 5542 0 R 5543 0 R 5544 0 R 5545 0 R 5546 0 R 5547 0 R 5548 0 R 5549 0 R 5550 0 R 5551 0 R 5552 0 R 5553 0 R 5554 0 R 5555 0 R 5556 0 R 5557 0 R 5558 0 R 5559 0 R 5560 0 R 5561 0 R 5562 0 R 5563 0 R 5564 0 R 5565 0 R 5566 0 R 5567 0 R 5568 0 R 5569 0 R 5570 0 R 5571 0 R 5572 0 R 5573 0 R 5574 0 R 5575 0 R 5576 0 R 5577 0 R 5578 0 R 5579 0 R 5580 0 R 5581 0 R 5582 0 R 5583 0 R 5584 0 R 5585 0 R 5586 0 R 5587 0 R 5588 0 R 5589 0 R 5590 0 R 5591 0 R 5592 0 R 5593 0 R 5594 0 R 5595 0 R 5596 0 R 5597 0 R 5598 0 R 5599 0 R 5600 0 R 5601 0 R 5602 0 R 5603 0 R 5604 0 R 5605 0 R 5606 0 R 5607 0 R 5608 0 R 5609 0 R 5610 0 R 5611 0 R 5612 0 R 5613 0 R 5614 0 R 5615 0 R 5616 0 R 5617 0 R 5618 0 R 5619 0 R 5620 0 R 5621 0 R 5622 0 R 5623 0 R 5624 0 R 5625 0 R 5626 0 R 5627 0 R 5628 0 R 5629 0 R 5630 0 R 5631 0 R 5632 0 R 5633 0 R 5634 0 R 5635 0 R 5636 0 R 5637 0 R 5638 0 R 5639 0 R 5640 0 R 5641 0 R 5642 0 R 5643 0 R 5644 0 R 5645 0 R 5646 0 R 5647 0 R 5648 0 R 5649 0 R 5650 0 R 5651 0 R 5652 0 R 5653 0 R 5654 0 R 5655 0 R 5656 0 R 5657 0 R 5658 0 R 5659 0 R 5660 0 R 5661 0 R 5662 0 R 5663 0 R 5664 0 R 5665 0 R 5666 0 R 5667 0 R 5668 0 R 5669 0 R 5670 0 R 5671 0 R 5672 0 R 5673 0 R 5674 0 R 5675 0 R 5676 0 R 5677 0 R 5678 0 R 5679 0 R 5680 0 R 5681 0 R 5682 0 R 5683 0 R 5684 0 R 5685 0 R 5686 0 R 5687 0 R 5688 0 R 5689 0 R 5690 0 R 5691 0 R 5692 0 R 5693 0 R 5694 0 R 5695 0 R 5696 0 R 5697 0 R 5698 0 R 5699 0 R 5700 0 R 5701 0 R 5702 0 R 5703 0 R 5704 0 R 5705 0 R 5706 0 R 5707 0 R 5708 0 R 5709 0 R 5710 0 R 5711 0 R 5712 0 R 5713 0 R 5714 0 R 5715 0 R 5716 0 R 5717 0 R 5718 0 R 5719 0 R 5720 0 R 5721 0 R 5722 0 R 5723 0 R 5724 0 R 5725 0 R 5726 0 R 5727 0 R 5728 0 R 5729 0 R 5730 0 R 5731 0 R 5732 0 R 5733 0 R 5734 0 R 5735 0 R 5736 0 R 5737 0 R 5738 0 R 5739 0 R 5740 0 R 5741 0 R 5742 0 R 5743 0 R 5744 0 R 5745 0 R 5746 0 R 5747 0 R 5748 0 R 5749 0 R 5750 0 R 5751 0 R 5752 0 R 5753 0 R 5754 0 R 5755 0 R 5756 0 R 5757 0 R 5758 0 R 5759 0 R 5760 0 R 5761 0 R 5762 0 R 5763 0 R 5764 0 R 5765 0 R 5766 0 R 5767 0 R 5768 0 R 5769 0 R 5770 0 R 5771 0 R 5772 0 R 5773 0 R 5774 0 R 5775 0 R 5776 0 R 5777 0 R 5778 0 R 5779 0 R 5780 0 R 5781 0 R 5782 0 R 5783 0 R 5784 0 R 5785 0 R 5786 0 R 5787 0 R 5788 0 R 5789 0 R 5790 0 R 5791 0 R 5792 0 R 5793 0 R 5794 0 R 5795 0 R 5796 0 R 5797 0 R 5798 0 R 5799 0 R 5800 0 R 5801 0 R 5802 0 R 5803 0 R 5804 0 R 5805 0 R 5806 0 R 5807 0 R 5808 0 R 5809 0 R 5810 0 R 5811 0 R 5812 0 R 5813 0 R 5814 0 R 5815 0 R 5816 0 R 5817 0 R 5818 0 R 5819 0 R 5820 0 R 5821 0 R 5822 0 R 5823 0 R 5824 0 R 5825 0 R 5826 0 R 5827 0 R 5828 0 R 5829 0 R 5830 0 R 5831 0 R 5832 0 R 5833 0 R 5834 0 R 5835 0 R 5836 0 R 5837 0 R 5838 0 R 5839 0 R 5840 0 R 5841 0 R 5842 0 R 5843 0 R 5844 0 R 5845 0 R 5846 0 R 5847 0 R 5848 0 R 5849 0 R 5850 0 R 5851 0 R 5852 0 R 5853 0 R 5854 0 R 5855 0 R 5856 0 R 5857 0 R 5858 0 R 5859 0 R 5860 0 R 5861 0 R 5862 0 R 5863 0 R 5864 0 R 5865 0 R 5866 0 R 5867 0 R 5868 0 R 5869 0 R 5870 0 R 5871 0 R 5872 0 R 5873 0 R 5874 0 R 5875 0 R 5876 0 R 5877 0 R 5878 0 R 5879 0 R 5880 0 R 5881 0 R] >> endobj 11 0 obj << /Type /Pages /Count 749 /Kids [9 0 R 14 0 R 324 0 R 652 0 R 980 0 R 1308 0 R 1636 0 R 2003 0 R 2331 0 R 2659 0 R 2987 0 R 3315 0 R 3643 0 R 3971 0 R 4299 0 R 4429 0 R 17 0 R 20 0 R 23 0 R 26 0 R 29 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R 47 0 R 50 0 R 53 0 R 56 0 R 59 0 R 62 0 R 65 0 R 68 0 R 71 0 R 74 0 R 77 0 R 80 0 R 83 0 R 86 0 R 89 0 R 92 0 R 95 0 R 98 0 R 101 0 R 104 0 R 107 0 R 110 0 R 113 0 R 116 0 R 119 0 R 122 0 R 125 0 R 128 0 R 131 0 R 134 0 R 137 0 R 140 0 R 143 0 R 146 0 R 149 0 R 152 0 R 155 0 R 158 0 R 161 0 R 164 0 R 167 0 R 327 0 R 330 0 R 333 0 R 336 0 R 339 0 R 342 0 R 345 0 R 348 0 R 351 0 R 354 0 R 357 0 R 360 0 R 363 0 R 366 0 R 369 0 R 372 0 R 375 0 R 378 0 R 381 0 R 384 0 R 387 0 R 390 0 R 393 0 R 396 0 R 399 0 R 402 0 R 405 0 R 408 0 R 411 0 R 414 0 R 417 0 R 420 0 R 423 0 R 426 0 R 429 0 R 432 0 R 435 0 R 438 0 R 441 0 R 444 0 R 447 0 R 450 0 R 453 0 R 456 0 R 459 0 R 462 0 R 465 0 R 468 0 R 471 0 R 474 0 R 477 0 R 480 0 R 483 0 R 486 0 R 655 0 R 658 0 R 661 0 R 664 0 R 667 0 R 670 0 R 673 0 R 676 0 R 679 0 R 682 0 R 685 0 R 688 0 R 691 0 R 694 0 R 697 0 R 700 0 R 703 0 R 706 0 R 709 0 R 712 0 R 715 0 R 718 0 R 721 0 R 724 0 R 727 0 R 730 0 R 733 0 R 736 0 R 739 0 R 742 0 R 745 0 R 748 0 R 751 0 R 754 0 R 757 0 R 760 0 R 763 0 R 766 0 R 769 0 R 772 0 R 775 0 R 778 0 R 781 0 R 784 0 R 787 0 R 790 0 R 793 0 R 796 0 R 799 0 R 802 0 R 805 0 R 808 0 R 811 0 R 814 0 R 983 0 R 986 0 R 989 0 R 992 0 R 995 0 R 998 0 R 1001 0 R 1004 0 R 1007 0 R 1010 0 R 1013 0 R 1016 0 R 1019 0 R 1022 0 R 1025 0 R 1028 0 R 1031 0 R 1034 0 R 1037 0 R 1040 0 R 1043 0 R 1046 0 R 1049 0 R 1052 0 R 1055 0 R 1058 0 R 1061 0 R 1064 0 R 1067 0 R 1070 0 R 1073 0 R 1076 0 R 1079 0 R 1082 0 R 1085 0 R 1088 0 R 1091 0 R 1094 0 R 1097 0 R 1100 0 R 1103 0 R 1106 0 R 1109 0 R 1112 0 R 1115 0 R 1118 0 R 1121 0 R 1124 0 R 1127 0 R 1130 0 R 1133 0 R 1136 0 R 1139 0 R 1142 0 R 1311 0 R 1314 0 R 1317 0 R 1320 0 R 1323 0 R 1326 0 R 1329 0 R 1332 0 R 1335 0 R 1338 0 R 1341 0 R 1344 0 R 1347 0 R 1350 0 R 1353 0 R 1356 0 R 1359 0 R 1362 0 R 1365 0 R 1368 0 R 1371 0 R 1374 0 R 1377 0 R 1380 0 R 1383 0 R 1386 0 R 1389 0 R 1392 0 R 1395 0 R 1398 0 R 1401 0 R 1404 0 R 1407 0 R 1410 0 R 1413 0 R 1416 0 R 1419 0 R 1422 0 R 1425 0 R 1428 0 R 1431 0 R 1434 0 R 1437 0 R 1440 0 R 1443 0 R 1446 0 R 1449 0 R 1452 0 R 1455 0 R 1458 0 R 1461 0 R 1464 0 R 1467 0 R 1470 0 R 1639 0 R 1642 0 R 1645 0 R 1648 0 R 1651 0 R 1654 0 R 1657 0 R 1660 0 R 1663 0 R 1666 0 R 1669 0 R 1672 0 R 1675 0 R 1678 0 R 1681 0 R 1684 0 R 1687 0 R 1690 0 R 1693 0 R 1696 0 R 1699 0 R 1702 0 R 1705 0 R 1708 0 R 1711 0 R 1714 0 R 1717 0 R 1720 0 R 1723 0 R 1726 0 R 1729 0 R 1732 0 R 1735 0 R 1738 0 R 1741 0 R 1744 0 R 1747 0 R 1750 0 R 1753 0 R 1756 0 R 1759 0 R 1762 0 R 1765 0 R 1768 0 R 1771 0 R 1774 0 R 1777 0 R 1780 0 R 1783 0 R 1786 0 R 1789 0 R 1792 0 R 1795 0 R 1798 0 R 1801 0 R 1804 0 R 1807 0 R 1810 0 R 1813 0 R 1816 0 R 1819 0 R 1822 0 R 1825 0 R 1828 0 R 1831 0 R 1834 0 R 1837 0 R 2006 0 R 2009 0 R 2012 0 R 2015 0 R 2018 0 R 2021 0 R 2024 0 R 2027 0 R 2030 0 R 2033 0 R 2036 0 R 2039 0 R 2042 0 R 2045 0 R 2048 0 R 2051 0 R 2054 0 R 2057 0 R 2060 0 R 2063 0 R 2066 0 R 2069 0 R 2072 0 R 2075 0 R 2078 0 R 2081 0 R 2084 0 R 2087 0 R 2090 0 R 2093 0 R 2096 0 R 2099 0 R 2102 0 R 2105 0 R 2108 0 R 2111 0 R 2114 0 R 2117 0 R 2120 0 R 2123 0 R 2126 0 R 2129 0 R 2132 0 R 2135 0 R 2138 0 R 2141 0 R 2144 0 R 2147 0 R 2150 0 R 2153 0 R 2156 0 R 2159 0 R 2162 0 R 2165 0 R 2334 0 R 2337 0 R 2340 0 R 2343 0 R 2346 0 R 2349 0 R 2352 0 R 2355 0 R 2358 0 R 2361 0 R 2364 0 R 2367 0 R 2370 0 R 2373 0 R 2376 0 R 2379 0 R 2382 0 R 2385 0 R 2388 0 R 2391 0 R 2394 0 R 2397 0 R 2400 0 R 2403 0 R 2406 0 R 2409 0 R 2412 0 R 2415 0 R 2418 0 R 2421 0 R 2424 0 R 2427 0 R 2430 0 R 2433 0 R 2436 0 R 2439 0 R 2442 0 R 2445 0 R 2448 0 R 2451 0 R 2454 0 R 2457 0 R 2460 0 R 2463 0 R 2466 0 R 2469 0 R 2472 0 R 2475 0 R 2478 0 R 2481 0 R 2484 0 R 2487 0 R 2490 0 R 2493 0 R 2662 0 R 2665 0 R 2668 0 R 2671 0 R 2674 0 R 2677 0 R 2680 0 R 2683 0 R 2686 0 R 2689 0 R 2692 0 R 2695 0 R 2698 0 R 2701 0 R 2704 0 R 2707 0 R 2710 0 R 2713 0 R 2716 0 R 2719 0 R 2722 0 R 2725 0 R 2728 0 R 2731 0 R 2734 0 R 2737 0 R 2740 0 R 2743 0 R 2746 0 R 2749 0 R 2752 0 R 2755 0 R 2758 0 R 2761 0 R 2764 0 R 2767 0 R 2770 0 R 2773 0 R 2776 0 R 2779 0 R 2782 0 R 2785 0 R 2788 0 R 2791 0 R 2794 0 R 2797 0 R 2800 0 R 2803 0 R 2806 0 R 2809 0 R 2812 0 R 2815 0 R 2818 0 R 2821 0 R 2990 0 R 2993 0 R 2996 0 R 2999 0 R 3002 0 R 3005 0 R 3008 0 R 3011 0 R 3014 0 R 3017 0 R 3020 0 R 3023 0 R 3026 0 R 3029 0 R 3032 0 R 3035 0 R 3038 0 R 3041 0 R 3044 0 R 3047 0 R 3050 0 R 3053 0 R 3056 0 R 3059 0 R 3062 0 R 3065 0 R 3068 0 R 3071 0 R 3074 0 R 3077 0 R 3080 0 R 3083 0 R 3086 0 R 3089 0 R 3092 0 R 3095 0 R 3098 0 R 3101 0 R 3104 0 R 3107 0 R 3110 0 R 3113 0 R 3116 0 R 3119 0 R 3122 0 R 3125 0 R 3128 0 R 3131 0 R 3134 0 R 3137 0 R 3140 0 R 3143 0 R 3146 0 R 3149 0 R 3318 0 R 3321 0 R 3324 0 R 3327 0 R 3330 0 R 3333 0 R 3336 0 R 3339 0 R 3342 0 R 3345 0 R 3348 0 R 3351 0 R 3354 0 R 3357 0 R 3360 0 R 3363 0 R 3366 0 R 3369 0 R 3372 0 R 3375 0 R 3378 0 R 3381 0 R 3384 0 R 3387 0 R 3390 0 R 3393 0 R 3396 0 R 3399 0 R 3402 0 R 3405 0 R 3408 0 R 3411 0 R 3414 0 R 3417 0 R 3420 0 R 3423 0 R 3426 0 R 3429 0 R 3432 0 R 3435 0 R 3438 0 R 3441 0 R 3444 0 R 3447 0 R 3450 0 R 3453 0 R 3456 0 R 3459 0 R 3462 0 R 3465 0 R 3468 0 R 3471 0 R 3474 0 R 3477 0 R 3646 0 R 3649 0 R 3652 0 R 3655 0 R 3658 0 R 3661 0 R 3664 0 R 3667 0 R 3670 0 R 3673 0 R 3676 0 R 3679 0 R 3682 0 R 3685 0 R 3688 0 R 3691 0 R 3694 0 R 3697 0 R 3700 0 R 3703 0 R 3706 0 R 3709 0 R 3712 0 R 3715 0 R 3718 0 R 3721 0 R 3724 0 R 3727 0 R 3730 0 R 3733 0 R 3736 0 R 3739 0 R 3742 0 R 3745 0 R 3748 0 R 3751 0 R 3754 0 R 3757 0 R 3760 0 R 3763 0 R 3766 0 R 3769 0 R 3772 0 R 3775 0 R 3778 0 R 3781 0 R 3784 0 R 3787 0 R 3790 0 R 3793 0 R 3796 0 R 3799 0 R 3802 0 R 3805 0 R 3974 0 R 3977 0 R 3980 0 R 3983 0 R 3986 0 R 3989 0 R 3992 0 R 3995 0 R 3998 0 R 4001 0 R 4004 0 R 4007 0 R 4010 0 R 4013 0 R 4016 0 R 4019 0 R 4022 0 R 4025 0 R 4028 0 R 4031 0 R 4034 0 R 4037 0 R 4040 0 R 4043 0 R 4046 0 R 4049 0 R 4052 0 R 4055 0 R 4058 0 R 4061 0 R 4064 0 R 4067 0 R 4070 0 R 4073 0 R 4076 0 R 4079 0 R 4082 0 R 4085 0 R 4088 0 R 4091 0 R 4094 0 R 4097 0 R 4100 0 R 4103 0 R 4106 0 R 4109 0 R 4112 0 R 4115 0 R 4118 0 R 4121 0 R 4124 0 R 4127 0 R 4130 0 R 4133 0 R 4302 0 R 4305 0 R 4308 0 R 4311 0 R 4314 0 R 4317 0 R 4320 0 R 4323 0 R 4326 0 R 4329 0 R 4332 0 R 4335 0 R 4338 0 R 4341 0 R 4344 0 R 4347 0 R 4350 0 R 4353 0 R 4356 0 R 4359 0 R 4362 0 R ] >> endobj 5883 0 obj << /Type /Catalog /Pages 11 0 R /Lang (en) /Metadata 5 0 R /PageLabels 5884 0 R /Outlines 4432 0 R /PageMode /UseOutlines /Names 5885 0 R >> endobj 10 0 obj << /Font << /F6 5155 0 R /F7 5156 0 R /F9 5157 0 R /F10 5158 0 R /F3 5159 0 R /F5 5160 0 R >> /ProcSet [/PDF /ImageB /ImageC /Text] /ColorSpace << /DefaultRGB 4 0 R >> >> endobj 5884 0 obj << /Nums [0 << /S /r >> 2 << /S /r /St 3 >> 3 << /S /r /St 4 >> 4 << /S /r /St 5 >> 5 << /S /r /St 6 >> 6 << /S /r /St 7 >> 7 << /S /r /St 8 >> 8 << /S /r /St 9 >> 9 << /S /r /St 10 >> 10 << /S /r /St 11 >> 11 << /S /r /St 12 >> 12 << /S /r /St 13 >> 13 << /S /r /St 14 >> 14 << /S /r /St 15 >> 15 << /S /r /St 16 >> 16 << /S /D >> 67 << /S /D /St 52 >> 121 << /S /D /St 106 >> 175 << /S /D /St 160 >> 229 << /S /D /St 214 >> 283 << /S /D /St 268 >> 350 << /S /D /St 335 >> 404 << /S /D /St 389 >> 458 << /S /D /St 443 >> 512 << /S /D /St 497 >> 566 << /S /D /St 551 >> 620 << /S /D /St 605 >> 674 << /S /D /St 659 >> 728 << /S /D /St 713 >>] >> endobj 4432 0 obj << /First 4431 0 R /Last 5151 0 R >> endobj 5885 0 obj << /Dests 5882 0 R >> endobj xref 0 5886 0000000000 65535 f 0000000015 00000 n 0000000225 00000 n 0000006733 00000 n 0000006753 00000 n 0000006786 00000 n 0000007840 00000 n 0000007859 00000 n 0000008107 00000 n 0000008126 00000 n 0001351595 00000 n 0001344825 00000 n 0000008318 00000 n 0000009272 00000 n 0000009292 00000 n 0000009486 00000 n 0000010383 00000 n 0000010403 00000 n 0000010597 00000 n 0000011121 00000 n 0000011141 00000 n 0000011335 00000 n 0000012077 00000 n 0000012097 00000 n 0000012291 00000 n 0000012913 00000 n 0000012933 00000 n 0000013127 00000 n 0000013854 00000 n 0000013874 00000 n 0000014068 00000 n 0000014771 00000 n 0000014791 00000 n 0000014985 00000 n 0000015542 00000 n 0000015562 00000 n 0000015756 00000 n 0000016505 00000 n 0000016525 00000 n 0000016719 00000 n 0000017451 00000 n 0000017471 00000 n 0000017665 00000 n 0000018589 00000 n 0000018609 00000 n 0000018803 00000 n 0000019454 00000 n 0000019474 00000 n 0000019668 00000 n 0000020208 00000 n 0000020228 00000 n 0000020422 00000 n 0000021036 00000 n 0000021056 00000 n 0000021250 00000 n 0000021988 00000 n 0000022008 00000 n 0000022202 00000 n 0000022756 00000 n 0000022776 00000 n 0000022970 00000 n 0000023649 00000 n 0000023669 00000 n 0000023863 00000 n 0000024423 00000 n 0000024443 00000 n 0000024637 00000 n 0000025198 00000 n 0000025218 00000 n 0000025412 00000 n 0000026037 00000 n 0000026057 00000 n 0000026251 00000 n 0000026803 00000 n 0000026823 00000 n 0000027017 00000 n 0000027621 00000 n 0000027641 00000 n 0000027835 00000 n 0000028422 00000 n 0000028442 00000 n 0000028636 00000 n 0000029205 00000 n 0000029225 00000 n 0000029419 00000 n 0000030076 00000 n 0000030096 00000 n 0000030290 00000 n 0000030862 00000 n 0000030882 00000 n 0000031076 00000 n 0000031839 00000 n 0000031859 00000 n 0000032053 00000 n 0000032696 00000 n 0000032716 00000 n 0000032910 00000 n 0000033487 00000 n 0000033507 00000 n 0000033701 00000 n 0000034355 00000 n 0000034376 00000 n 0000034571 00000 n 0000035230 00000 n 0000035251 00000 n 0000035447 00000 n 0000036105 00000 n 0000036126 00000 n 0000036322 00000 n 0000036984 00000 n 0000037005 00000 n 0000037201 00000 n 0000037778 00000 n 0000037799 00000 n 0000037995 00000 n 0000038678 00000 n 0000038699 00000 n 0000038895 00000 n 0000039630 00000 n 0000039651 00000 n 0000039847 00000 n 0000040507 00000 n 0000040528 00000 n 0000040724 00000 n 0000041375 00000 n 0000041396 00000 n 0000041592 00000 n 0000042159 00000 n 0000042180 00000 n 0000042376 00000 n 0000042931 00000 n 0000042952 00000 n 0000043148 00000 n 0000043697 00000 n 0000043718 00000 n 0000043914 00000 n 0000044487 00000 n 0000044508 00000 n 0000044704 00000 n 0000045277 00000 n 0000045298 00000 n 0000045494 00000 n 0000046158 00000 n 0000046179 00000 n 0000046375 00000 n 0000047088 00000 n 0000047109 00000 n 0000047305 00000 n 0000047916 00000 n 0000047937 00000 n 0000048133 00000 n 0000048799 00000 n 0000048820 00000 n 0000049016 00000 n 0000049700 00000 n 0000049721 00000 n 0000049917 00000 n 0000050485 00000 n 0000050506 00000 n 0000050702 00000 n 0000051387 00000 n 0000051408 00000 n 0000051604 00000 n 0000052291 00000 n 0000052312 00000 n 0000052508 00000 n 0000053088 00000 n 0000053109 00000 n 0000053305 00000 n 0000053384 00000 n 0000053524 00000 n 0000053666 00000 n 0000053745 00000 n 0000053885 00000 n 0000054027 00000 n 0000054106 00000 n 0000054245 00000 n 0000054383 00000 n 0000054462 00000 n 0000054601 00000 n 0000054743 00000 n 0000054822 00000 n 0000054960 00000 n 0000055102 00000 n 0000055181 00000 n 0000055319 00000 n 0000055457 00000 n 0000055536 00000 n 0000055675 00000 n 0000055813 00000 n 0000055892 00000 n 0000056031 00000 n 0000056173 00000 n 0000056252 00000 n 0000056391 00000 n 0000056529 00000 n 0000056608 00000 n 0000056747 00000 n 0000056885 00000 n 0000056964 00000 n 0000057103 00000 n 0000057245 00000 n 0000057324 00000 n 0000057463 00000 n 0000057601 00000 n 0000057680 00000 n 0000057819 00000 n 0000057961 00000 n 0000058040 00000 n 0000058179 00000 n 0000058321 00000 n 0000058400 00000 n 0000058539 00000 n 0000058681 00000 n 0000058760 00000 n 0000058898 00000 n 0000059040 00000 n 0000059119 00000 n 0000059258 00000 n 0000059400 00000 n 0000059479 00000 n 0000059618 00000 n 0000059756 00000 n 0000059835 00000 n 0000059974 00000 n 0000060116 00000 n 0000060195 00000 n 0000060334 00000 n 0000060472 00000 n 0000060551 00000 n 0000060690 00000 n 0000060832 00000 n 0000060911 00000 n 0000061050 00000 n 0000061192 00000 n 0000061271 00000 n 0000061410 00000 n 0000061548 00000 n 0000061627 00000 n 0000061766 00000 n 0000061904 00000 n 0000061983 00000 n 0000062122 00000 n 0000062260 00000 n 0000062339 00000 n 0000062478 00000 n 0000062616 00000 n 0000062695 00000 n 0000062834 00000 n 0000062972 00000 n 0000063051 00000 n 0000063190 00000 n 0000063332 00000 n 0000063412 00000 n 0000063550 00000 n 0000063692 00000 n 0000063772 00000 n 0000063910 00000 n 0000064052 00000 n 0000064132 00000 n 0000064271 00000 n 0000064413 00000 n 0000064493 00000 n 0000064632 00000 n 0000064770 00000 n 0000064850 00000 n 0000064989 00000 n 0000065131 00000 n 0000065211 00000 n 0000065350 00000 n 0000065488 00000 n 0000065568 00000 n 0000065707 00000 n 0000065845 00000 n 0000065925 00000 n 0000066064 00000 n 0000066202 00000 n 0000066282 00000 n 0000066421 00000 n 0000066563 00000 n 0000066643 00000 n 0000066782 00000 n 0000066920 00000 n 0000067000 00000 n 0000067139 00000 n 0000067281 00000 n 0000067361 00000 n 0000067500 00000 n 0000067638 00000 n 0000067718 00000 n 0000067857 00000 n 0000067995 00000 n 0000068075 00000 n 0000068214 00000 n 0000068352 00000 n 0000068432 00000 n 0000068571 00000 n 0000068713 00000 n 0000068793 00000 n 0000068932 00000 n 0000069070 00000 n 0000069150 00000 n 0000069289 00000 n 0000069427 00000 n 0000069507 00000 n 0000069646 00000 n 0000069788 00000 n 0000069868 00000 n 0000070007 00000 n 0000070145 00000 n 0000070225 00000 n 0000070364 00000 n 0000070502 00000 n 0000070582 00000 n 0000070721 00000 n 0000070863 00000 n 0000070943 00000 n 0000071081 00000 n 0000071218 00000 n 0000071298 00000 n 0000071435 00000 n 0000071571 00000 n 0000086510 00000 n 0000086533 00000 n 0000087370 00000 n 0000087584 00000 n 0000088499 00000 n 0000088520 00000 n 0000088716 00000 n 0000089608 00000 n 0000089629 00000 n 0000089825 00000 n 0000090776 00000 n 0000090797 00000 n 0000090993 00000 n 0000091863 00000 n 0000091884 00000 n 0000092080 00000 n 0000093009 00000 n 0000093030 00000 n 0000093226 00000 n 0000094147 00000 n 0000094168 00000 n 0000094364 00000 n 0000095256 00000 n 0000095277 00000 n 0000095473 00000 n 0000096394 00000 n 0000096415 00000 n 0000096611 00000 n 0000097635 00000 n 0000097656 00000 n 0000097852 00000 n 0000098442 00000 n 0000098463 00000 n 0000098659 00000 n 0000099363 00000 n 0000099384 00000 n 0000099580 00000 n 0000100909 00000 n 0000100931 00000 n 0000101127 00000 n 0000101911 00000 n 0000101932 00000 n 0000102128 00000 n 0000102998 00000 n 0000103019 00000 n 0000103215 00000 n 0000104103 00000 n 0000104124 00000 n 0000104320 00000 n 0000105111 00000 n 0000105132 00000 n 0000105328 00000 n 0000105914 00000 n 0000105935 00000 n 0000106131 00000 n 0000106717 00000 n 0000106738 00000 n 0000106934 00000 n 0000107577 00000 n 0000107598 00000 n 0000107794 00000 n 0000108873 00000 n 0000108895 00000 n 0000109091 00000 n 0000110278 00000 n 0000110300 00000 n 0000110496 00000 n 0000111691 00000 n 0000111713 00000 n 0000111909 00000 n 0000113204 00000 n 0000113226 00000 n 0000113422 00000 n 0000114609 00000 n 0000114631 00000 n 0000114827 00000 n 0000116024 00000 n 0000116046 00000 n 0000116242 00000 n 0000117046 00000 n 0000117067 00000 n 0000117263 00000 n 0000117818 00000 n 0000117839 00000 n 0000118035 00000 n 0000118636 00000 n 0000118657 00000 n 0000118853 00000 n 0000119443 00000 n 0000119464 00000 n 0000119660 00000 n 0000120314 00000 n 0000120335 00000 n 0000120531 00000 n 0000121392 00000 n 0000121413 00000 n 0000121609 00000 n 0000122287 00000 n 0000122308 00000 n 0000122504 00000 n 0000123222 00000 n 0000123243 00000 n 0000123439 00000 n 0000124126 00000 n 0000124147 00000 n 0000124343 00000 n 0000125026 00000 n 0000125047 00000 n 0000125243 00000 n 0000126068 00000 n 0000126089 00000 n 0000126285 00000 n 0000126990 00000 n 0000127011 00000 n 0000127207 00000 n 0000127914 00000 n 0000127935 00000 n 0000128131 00000 n 0000128715 00000 n 0000128736 00000 n 0000128932 00000 n 0000129593 00000 n 0000129614 00000 n 0000129810 00000 n 0000130361 00000 n 0000130382 00000 n 0000130578 00000 n 0000131168 00000 n 0000131189 00000 n 0000131385 00000 n 0000131974 00000 n 0000131995 00000 n 0000132191 00000 n 0000132732 00000 n 0000132753 00000 n 0000132949 00000 n 0000133524 00000 n 0000133545 00000 n 0000133741 00000 n 0000134353 00000 n 0000134374 00000 n 0000134570 00000 n 0000135154 00000 n 0000135175 00000 n 0000135371 00000 n 0000135983 00000 n 0000136004 00000 n 0000136200 00000 n 0000136776 00000 n 0000136797 00000 n 0000136993 00000 n 0000137589 00000 n 0000137610 00000 n 0000137806 00000 n 0000138400 00000 n 0000138421 00000 n 0000138617 00000 n 0000139231 00000 n 0000139252 00000 n 0000139448 00000 n 0000140062 00000 n 0000140083 00000 n 0000140279 00000 n 0000140894 00000 n 0000140915 00000 n 0000141111 00000 n 0000141191 00000 n 0000141326 00000 n 0000141464 00000 n 0000141544 00000 n 0000141679 00000 n 0000141813 00000 n 0000141893 00000 n 0000142028 00000 n 0000142162 00000 n 0000142242 00000 n 0000142377 00000 n 0000142515 00000 n 0000142595 00000 n 0000142730 00000 n 0000142868 00000 n 0000142948 00000 n 0000143083 00000 n 0000143221 00000 n 0000143301 00000 n 0000143436 00000 n 0000143570 00000 n 0000143650 00000 n 0000143785 00000 n 0000143919 00000 n 0000143999 00000 n 0000144134 00000 n 0000144268 00000 n 0000144348 00000 n 0000144483 00000 n 0000144617 00000 n 0000144697 00000 n 0000144832 00000 n 0000144966 00000 n 0000145046 00000 n 0000145181 00000 n 0000145319 00000 n 0000145399 00000 n 0000145534 00000 n 0000145668 00000 n 0000145748 00000 n 0000145883 00000 n 0000146021 00000 n 0000146101 00000 n 0000146236 00000 n 0000146370 00000 n 0000146450 00000 n 0000146585 00000 n 0000146723 00000 n 0000146803 00000 n 0000146938 00000 n 0000147072 00000 n 0000147152 00000 n 0000147287 00000 n 0000147421 00000 n 0000147501 00000 n 0000147636 00000 n 0000147774 00000 n 0000147854 00000 n 0000147989 00000 n 0000148127 00000 n 0000148207 00000 n 0000148342 00000 n 0000148476 00000 n 0000148556 00000 n 0000148691 00000 n 0000148829 00000 n 0000148909 00000 n 0000149044 00000 n 0000149182 00000 n 0000149262 00000 n 0000149397 00000 n 0000149531 00000 n 0000149611 00000 n 0000149746 00000 n 0000149880 00000 n 0000149960 00000 n 0000150095 00000 n 0000150229 00000 n 0000150309 00000 n 0000150444 00000 n 0000150578 00000 n 0000150658 00000 n 0000150793 00000 n 0000150927 00000 n 0000151007 00000 n 0000151142 00000 n 0000151280 00000 n 0000151360 00000 n 0000151495 00000 n 0000151629 00000 n 0000151709 00000 n 0000151844 00000 n 0000151978 00000 n 0000152058 00000 n 0000152193 00000 n 0000152331 00000 n 0000152411 00000 n 0000152546 00000 n 0000152684 00000 n 0000152764 00000 n 0000152899 00000 n 0000153033 00000 n 0000153113 00000 n 0000153248 00000 n 0000153382 00000 n 0000153462 00000 n 0000153597 00000 n 0000153735 00000 n 0000153815 00000 n 0000153950 00000 n 0000154084 00000 n 0000154164 00000 n 0000154299 00000 n 0000154433 00000 n 0000154513 00000 n 0000154648 00000 n 0000154782 00000 n 0000154862 00000 n 0000154997 00000 n 0000155131 00000 n 0000155211 00000 n 0000155346 00000 n 0000155484 00000 n 0000155564 00000 n 0000155699 00000 n 0000155833 00000 n 0000155913 00000 n 0000156048 00000 n 0000156182 00000 n 0000156262 00000 n 0000156397 00000 n 0000156535 00000 n 0000156615 00000 n 0000156750 00000 n 0000156888 00000 n 0000156968 00000 n 0000157103 00000 n 0000157237 00000 n 0000157317 00000 n 0000157452 00000 n 0000157586 00000 n 0000157666 00000 n 0000157800 00000 n 0000157938 00000 n 0000158018 00000 n 0000158153 00000 n 0000158287 00000 n 0000158367 00000 n 0000158502 00000 n 0000158640 00000 n 0000158720 00000 n 0000158855 00000 n 0000158993 00000 n 0000159073 00000 n 0000159207 00000 n 0000159344 00000 n 0000159424 00000 n 0000159557 00000 n 0000159693 00000 n 0000159773 00000 n 0000159906 00000 n 0000160038 00000 n 0000174989 00000 n 0000175012 00000 n 0000175897 00000 n 0000176111 00000 n 0000176696 00000 n 0000176717 00000 n 0000176913 00000 n 0000177518 00000 n 0000177539 00000 n 0000177735 00000 n 0000178407 00000 n 0000178428 00000 n 0000178624 00000 n 0000179213 00000 n 0000179234 00000 n 0000179430 00000 n 0000180013 00000 n 0000180034 00000 n 0000180230 00000 n 0000180935 00000 n 0000180956 00000 n 0000181152 00000 n 0000181736 00000 n 0000181757 00000 n 0000181953 00000 n 0000182536 00000 n 0000182557 00000 n 0000182753 00000 n 0000183312 00000 n 0000183333 00000 n 0000183529 00000 n 0000184116 00000 n 0000184137 00000 n 0000184333 00000 n 0000184922 00000 n 0000184943 00000 n 0000185139 00000 n 0000185771 00000 n 0000185792 00000 n 0000185988 00000 n 0000186838 00000 n 0000186859 00000 n 0000187055 00000 n 0000187993 00000 n 0000188014 00000 n 0000188210 00000 n 0000189144 00000 n 0000189165 00000 n 0000189361 00000 n 0000189918 00000 n 0000189939 00000 n 0000190135 00000 n 0000190749 00000 n 0000190770 00000 n 0000190966 00000 n 0000191631 00000 n 0000191652 00000 n 0000191848 00000 n 0000192436 00000 n 0000192457 00000 n 0000192653 00000 n 0000193408 00000 n 0000193429 00000 n 0000193625 00000 n 0000194194 00000 n 0000194215 00000 n 0000194411 00000 n 0000195218 00000 n 0000195239 00000 n 0000195435 00000 n 0000196345 00000 n 0000196366 00000 n 0000196562 00000 n 0000197242 00000 n 0000197263 00000 n 0000197459 00000 n 0000198179 00000 n 0000198200 00000 n 0000198396 00000 n 0000199084 00000 n 0000199105 00000 n 0000199301 00000 n 0000199988 00000 n 0000200009 00000 n 0000200205 00000 n 0000200765 00000 n 0000200786 00000 n 0000200982 00000 n 0000201598 00000 n 0000201619 00000 n 0000201815 00000 n 0000202539 00000 n 0000202560 00000 n 0000202756 00000 n 0000203477 00000 n 0000203498 00000 n 0000203694 00000 n 0000204409 00000 n 0000204430 00000 n 0000204626 00000 n 0000205345 00000 n 0000205366 00000 n 0000205562 00000 n 0000206150 00000 n 0000206171 00000 n 0000206367 00000 n 0000207106 00000 n 0000207127 00000 n 0000207323 00000 n 0000207902 00000 n 0000207923 00000 n 0000208119 00000 n 0000208695 00000 n 0000208716 00000 n 0000208912 00000 n 0000209486 00000 n 0000209507 00000 n 0000209703 00000 n 0000210281 00000 n 0000210302 00000 n 0000210498 00000 n 0000211185 00000 n 0000211206 00000 n 0000211402 00000 n 0000211971 00000 n 0000211992 00000 n 0000212188 00000 n 0000212878 00000 n 0000212899 00000 n 0000213095 00000 n 0000213785 00000 n 0000213806 00000 n 0000214002 00000 n 0000214688 00000 n 0000214709 00000 n 0000214905 00000 n 0000215596 00000 n 0000215617 00000 n 0000215813 00000 n 0000216462 00000 n 0000216483 00000 n 0000216679 00000 n 0000217328 00000 n 0000217349 00000 n 0000217545 00000 n 0000218187 00000 n 0000218208 00000 n 0000218404 00000 n 0000219080 00000 n 0000219101 00000 n 0000219297 00000 n 0000219912 00000 n 0000219933 00000 n 0000220129 00000 n 0000220745 00000 n 0000220766 00000 n 0000220962 00000 n 0000221440 00000 n 0000221461 00000 n 0000221657 00000 n 0000223329 00000 n 0000223351 00000 n 0000223547 00000 n 0000224488 00000 n 0000224509 00000 n 0000224705 00000 n 0000224785 00000 n 0000224920 00000 n 0000225058 00000 n 0000225138 00000 n 0000225273 00000 n 0000225407 00000 n 0000225487 00000 n 0000225622 00000 n 0000225756 00000 n 0000225836 00000 n 0000225971 00000 n 0000226105 00000 n 0000226185 00000 n 0000226320 00000 n 0000226458 00000 n 0000226538 00000 n 0000226673 00000 n 0000226811 00000 n 0000226891 00000 n 0000227026 00000 n 0000227164 00000 n 0000227244 00000 n 0000227379 00000 n 0000227513 00000 n 0000227593 00000 n 0000227728 00000 n 0000227862 00000 n 0000227942 00000 n 0000228077 00000 n 0000228211 00000 n 0000228291 00000 n 0000228426 00000 n 0000228560 00000 n 0000228640 00000 n 0000228775 00000 n 0000228913 00000 n 0000228993 00000 n 0000229128 00000 n 0000229262 00000 n 0000229342 00000 n 0000229476 00000 n 0000229610 00000 n 0000229690 00000 n 0000229825 00000 n 0000229963 00000 n 0000230043 00000 n 0000230178 00000 n 0000230316 00000 n 0000230396 00000 n 0000230531 00000 n 0000230665 00000 n 0000230745 00000 n 0000230880 00000 n 0000231014 00000 n 0000231094 00000 n 0000231229 00000 n 0000231367 00000 n 0000231447 00000 n 0000231582 00000 n 0000231720 00000 n 0000231800 00000 n 0000231935 00000 n 0000232069 00000 n 0000232149 00000 n 0000232284 00000 n 0000232422 00000 n 0000232502 00000 n 0000232637 00000 n 0000232771 00000 n 0000232851 00000 n 0000232986 00000 n 0000233120 00000 n 0000233200 00000 n 0000233335 00000 n 0000233473 00000 n 0000233553 00000 n 0000233688 00000 n 0000233822 00000 n 0000233902 00000 n 0000234037 00000 n 0000234171 00000 n 0000234251 00000 n 0000234387 00000 n 0000234525 00000 n 0000234605 00000 n 0000234740 00000 n 0000234874 00000 n 0000234954 00000 n 0000235089 00000 n 0000235223 00000 n 0000235303 00000 n 0000235438 00000 n 0000235572 00000 n 0000235652 00000 n 0000235787 00000 n 0000235921 00000 n 0000236001 00000 n 0000236136 00000 n 0000236270 00000 n 0000236350 00000 n 0000236485 00000 n 0000236623 00000 n 0000236703 00000 n 0000236837 00000 n 0000236971 00000 n 0000237051 00000 n 0000237186 00000 n 0000237320 00000 n 0000237400 00000 n 0000237535 00000 n 0000237673 00000 n 0000237753 00000 n 0000237888 00000 n 0000238022 00000 n 0000238102 00000 n 0000238237 00000 n 0000238375 00000 n 0000238455 00000 n 0000238590 00000 n 0000238724 00000 n 0000238804 00000 n 0000238939 00000 n 0000239073 00000 n 0000239153 00000 n 0000239288 00000 n 0000239426 00000 n 0000239506 00000 n 0000239641 00000 n 0000239775 00000 n 0000239855 00000 n 0000239990 00000 n 0000240124 00000 n 0000240204 00000 n 0000240339 00000 n 0000240473 00000 n 0000240553 00000 n 0000240688 00000 n 0000240822 00000 n 0000240902 00000 n 0000241037 00000 n 0000241175 00000 n 0000241255 00000 n 0000241390 00000 n 0000241528 00000 n 0000241608 00000 n 0000241743 00000 n 0000241881 00000 n 0000241961 00000 n 0000242096 00000 n 0000242234 00000 n 0000242314 00000 n 0000242449 00000 n 0000242587 00000 n 0000242667 00000 n 0000242802 00000 n 0000242939 00000 n 0000243019 00000 n 0000243152 00000 n 0000243284 00000 n 0000243364 00000 n 0000243497 00000 n 0000243629 00000 n 0000258408 00000 n 0000258431 00000 n 0000259316 00000 n 0000259530 00000 n 0000260124 00000 n 0000260145 00000 n 0000260341 00000 n 0000260919 00000 n 0000260940 00000 n 0000261136 00000 n 0000261519 00000 n 0000261540 00000 n 0000261736 00000 n 0000262539 00000 n 0000262560 00000 n 0000262756 00000 n 0000263232 00000 n 0000263253 00000 n 0000263449 00000 n 0000264116 00000 n 0000264137 00000 n 0000264333 00000 n 0000265285 00000 n 0000265307 00000 n 0000265504 00000 n 0000266031 00000 n 0000266053 00000 n 0000266251 00000 n 0000266937 00000 n 0000266959 00000 n 0000267157 00000 n 0000267963 00000 n 0000267985 00000 n 0000268183 00000 n 0000268979 00000 n 0000269001 00000 n 0000269199 00000 n 0000269986 00000 n 0000270008 00000 n 0000270206 00000 n 0000271011 00000 n 0000271033 00000 n 0000271231 00000 n 0000272106 00000 n 0000272128 00000 n 0000272326 00000 n 0000273117 00000 n 0000273139 00000 n 0000273337 00000 n 0000273947 00000 n 0000273969 00000 n 0000274167 00000 n 0000274800 00000 n 0000274822 00000 n 0000275020 00000 n 0000275645 00000 n 0000275667 00000 n 0000275865 00000 n 0000276559 00000 n 0000276581 00000 n 0000276779 00000 n 0000277491 00000 n 0000277513 00000 n 0000277711 00000 n 0000278421 00000 n 0000278443 00000 n 0000278641 00000 n 0000279360 00000 n 0000279382 00000 n 0000279580 00000 n 0000280237 00000 n 0000280259 00000 n 0000280457 00000 n 0000281067 00000 n 0000281089 00000 n 0000281287 00000 n 0000281898 00000 n 0000281920 00000 n 0000282118 00000 n 0000282762 00000 n 0000282784 00000 n 0000282982 00000 n 0000283713 00000 n 0000283735 00000 n 0000283933 00000 n 0000284651 00000 n 0000284673 00000 n 0000284871 00000 n 0000285601 00000 n 0000285623 00000 n 0000285821 00000 n 0000286565 00000 n 0000286587 00000 n 0000286785 00000 n 0000287268 00000 n 0000287290 00000 n 0000287488 00000 n 0000288037 00000 n 0000288059 00000 n 0000288257 00000 n 0000288865 00000 n 0000288887 00000 n 0000289085 00000 n 0000289633 00000 n 0000289655 00000 n 0000289853 00000 n 0000290598 00000 n 0000290620 00000 n 0000290818 00000 n 0000291566 00000 n 0000291588 00000 n 0000291786 00000 n 0000292393 00000 n 0000292415 00000 n 0000292613 00000 n 0000293425 00000 n 0000293447 00000 n 0000293645 00000 n 0000294346 00000 n 0000294368 00000 n 0000294566 00000 n 0000295290 00000 n 0000295312 00000 n 0000295510 00000 n 0000296320 00000 n 0000296342 00000 n 0000296540 00000 n 0000297285 00000 n 0000297307 00000 n 0000297505 00000 n 0000297960 00000 n 0000297982 00000 n 0000298180 00000 n 0000298749 00000 n 0000298771 00000 n 0000298969 00000 n 0000299640 00000 n 0000299662 00000 n 0000299860 00000 n 0000300521 00000 n 0000300543 00000 n 0000300741 00000 n 0000301460 00000 n 0000301482 00000 n 0000301680 00000 n 0000302233 00000 n 0000302255 00000 n 0000302453 00000 n 0000303021 00000 n 0000303043 00000 n 0000303241 00000 n 0000303878 00000 n 0000303900 00000 n 0000304098 00000 n 0000304647 00000 n 0000304669 00000 n 0000304867 00000 n 0000305426 00000 n 0000305448 00000 n 0000305646 00000 n 0000306222 00000 n 0000306244 00000 n 0000306442 00000 n 0000306991 00000 n 0000307013 00000 n 0000307211 00000 n 0000307292 00000 n 0000307429 00000 n 0000307569 00000 n 0000307650 00000 n 0000307787 00000 n 0000307923 00000 n 0000308004 00000 n 0000308142 00000 n 0000308282 00000 n 0000308363 00000 n 0000308500 00000 n 0000308636 00000 n 0000308717 00000 n 0000308855 00000 n 0000308995 00000 n 0000309076 00000 n 0000309213 00000 n 0000309349 00000 n 0000309431 00000 n 0000309568 00000 n 0000309704 00000 n 0000309786 00000 n 0000309923 00000 n 0000310063 00000 n 0000310145 00000 n 0000310282 00000 n 0000310418 00000 n 0000310500 00000 n 0000310637 00000 n 0000310777 00000 n 0000310859 00000 n 0000310996 00000 n 0000311132 00000 n 0000311214 00000 n 0000311351 00000 n 0000311487 00000 n 0000311569 00000 n 0000311706 00000 n 0000311842 00000 n 0000311924 00000 n 0000312061 00000 n 0000312201 00000 n 0000312283 00000 n 0000312420 00000 n 0000312560 00000 n 0000312642 00000 n 0000312779 00000 n 0000312919 00000 n 0000313001 00000 n 0000313138 00000 n 0000313278 00000 n 0000313360 00000 n 0000313497 00000 n 0000313633 00000 n 0000313715 00000 n 0000313852 00000 n 0000313992 00000 n 0000314074 00000 n 0000314211 00000 n 0000314347 00000 n 0000314429 00000 n 0000314566 00000 n 0000314702 00000 n 0000314784 00000 n 0000314921 00000 n 0000315057 00000 n 0000315139 00000 n 0000315276 00000 n 0000315416 00000 n 0000315498 00000 n 0000315635 00000 n 0000315771 00000 n 0000315853 00000 n 0000315990 00000 n 0000316126 00000 n 0000316208 00000 n 0000316345 00000 n 0000316481 00000 n 0000316563 00000 n 0000316700 00000 n 0000316840 00000 n 0000316922 00000 n 0000317058 00000 n 0000317194 00000 n 0000317276 00000 n 0000317413 00000 n 0000317553 00000 n 0000317635 00000 n 0000317771 00000 n 0000317911 00000 n 0000317993 00000 n 0000318131 00000 n 0000318271 00000 n 0000318353 00000 n 0000318490 00000 n 0000318630 00000 n 0000318712 00000 n 0000318849 00000 n 0000318989 00000 n 0000319071 00000 n 0000319208 00000 n 0000319344 00000 n 0000319426 00000 n 0000319563 00000 n 0000319703 00000 n 0000319785 00000 n 0000319922 00000 n 0000320062 00000 n 0000320144 00000 n 0000320280 00000 n 0000320420 00000 n 0000320502 00000 n 0000320639 00000 n 0000320775 00000 n 0000320857 00000 n 0000320994 00000 n 0000321134 00000 n 0000321216 00000 n 0000321353 00000 n 0000321489 00000 n 0000321571 00000 n 0000321708 00000 n 0000321848 00000 n 0000321930 00000 n 0000322067 00000 n 0000322207 00000 n 0000322289 00000 n 0000322427 00000 n 0000322567 00000 n 0000322649 00000 n 0000322786 00000 n 0000322926 00000 n 0000323008 00000 n 0000323145 00000 n 0000323285 00000 n 0000323367 00000 n 0000323504 00000 n 0000323644 00000 n 0000323726 00000 n 0000323863 00000 n 0000324003 00000 n 0000324085 00000 n 0000324222 00000 n 0000324358 00000 n 0000324440 00000 n 0000324577 00000 n 0000324717 00000 n 0000324799 00000 n 0000324935 00000 n 0000325075 00000 n 0000325157 00000 n 0000325294 00000 n 0000325430 00000 n 0000325512 00000 n 0000325647 00000 n 0000325786 00000 n 0000325868 00000 n 0000326003 00000 n 0000326137 00000 n 0000326219 00000 n 0000326354 00000 n 0000326492 00000 n 0000341241 00000 n 0000341265 00000 n 0000342259 00000 n 0000342476 00000 n 0000343035 00000 n 0000343057 00000 n 0000343255 00000 n 0000343886 00000 n 0000343908 00000 n 0000344106 00000 n 0000344696 00000 n 0000344718 00000 n 0000344916 00000 n 0000345521 00000 n 0000345543 00000 n 0000345741 00000 n 0000346377 00000 n 0000346399 00000 n 0000346597 00000 n 0000347085 00000 n 0000347107 00000 n 0000347305 00000 n 0000348712 00000 n 0000348735 00000 n 0000348933 00000 n 0000350426 00000 n 0000350449 00000 n 0000350647 00000 n 0000352215 00000 n 0000352238 00000 n 0000352436 00000 n 0000353945 00000 n 0000353968 00000 n 0000354166 00000 n 0000355675 00000 n 0000355698 00000 n 0000355896 00000 n 0000356580 00000 n 0000356602 00000 n 0000356800 00000 n 0000357549 00000 n 0000357571 00000 n 0000357769 00000 n 0000358521 00000 n 0000358543 00000 n 0000358741 00000 n 0000359424 00000 n 0000359446 00000 n 0000359644 00000 n 0000360243 00000 n 0000360265 00000 n 0000360463 00000 n 0000361114 00000 n 0000361136 00000 n 0000361334 00000 n 0000362024 00000 n 0000362046 00000 n 0000362244 00000 n 0000362964 00000 n 0000362986 00000 n 0000363184 00000 n 0000363902 00000 n 0000363924 00000 n 0000364122 00000 n 0000364877 00000 n 0000364899 00000 n 0000365097 00000 n 0000365729 00000 n 0000365751 00000 n 0000365949 00000 n 0000366664 00000 n 0000366686 00000 n 0000366884 00000 n 0000367496 00000 n 0000367518 00000 n 0000367716 00000 n 0000368134 00000 n 0000368156 00000 n 0000368354 00000 n 0000369200 00000 n 0000369222 00000 n 0000369420 00000 n 0000370328 00000 n 0000370350 00000 n 0000370548 00000 n 0000371372 00000 n 0000371394 00000 n 0000371592 00000 n 0000372248 00000 n 0000372270 00000 n 0000372468 00000 n 0000373325 00000 n 0000373347 00000 n 0000373545 00000 n 0000374206 00000 n 0000374228 00000 n 0000374426 00000 n 0000374883 00000 n 0000374905 00000 n 0000375103 00000 n 0000375663 00000 n 0000375685 00000 n 0000375883 00000 n 0000376437 00000 n 0000376459 00000 n 0000376657 00000 n 0000377253 00000 n 0000377275 00000 n 0000377473 00000 n 0000378021 00000 n 0000378043 00000 n 0000378241 00000 n 0000378853 00000 n 0000378875 00000 n 0000379073 00000 n 0000379731 00000 n 0000379753 00000 n 0000379951 00000 n 0000380544 00000 n 0000380566 00000 n 0000380764 00000 n 0000381372 00000 n 0000381394 00000 n 0000381592 00000 n 0000382241 00000 n 0000382263 00000 n 0000382461 00000 n 0000383054 00000 n 0000383076 00000 n 0000383274 00000 n 0000383869 00000 n 0000383891 00000 n 0000384089 00000 n 0000384568 00000 n 0000384590 00000 n 0000384788 00000 n 0000385612 00000 n 0000385634 00000 n 0000385832 00000 n 0000386682 00000 n 0000386704 00000 n 0000386902 00000 n 0000387541 00000 n 0000387563 00000 n 0000387761 00000 n 0000388400 00000 n 0000388422 00000 n 0000388620 00000 n 0000389190 00000 n 0000389212 00000 n 0000389410 00000 n 0000389941 00000 n 0000389963 00000 n 0000390161 00000 n 0000390754 00000 n 0000390776 00000 n 0000390974 00000 n 0000391564 00000 n 0000391586 00000 n 0000391784 00000 n 0000392210 00000 n 0000392232 00000 n 0000392430 00000 n 0000393019 00000 n 0000393041 00000 n 0000393239 00000 n 0000393321 00000 n 0000393458 00000 n 0000393594 00000 n 0000393676 00000 n 0000393813 00000 n 0000393949 00000 n 0000394031 00000 n 0000394168 00000 n 0000394308 00000 n 0000394390 00000 n 0000394527 00000 n 0000394667 00000 n 0000394749 00000 n 0000394886 00000 n 0000395022 00000 n 0000395104 00000 n 0000395242 00000 n 0000395382 00000 n 0000395464 00000 n 0000395601 00000 n 0000395737 00000 n 0000395819 00000 n 0000395956 00000 n 0000396092 00000 n 0000396174 00000 n 0000396311 00000 n 0000396451 00000 n 0000396533 00000 n 0000396669 00000 n 0000396809 00000 n 0000396891 00000 n 0000397028 00000 n 0000397168 00000 n 0000397250 00000 n 0000397387 00000 n 0000397523 00000 n 0000397605 00000 n 0000397742 00000 n 0000397878 00000 n 0000397960 00000 n 0000398097 00000 n 0000398237 00000 n 0000398319 00000 n 0000398456 00000 n 0000398596 00000 n 0000398678 00000 n 0000398815 00000 n 0000398951 00000 n 0000399033 00000 n 0000399170 00000 n 0000399306 00000 n 0000399388 00000 n 0000399525 00000 n 0000399661 00000 n 0000399743 00000 n 0000399880 00000 n 0000400020 00000 n 0000400102 00000 n 0000400239 00000 n 0000400375 00000 n 0000400457 00000 n 0000400594 00000 n 0000400730 00000 n 0000400812 00000 n 0000400949 00000 n 0000401085 00000 n 0000401167 00000 n 0000401304 00000 n 0000401444 00000 n 0000401526 00000 n 0000401663 00000 n 0000401803 00000 n 0000401885 00000 n 0000402023 00000 n 0000402163 00000 n 0000402245 00000 n 0000402382 00000 n 0000402522 00000 n 0000402604 00000 n 0000402741 00000 n 0000402877 00000 n 0000402959 00000 n 0000403096 00000 n 0000403236 00000 n 0000403318 00000 n 0000403455 00000 n 0000403595 00000 n 0000403677 00000 n 0000403814 00000 n 0000403950 00000 n 0000404032 00000 n 0000404169 00000 n 0000404309 00000 n 0000404391 00000 n 0000404528 00000 n 0000404668 00000 n 0000404750 00000 n 0000404887 00000 n 0000405027 00000 n 0000405109 00000 n 0000405246 00000 n 0000405382 00000 n 0000405464 00000 n 0000405601 00000 n 0000405737 00000 n 0000405819 00000 n 0000405956 00000 n 0000406096 00000 n 0000406178 00000 n 0000406314 00000 n 0000406454 00000 n 0000406536 00000 n 0000406673 00000 n 0000406809 00000 n 0000406891 00000 n 0000407028 00000 n 0000407168 00000 n 0000407250 00000 n 0000407387 00000 n 0000407527 00000 n 0000407609 00000 n 0000407746 00000 n 0000407882 00000 n 0000407964 00000 n 0000408101 00000 n 0000408241 00000 n 0000408323 00000 n 0000408460 00000 n 0000408596 00000 n 0000408678 00000 n 0000408816 00000 n 0000408956 00000 n 0000409038 00000 n 0000409175 00000 n 0000409311 00000 n 0000409393 00000 n 0000409530 00000 n 0000409666 00000 n 0000409748 00000 n 0000409885 00000 n 0000410025 00000 n 0000410107 00000 n 0000410244 00000 n 0000410384 00000 n 0000410466 00000 n 0000410603 00000 n 0000410743 00000 n 0000410825 00000 n 0000410961 00000 n 0000411097 00000 n 0000411179 00000 n 0000411315 00000 n 0000411455 00000 n 0000411537 00000 n 0000411673 00000 n 0000411808 00000 n 0000411890 00000 n 0000412026 00000 n 0000412164 00000 n 0000412246 00000 n 0000412380 00000 n 0000412514 00000 n 0000427184 00000 n 0000427208 00000 n 0000428202 00000 n 0000428419 00000 n 0000428958 00000 n 0000428980 00000 n 0000429178 00000 n 0000429721 00000 n 0000429743 00000 n 0000429941 00000 n 0000430481 00000 n 0000430503 00000 n 0000430701 00000 n 0000431257 00000 n 0000431279 00000 n 0000431477 00000 n 0000432016 00000 n 0000432038 00000 n 0000432236 00000 n 0000432779 00000 n 0000432801 00000 n 0000432999 00000 n 0000433539 00000 n 0000433561 00000 n 0000433759 00000 n 0000434368 00000 n 0000434390 00000 n 0000434588 00000 n 0000435178 00000 n 0000435200 00000 n 0000435398 00000 n 0000435961 00000 n 0000435983 00000 n 0000436181 00000 n 0000436716 00000 n 0000436738 00000 n 0000436936 00000 n 0000437489 00000 n 0000437511 00000 n 0000437709 00000 n 0000438356 00000 n 0000438378 00000 n 0000438576 00000 n 0000439154 00000 n 0000439176 00000 n 0000439374 00000 n 0000439909 00000 n 0000439931 00000 n 0000440129 00000 n 0000440730 00000 n 0000440752 00000 n 0000440950 00000 n 0000441487 00000 n 0000441509 00000 n 0000441707 00000 n 0000442268 00000 n 0000442290 00000 n 0000442488 00000 n 0000443116 00000 n 0000443138 00000 n 0000443336 00000 n 0000443989 00000 n 0000444011 00000 n 0000444209 00000 n 0000444752 00000 n 0000444774 00000 n 0000444972 00000 n 0000446295 00000 n 0000446318 00000 n 0000446516 00000 n 0000446902 00000 n 0000446924 00000 n 0000447122 00000 n 0000448428 00000 n 0000448451 00000 n 0000448649 00000 n 0000449039 00000 n 0000449061 00000 n 0000449259 00000 n 0000450555 00000 n 0000450578 00000 n 0000450776 00000 n 0000451168 00000 n 0000451190 00000 n 0000451388 00000 n 0000452737 00000 n 0000452760 00000 n 0000452958 00000 n 0000453572 00000 n 0000453594 00000 n 0000453792 00000 n 0000455090 00000 n 0000455113 00000 n 0000455311 00000 n 0000455975 00000 n 0000455997 00000 n 0000456195 00000 n 0000457502 00000 n 0000457525 00000 n 0000457723 00000 n 0000458336 00000 n 0000458358 00000 n 0000458556 00000 n 0000459878 00000 n 0000459901 00000 n 0000460099 00000 n 0000460724 00000 n 0000460746 00000 n 0000460944 00000 n 0000462257 00000 n 0000462280 00000 n 0000462478 00000 n 0000463104 00000 n 0000463126 00000 n 0000463324 00000 n 0000464660 00000 n 0000464683 00000 n 0000464881 00000 n 0000465421 00000 n 0000465443 00000 n 0000465641 00000 n 0000466981 00000 n 0000467004 00000 n 0000467202 00000 n 0000467759 00000 n 0000467781 00000 n 0000467979 00000 n 0000469322 00000 n 0000469345 00000 n 0000469543 00000 n 0000470054 00000 n 0000470076 00000 n 0000470274 00000 n 0000471645 00000 n 0000471668 00000 n 0000471866 00000 n 0000472418 00000 n 0000472440 00000 n 0000472638 00000 n 0000473930 00000 n 0000473953 00000 n 0000474151 00000 n 0000474734 00000 n 0000474756 00000 n 0000474954 00000 n 0000475609 00000 n 0000475631 00000 n 0000475829 00000 n 0000476586 00000 n 0000476608 00000 n 0000476806 00000 n 0000477556 00000 n 0000477578 00000 n 0000477776 00000 n 0000478437 00000 n 0000478459 00000 n 0000478657 00000 n 0000479311 00000 n 0000479333 00000 n 0000479531 00000 n 0000480213 00000 n 0000480235 00000 n 0000480433 00000 n 0000481335 00000 n 0000481357 00000 n 0000481555 00000 n 0000482221 00000 n 0000482243 00000 n 0000482441 00000 n 0000483092 00000 n 0000483114 00000 n 0000483312 00000 n 0000483957 00000 n 0000483979 00000 n 0000484177 00000 n 0000484975 00000 n 0000484997 00000 n 0000485195 00000 n 0000485795 00000 n 0000485817 00000 n 0000486015 00000 n 0000486771 00000 n 0000486793 00000 n 0000486991 00000 n 0000487674 00000 n 0000487696 00000 n 0000487894 00000 n 0000488630 00000 n 0000488652 00000 n 0000488850 00000 n 0000489483 00000 n 0000489505 00000 n 0000489703 00000 n 0000490423 00000 n 0000490445 00000 n 0000490643 00000 n 0000491340 00000 n 0000491362 00000 n 0000491560 00000 n 0000492292 00000 n 0000492314 00000 n 0000492512 00000 n 0000493120 00000 n 0000493142 00000 n 0000493340 00000 n 0000493422 00000 n 0000493559 00000 n 0000493699 00000 n 0000493781 00000 n 0000493918 00000 n 0000494058 00000 n 0000494140 00000 n 0000494277 00000 n 0000494417 00000 n 0000494499 00000 n 0000494636 00000 n 0000494776 00000 n 0000494858 00000 n 0000494995 00000 n 0000495135 00000 n 0000495217 00000 n 0000495354 00000 n 0000495494 00000 n 0000495576 00000 n 0000495713 00000 n 0000495853 00000 n 0000495935 00000 n 0000496072 00000 n 0000496208 00000 n 0000496290 00000 n 0000496427 00000 n 0000496567 00000 n 0000496649 00000 n 0000496786 00000 n 0000496922 00000 n 0000497004 00000 n 0000497141 00000 n 0000497281 00000 n 0000497363 00000 n 0000497500 00000 n 0000497640 00000 n 0000497722 00000 n 0000497859 00000 n 0000497995 00000 n 0000498077 00000 n 0000498214 00000 n 0000498350 00000 n 0000498432 00000 n 0000498569 00000 n 0000498709 00000 n 0000498791 00000 n 0000498928 00000 n 0000499068 00000 n 0000499150 00000 n 0000499287 00000 n 0000499423 00000 n 0000499505 00000 n 0000499642 00000 n 0000499778 00000 n 0000499860 00000 n 0000499997 00000 n 0000500137 00000 n 0000500219 00000 n 0000500356 00000 n 0000500492 00000 n 0000500574 00000 n 0000500711 00000 n 0000500847 00000 n 0000500929 00000 n 0000501066 00000 n 0000501202 00000 n 0000501284 00000 n 0000501421 00000 n 0000501561 00000 n 0000501643 00000 n 0000501780 00000 n 0000501916 00000 n 0000501998 00000 n 0000502135 00000 n 0000502271 00000 n 0000502353 00000 n 0000502490 00000 n 0000502630 00000 n 0000502712 00000 n 0000502849 00000 n 0000502985 00000 n 0000503067 00000 n 0000503203 00000 n 0000503339 00000 n 0000503421 00000 n 0000503557 00000 n 0000503693 00000 n 0000503775 00000 n 0000503912 00000 n 0000504048 00000 n 0000504130 00000 n 0000504267 00000 n 0000504407 00000 n 0000504489 00000 n 0000504626 00000 n 0000504766 00000 n 0000504848 00000 n 0000504985 00000 n 0000505121 00000 n 0000505203 00000 n 0000505340 00000 n 0000505476 00000 n 0000505558 00000 n 0000505695 00000 n 0000505831 00000 n 0000505913 00000 n 0000506049 00000 n 0000506189 00000 n 0000506271 00000 n 0000506408 00000 n 0000506548 00000 n 0000506630 00000 n 0000506767 00000 n 0000506903 00000 n 0000506985 00000 n 0000507122 00000 n 0000507258 00000 n 0000507340 00000 n 0000507477 00000 n 0000507617 00000 n 0000507699 00000 n 0000507835 00000 n 0000507971 00000 n 0000508053 00000 n 0000508190 00000 n 0000508326 00000 n 0000508408 00000 n 0000508544 00000 n 0000508680 00000 n 0000508762 00000 n 0000508899 00000 n 0000509039 00000 n 0000509121 00000 n 0000509258 00000 n 0000509394 00000 n 0000509476 00000 n 0000509613 00000 n 0000509749 00000 n 0000509831 00000 n 0000509968 00000 n 0000510104 00000 n 0000510186 00000 n 0000510323 00000 n 0000510459 00000 n 0000510541 00000 n 0000510678 00000 n 0000510818 00000 n 0000510900 00000 n 0000511037 00000 n 0000511173 00000 n 0000511255 00000 n 0000511392 00000 n 0000511532 00000 n 0000511614 00000 n 0000511750 00000 n 0000511885 00000 n 0000511967 00000 n 0000512102 00000 n 0000512236 00000 n 0000512318 00000 n 0000512452 00000 n 0000512590 00000 n 0000526888 00000 n 0000526912 00000 n 0000527906 00000 n 0000528123 00000 n 0000528925 00000 n 0000528947 00000 n 0000529145 00000 n 0000529890 00000 n 0000529912 00000 n 0000530110 00000 n 0000530861 00000 n 0000530883 00000 n 0000531081 00000 n 0000531716 00000 n 0000531738 00000 n 0000531936 00000 n 0000532560 00000 n 0000532582 00000 n 0000532780 00000 n 0000533574 00000 n 0000533596 00000 n 0000533794 00000 n 0000534403 00000 n 0000534425 00000 n 0000534623 00000 n 0000535383 00000 n 0000535405 00000 n 0000535603 00000 n 0000536347 00000 n 0000536369 00000 n 0000536567 00000 n 0000537318 00000 n 0000537340 00000 n 0000537538 00000 n 0000538319 00000 n 0000538341 00000 n 0000538539 00000 n 0000539293 00000 n 0000539315 00000 n 0000539513 00000 n 0000540143 00000 n 0000540165 00000 n 0000540363 00000 n 0000540783 00000 n 0000540805 00000 n 0000541003 00000 n 0000541557 00000 n 0000541579 00000 n 0000541777 00000 n 0000542323 00000 n 0000542345 00000 n 0000542543 00000 n 0000543094 00000 n 0000543116 00000 n 0000543314 00000 n 0000543905 00000 n 0000543927 00000 n 0000544125 00000 n 0000544670 00000 n 0000544692 00000 n 0000544890 00000 n 0000545464 00000 n 0000545486 00000 n 0000545684 00000 n 0000546229 00000 n 0000546251 00000 n 0000546449 00000 n 0000547004 00000 n 0000547026 00000 n 0000547224 00000 n 0000548008 00000 n 0000548030 00000 n 0000548228 00000 n 0000549081 00000 n 0000549103 00000 n 0000549301 00000 n 0000550078 00000 n 0000550100 00000 n 0000550298 00000 n 0000551157 00000 n 0000551179 00000 n 0000551377 00000 n 0000552089 00000 n 0000552111 00000 n 0000552309 00000 n 0000552934 00000 n 0000552956 00000 n 0000553154 00000 n 0000553878 00000 n 0000553900 00000 n 0000554098 00000 n 0000554896 00000 n 0000554918 00000 n 0000555116 00000 n 0000555902 00000 n 0000555924 00000 n 0000556122 00000 n 0000556974 00000 n 0000556996 00000 n 0000557194 00000 n 0000557971 00000 n 0000557993 00000 n 0000558191 00000 n 0000559038 00000 n 0000559060 00000 n 0000559258 00000 n 0000559985 00000 n 0000560007 00000 n 0000560205 00000 n 0000560973 00000 n 0000560995 00000 n 0000561193 00000 n 0000562038 00000 n 0000562060 00000 n 0000562258 00000 n 0000562991 00000 n 0000563013 00000 n 0000563211 00000 n 0000563986 00000 n 0000564008 00000 n 0000564206 00000 n 0000565042 00000 n 0000565064 00000 n 0000565262 00000 n 0000566039 00000 n 0000566061 00000 n 0000566259 00000 n 0000567111 00000 n 0000567133 00000 n 0000567331 00000 n 0000568102 00000 n 0000568124 00000 n 0000568322 00000 n 0000569179 00000 n 0000569201 00000 n 0000569399 00000 n 0000569882 00000 n 0000569904 00000 n 0000570102 00000 n 0000571018 00000 n 0000571040 00000 n 0000571238 00000 n 0000571851 00000 n 0000571873 00000 n 0000572071 00000 n 0000572731 00000 n 0000572753 00000 n 0000572951 00000 n 0000573618 00000 n 0000573640 00000 n 0000573838 00000 n 0000574500 00000 n 0000574522 00000 n 0000574720 00000 n 0000575387 00000 n 0000575409 00000 n 0000575607 00000 n 0000576477 00000 n 0000576499 00000 n 0000576697 00000 n 0000577576 00000 n 0000577598 00000 n 0000577796 00000 n 0000578385 00000 n 0000578407 00000 n 0000578605 00000 n 0000578687 00000 n 0000578824 00000 n 0000578960 00000 n 0000579042 00000 n 0000579179 00000 n 0000579319 00000 n 0000579401 00000 n 0000579538 00000 n 0000579678 00000 n 0000579760 00000 n 0000579897 00000 n 0000580033 00000 n 0000580115 00000 n 0000580252 00000 n 0000580388 00000 n 0000580470 00000 n 0000580607 00000 n 0000580743 00000 n 0000580825 00000 n 0000580962 00000 n 0000581098 00000 n 0000581180 00000 n 0000581316 00000 n 0000581452 00000 n 0000581534 00000 n 0000581671 00000 n 0000581807 00000 n 0000581889 00000 n 0000582026 00000 n 0000582166 00000 n 0000582248 00000 n 0000582385 00000 n 0000582521 00000 n 0000582603 00000 n 0000582740 00000 n 0000582876 00000 n 0000582958 00000 n 0000583095 00000 n 0000583235 00000 n 0000583317 00000 n 0000583455 00000 n 0000583595 00000 n 0000583677 00000 n 0000583814 00000 n 0000583954 00000 n 0000584036 00000 n 0000584173 00000 n 0000584309 00000 n 0000584391 00000 n 0000584528 00000 n 0000584668 00000 n 0000584750 00000 n 0000584887 00000 n 0000585027 00000 n 0000585109 00000 n 0000585246 00000 n 0000585386 00000 n 0000585468 00000 n 0000585605 00000 n 0000585745 00000 n 0000585827 00000 n 0000585964 00000 n 0000586100 00000 n 0000586182 00000 n 0000586319 00000 n 0000586455 00000 n 0000586537 00000 n 0000586674 00000 n 0000586814 00000 n 0000586896 00000 n 0000587033 00000 n 0000587173 00000 n 0000587255 00000 n 0000587392 00000 n 0000587528 00000 n 0000587610 00000 n 0000587747 00000 n 0000587887 00000 n 0000587969 00000 n 0000588106 00000 n 0000588246 00000 n 0000588328 00000 n 0000588465 00000 n 0000588605 00000 n 0000588687 00000 n 0000588824 00000 n 0000588960 00000 n 0000589042 00000 n 0000589179 00000 n 0000589319 00000 n 0000589401 00000 n 0000589538 00000 n 0000589674 00000 n 0000589756 00000 n 0000589892 00000 n 0000590032 00000 n 0000590114 00000 n 0000590251 00000 n 0000590387 00000 n 0000590469 00000 n 0000590606 00000 n 0000590746 00000 n 0000590828 00000 n 0000590965 00000 n 0000591105 00000 n 0000591187 00000 n 0000591324 00000 n 0000591464 00000 n 0000591546 00000 n 0000591683 00000 n 0000591819 00000 n 0000591901 00000 n 0000592038 00000 n 0000592178 00000 n 0000592260 00000 n 0000592397 00000 n 0000592533 00000 n 0000592615 00000 n 0000592752 00000 n 0000592892 00000 n 0000592974 00000 n 0000593111 00000 n 0000593251 00000 n 0000593333 00000 n 0000593470 00000 n 0000593610 00000 n 0000593692 00000 n 0000593829 00000 n 0000593965 00000 n 0000594047 00000 n 0000594184 00000 n 0000594324 00000 n 0000594406 00000 n 0000594544 00000 n 0000594684 00000 n 0000594766 00000 n 0000594903 00000 n 0000595039 00000 n 0000595121 00000 n 0000595258 00000 n 0000595398 00000 n 0000595480 00000 n 0000595617 00000 n 0000595757 00000 n 0000595839 00000 n 0000595976 00000 n 0000596116 00000 n 0000596198 00000 n 0000596334 00000 n 0000596474 00000 n 0000596556 00000 n 0000596693 00000 n 0000596833 00000 n 0000596915 00000 n 0000597051 00000 n 0000597186 00000 n 0000597268 00000 n 0000597403 00000 n 0000597537 00000 n 0000597619 00000 n 0000597754 00000 n 0000597892 00000 n 0000612379 00000 n 0000612403 00000 n 0000613397 00000 n 0000613614 00000 n 0000614220 00000 n 0000614242 00000 n 0000614440 00000 n 0000615040 00000 n 0000615062 00000 n 0000615260 00000 n 0000615867 00000 n 0000615889 00000 n 0000616087 00000 n 0000616688 00000 n 0000616710 00000 n 0000616908 00000 n 0000617759 00000 n 0000617781 00000 n 0000617979 00000 n 0000618829 00000 n 0000618851 00000 n 0000619049 00000 n 0000619880 00000 n 0000619902 00000 n 0000620100 00000 n 0000620965 00000 n 0000620987 00000 n 0000621185 00000 n 0000622020 00000 n 0000622042 00000 n 0000622240 00000 n 0000623098 00000 n 0000623120 00000 n 0000623318 00000 n 0000624166 00000 n 0000624188 00000 n 0000624386 00000 n 0000625251 00000 n 0000625273 00000 n 0000625471 00000 n 0000626318 00000 n 0000626340 00000 n 0000626538 00000 n 0000627406 00000 n 0000627428 00000 n 0000627626 00000 n 0000628472 00000 n 0000628494 00000 n 0000628692 00000 n 0000629544 00000 n 0000629566 00000 n 0000629764 00000 n 0000630635 00000 n 0000630657 00000 n 0000630855 00000 n 0000631725 00000 n 0000631747 00000 n 0000631945 00000 n 0000632814 00000 n 0000632836 00000 n 0000633034 00000 n 0000633877 00000 n 0000633899 00000 n 0000634097 00000 n 0000634951 00000 n 0000634973 00000 n 0000635171 00000 n 0000635996 00000 n 0000636018 00000 n 0000636216 00000 n 0000637052 00000 n 0000637074 00000 n 0000637272 00000 n 0000638125 00000 n 0000638147 00000 n 0000638345 00000 n 0000639166 00000 n 0000639188 00000 n 0000639386 00000 n 0000640205 00000 n 0000640227 00000 n 0000640425 00000 n 0000641274 00000 n 0000641296 00000 n 0000641494 00000 n 0000642355 00000 n 0000642377 00000 n 0000642575 00000 n 0000643034 00000 n 0000643056 00000 n 0000643254 00000 n 0000644111 00000 n 0000644133 00000 n 0000644331 00000 n 0000644976 00000 n 0000644998 00000 n 0000645196 00000 n 0000645914 00000 n 0000645936 00000 n 0000646134 00000 n 0000646718 00000 n 0000646740 00000 n 0000646938 00000 n 0000647681 00000 n 0000647703 00000 n 0000647901 00000 n 0000648819 00000 n 0000648841 00000 n 0000649039 00000 n 0000649897 00000 n 0000649919 00000 n 0000650117 00000 n 0000650831 00000 n 0000650853 00000 n 0000651051 00000 n 0000651955 00000 n 0000651977 00000 n 0000652175 00000 n 0000652775 00000 n 0000652797 00000 n 0000652995 00000 n 0000653415 00000 n 0000653437 00000 n 0000653635 00000 n 0000654179 00000 n 0000654201 00000 n 0000654399 00000 n 0000654946 00000 n 0000654968 00000 n 0000655166 00000 n 0000655762 00000 n 0000655784 00000 n 0000655982 00000 n 0000656532 00000 n 0000656554 00000 n 0000656752 00000 n 0000657427 00000 n 0000657449 00000 n 0000657647 00000 n 0000658191 00000 n 0000658213 00000 n 0000658411 00000 n 0000658961 00000 n 0000658983 00000 n 0000659181 00000 n 0000659788 00000 n 0000659810 00000 n 0000660008 00000 n 0000660572 00000 n 0000660594 00000 n 0000660792 00000 n 0000661502 00000 n 0000661524 00000 n 0000661722 00000 n 0000662286 00000 n 0000662308 00000 n 0000662506 00000 n 0000663198 00000 n 0000663220 00000 n 0000663418 00000 n 0000663985 00000 n 0000664007 00000 n 0000664205 00000 n 0000664822 00000 n 0000664844 00000 n 0000665042 00000 n 0000665124 00000 n 0000665261 00000 n 0000665397 00000 n 0000665479 00000 n 0000665616 00000 n 0000665756 00000 n 0000665838 00000 n 0000665975 00000 n 0000666115 00000 n 0000666197 00000 n 0000666334 00000 n 0000666474 00000 n 0000666556 00000 n 0000666692 00000 n 0000666828 00000 n 0000666910 00000 n 0000667047 00000 n 0000667187 00000 n 0000667269 00000 n 0000667406 00000 n 0000667546 00000 n 0000667628 00000 n 0000667765 00000 n 0000667905 00000 n 0000667987 00000 n 0000668124 00000 n 0000668264 00000 n 0000668346 00000 n 0000668482 00000 n 0000668622 00000 n 0000668704 00000 n 0000668840 00000 n 0000668976 00000 n 0000669058 00000 n 0000669194 00000 n 0000669330 00000 n 0000669412 00000 n 0000669549 00000 n 0000669689 00000 n 0000669771 00000 n 0000669908 00000 n 0000670048 00000 n 0000670130 00000 n 0000670267 00000 n 0000670407 00000 n 0000670489 00000 n 0000670626 00000 n 0000670766 00000 n 0000670848 00000 n 0000670985 00000 n 0000671121 00000 n 0000671203 00000 n 0000671340 00000 n 0000671476 00000 n 0000671558 00000 n 0000671694 00000 n 0000671830 00000 n 0000671912 00000 n 0000672049 00000 n 0000672189 00000 n 0000672271 00000 n 0000672408 00000 n 0000672548 00000 n 0000672630 00000 n 0000672767 00000 n 0000672907 00000 n 0000672989 00000 n 0000673126 00000 n 0000673266 00000 n 0000673348 00000 n 0000673485 00000 n 0000673625 00000 n 0000673707 00000 n 0000673844 00000 n 0000673980 00000 n 0000674062 00000 n 0000674198 00000 n 0000674338 00000 n 0000674420 00000 n 0000674557 00000 n 0000674693 00000 n 0000674775 00000 n 0000674912 00000 n 0000675052 00000 n 0000675134 00000 n 0000675271 00000 n 0000675411 00000 n 0000675493 00000 n 0000675630 00000 n 0000675770 00000 n 0000675852 00000 n 0000675989 00000 n 0000676129 00000 n 0000676211 00000 n 0000676348 00000 n 0000676488 00000 n 0000676570 00000 n 0000676707 00000 n 0000676847 00000 n 0000676929 00000 n 0000677066 00000 n 0000677206 00000 n 0000677288 00000 n 0000677425 00000 n 0000677561 00000 n 0000677643 00000 n 0000677779 00000 n 0000677919 00000 n 0000678001 00000 n 0000678138 00000 n 0000678278 00000 n 0000678360 00000 n 0000678497 00000 n 0000678637 00000 n 0000678719 00000 n 0000678856 00000 n 0000678996 00000 n 0000679078 00000 n 0000679215 00000 n 0000679355 00000 n 0000679437 00000 n 0000679574 00000 n 0000679710 00000 n 0000679792 00000 n 0000679929 00000 n 0000680069 00000 n 0000680151 00000 n 0000680288 00000 n 0000680428 00000 n 0000680510 00000 n 0000680647 00000 n 0000680783 00000 n 0000680865 00000 n 0000681002 00000 n 0000681142 00000 n 0000681224 00000 n 0000681361 00000 n 0000681497 00000 n 0000681579 00000 n 0000681716 00000 n 0000681856 00000 n 0000681938 00000 n 0000682075 00000 n 0000682215 00000 n 0000682297 00000 n 0000682434 00000 n 0000682574 00000 n 0000682656 00000 n 0000682793 00000 n 0000682933 00000 n 0000683015 00000 n 0000683152 00000 n 0000683288 00000 n 0000683370 00000 n 0000683506 00000 n 0000683645 00000 n 0000683727 00000 n 0000683862 00000 n 0000684000 00000 n 0000684082 00000 n 0000684217 00000 n 0000684355 00000 n 0000698903 00000 n 0000698927 00000 n 0000699921 00000 n 0000700138 00000 n 0000700763 00000 n 0000700785 00000 n 0000700983 00000 n 0000701547 00000 n 0000701569 00000 n 0000701767 00000 n 0000702607 00000 n 0000702629 00000 n 0000702827 00000 n 0000703436 00000 n 0000703458 00000 n 0000703656 00000 n 0000704398 00000 n 0000704420 00000 n 0000704618 00000 n 0000705177 00000 n 0000705199 00000 n 0000705397 00000 n 0000706210 00000 n 0000706232 00000 n 0000706430 00000 n 0000706998 00000 n 0000707020 00000 n 0000707218 00000 n 0000708097 00000 n 0000708119 00000 n 0000708317 00000 n 0000709783 00000 n 0000709806 00000 n 0000710004 00000 n 0000710657 00000 n 0000710679 00000 n 0000710877 00000 n 0000711446 00000 n 0000711468 00000 n 0000711666 00000 n 0000712517 00000 n 0000712539 00000 n 0000712737 00000 n 0000713319 00000 n 0000713341 00000 n 0000713539 00000 n 0000714387 00000 n 0000714409 00000 n 0000714607 00000 n 0000715270 00000 n 0000715292 00000 n 0000715490 00000 n 0000715988 00000 n 0000716010 00000 n 0000716208 00000 n 0000716786 00000 n 0000716808 00000 n 0000717006 00000 n 0000717764 00000 n 0000717786 00000 n 0000717984 00000 n 0000718403 00000 n 0000718425 00000 n 0000718623 00000 n 0000719324 00000 n 0000719346 00000 n 0000719544 00000 n 0000720353 00000 n 0000720375 00000 n 0000720573 00000 n 0000721421 00000 n 0000721443 00000 n 0000721641 00000 n 0000722415 00000 n 0000722437 00000 n 0000722635 00000 n 0000723137 00000 n 0000723159 00000 n 0000723357 00000 n 0000724054 00000 n 0000724076 00000 n 0000724274 00000 n 0000724731 00000 n 0000724753 00000 n 0000724951 00000 n 0000725498 00000 n 0000725520 00000 n 0000725718 00000 n 0000726266 00000 n 0000726288 00000 n 0000726486 00000 n 0000727074 00000 n 0000727096 00000 n 0000727294 00000 n 0000727847 00000 n 0000727869 00000 n 0000728067 00000 n 0000728514 00000 n 0000728536 00000 n 0000728734 00000 n 0000729321 00000 n 0000729343 00000 n 0000729541 00000 n 0000730158 00000 n 0000730180 00000 n 0000730378 00000 n 0000731053 00000 n 0000731075 00000 n 0000731273 00000 n 0000732002 00000 n 0000732024 00000 n 0000732222 00000 n 0000732868 00000 n 0000732890 00000 n 0000733088 00000 n 0000733697 00000 n 0000733719 00000 n 0000733917 00000 n 0000734521 00000 n 0000734543 00000 n 0000734741 00000 n 0000735342 00000 n 0000735364 00000 n 0000735562 00000 n 0000736176 00000 n 0000736198 00000 n 0000736396 00000 n 0000737063 00000 n 0000737085 00000 n 0000737283 00000 n 0000737702 00000 n 0000737724 00000 n 0000737922 00000 n 0000738729 00000 n 0000738751 00000 n 0000738949 00000 n 0000739751 00000 n 0000739773 00000 n 0000739971 00000 n 0000740719 00000 n 0000740741 00000 n 0000740939 00000 n 0000741630 00000 n 0000741652 00000 n 0000741850 00000 n 0000742555 00000 n 0000742577 00000 n 0000742775 00000 n 0000743566 00000 n 0000743588 00000 n 0000743786 00000 n 0000744592 00000 n 0000744614 00000 n 0000744812 00000 n 0000745532 00000 n 0000745554 00000 n 0000745752 00000 n 0000746168 00000 n 0000746190 00000 n 0000746388 00000 n 0000747022 00000 n 0000747044 00000 n 0000747242 00000 n 0000747927 00000 n 0000747949 00000 n 0000748147 00000 n 0000748229 00000 n 0000748366 00000 n 0000748506 00000 n 0000748588 00000 n 0000748725 00000 n 0000748861 00000 n 0000748943 00000 n 0000749080 00000 n 0000749220 00000 n 0000749302 00000 n 0000749439 00000 n 0000749575 00000 n 0000749657 00000 n 0000749794 00000 n 0000749934 00000 n 0000750016 00000 n 0000750153 00000 n 0000750289 00000 n 0000750371 00000 n 0000750507 00000 n 0000750647 00000 n 0000750729 00000 n 0000750866 00000 n 0000751006 00000 n 0000751088 00000 n 0000751225 00000 n 0000751365 00000 n 0000751447 00000 n 0000751584 00000 n 0000751724 00000 n 0000751806 00000 n 0000751942 00000 n 0000752078 00000 n 0000752160 00000 n 0000752297 00000 n 0000752437 00000 n 0000752519 00000 n 0000752656 00000 n 0000752796 00000 n 0000752878 00000 n 0000753014 00000 n 0000753150 00000 n 0000753232 00000 n 0000753369 00000 n 0000753505 00000 n 0000753587 00000 n 0000753724 00000 n 0000753860 00000 n 0000753942 00000 n 0000754079 00000 n 0000754219 00000 n 0000754301 00000 n 0000754437 00000 n 0000754577 00000 n 0000754659 00000 n 0000754796 00000 n 0000754932 00000 n 0000755014 00000 n 0000755152 00000 n 0000755292 00000 n 0000755374 00000 n 0000755511 00000 n 0000755647 00000 n 0000755729 00000 n 0000755866 00000 n 0000756006 00000 n 0000756088 00000 n 0000756225 00000 n 0000756361 00000 n 0000756443 00000 n 0000756580 00000 n 0000756716 00000 n 0000756798 00000 n 0000756936 00000 n 0000757076 00000 n 0000757158 00000 n 0000757295 00000 n 0000757431 00000 n 0000757513 00000 n 0000757651 00000 n 0000757791 00000 n 0000757873 00000 n 0000758010 00000 n 0000758146 00000 n 0000758228 00000 n 0000758365 00000 n 0000758501 00000 n 0000758583 00000 n 0000758720 00000 n 0000758856 00000 n 0000758938 00000 n 0000759075 00000 n 0000759211 00000 n 0000759293 00000 n 0000759431 00000 n 0000759571 00000 n 0000759653 00000 n 0000759790 00000 n 0000759930 00000 n 0000760012 00000 n 0000760149 00000 n 0000760285 00000 n 0000760367 00000 n 0000760504 00000 n 0000760644 00000 n 0000760726 00000 n 0000760863 00000 n 0000761003 00000 n 0000761085 00000 n 0000761222 00000 n 0000761358 00000 n 0000761440 00000 n 0000761577 00000 n 0000761717 00000 n 0000761799 00000 n 0000761936 00000 n 0000762076 00000 n 0000762158 00000 n 0000762295 00000 n 0000762435 00000 n 0000762517 00000 n 0000762654 00000 n 0000762790 00000 n 0000762872 00000 n 0000763009 00000 n 0000763145 00000 n 0000763227 00000 n 0000763365 00000 n 0000763505 00000 n 0000763587 00000 n 0000763724 00000 n 0000763864 00000 n 0000763946 00000 n 0000764083 00000 n 0000764219 00000 n 0000764301 00000 n 0000764438 00000 n 0000764578 00000 n 0000764660 00000 n 0000764797 00000 n 0000764933 00000 n 0000765015 00000 n 0000765152 00000 n 0000765292 00000 n 0000765374 00000 n 0000765511 00000 n 0000765651 00000 n 0000765733 00000 n 0000765870 00000 n 0000766006 00000 n 0000766088 00000 n 0000766225 00000 n 0000766361 00000 n 0000766443 00000 n 0000766580 00000 n 0000766719 00000 n 0000766801 00000 n 0000766936 00000 n 0000767070 00000 n 0000767152 00000 n 0000767287 00000 n 0000767421 00000 n 0000782520 00000 n 0000782544 00000 n 0000783538 00000 n 0000783755 00000 n 0000784360 00000 n 0000784382 00000 n 0000784580 00000 n 0000785301 00000 n 0000785323 00000 n 0000785521 00000 n 0000786309 00000 n 0000786331 00000 n 0000786529 00000 n 0000787250 00000 n 0000787272 00000 n 0000787470 00000 n 0000788172 00000 n 0000788194 00000 n 0000788392 00000 n 0000789061 00000 n 0000789083 00000 n 0000789281 00000 n 0000789964 00000 n 0000789986 00000 n 0000790184 00000 n 0000790827 00000 n 0000790849 00000 n 0000791047 00000 n 0000791790 00000 n 0000791812 00000 n 0000792010 00000 n 0000792401 00000 n 0000792423 00000 n 0000792621 00000 n 0000793180 00000 n 0000793202 00000 n 0000793400 00000 n 0000793933 00000 n 0000793955 00000 n 0000794153 00000 n 0000794889 00000 n 0000794911 00000 n 0000795109 00000 n 0000795731 00000 n 0000795753 00000 n 0000795951 00000 n 0000797280 00000 n 0000797303 00000 n 0000797501 00000 n 0000798488 00000 n 0000798510 00000 n 0000798708 00000 n 0000799409 00000 n 0000799431 00000 n 0000799629 00000 n 0000800328 00000 n 0000800350 00000 n 0000800548 00000 n 0000801247 00000 n 0000801269 00000 n 0000801467 00000 n 0000802171 00000 n 0000802193 00000 n 0000802391 00000 n 0000803092 00000 n 0000803114 00000 n 0000803312 00000 n 0000804157 00000 n 0000804179 00000 n 0000804377 00000 n 0000805129 00000 n 0000805151 00000 n 0000805349 00000 n 0000806253 00000 n 0000806275 00000 n 0000806473 00000 n 0000807173 00000 n 0000807195 00000 n 0000807393 00000 n 0000808093 00000 n 0000808115 00000 n 0000808313 00000 n 0000809145 00000 n 0000809167 00000 n 0000809365 00000 n 0000810197 00000 n 0000810219 00000 n 0000810417 00000 n 0000811438 00000 n 0000811460 00000 n 0000811658 00000 n 0000812637 00000 n 0000812659 00000 n 0000812857 00000 n 0000813542 00000 n 0000813564 00000 n 0000813762 00000 n 0000814467 00000 n 0000814489 00000 n 0000814687 00000 n 0000815413 00000 n 0000815435 00000 n 0000815633 00000 n 0000816314 00000 n 0000816336 00000 n 0000816534 00000 n 0000817236 00000 n 0000817258 00000 n 0000817456 00000 n 0000818173 00000 n 0000818195 00000 n 0000818393 00000 n 0000819094 00000 n 0000819116 00000 n 0000819314 00000 n 0000820031 00000 n 0000820053 00000 n 0000820251 00000 n 0000820952 00000 n 0000820974 00000 n 0000821172 00000 n 0000821889 00000 n 0000821911 00000 n 0000822109 00000 n 0000822809 00000 n 0000822831 00000 n 0000823029 00000 n 0000823745 00000 n 0000823767 00000 n 0000823965 00000 n 0000824669 00000 n 0000824691 00000 n 0000824889 00000 n 0000825617 00000 n 0000825639 00000 n 0000825837 00000 n 0000826641 00000 n 0000826663 00000 n 0000826861 00000 n 0000827683 00000 n 0000827705 00000 n 0000827903 00000 n 0000828745 00000 n 0000828767 00000 n 0000828965 00000 n 0000829655 00000 n 0000829677 00000 n 0000829875 00000 n 0000830583 00000 n 0000830605 00000 n 0000830803 00000 n 0000831534 00000 n 0000831556 00000 n 0000831754 00000 n 0000832623 00000 n 0000832645 00000 n 0000832843 00000 n 0000833770 00000 n 0000833792 00000 n 0000833990 00000 n 0000835298 00000 n 0000835321 00000 n 0000835519 00000 n 0000836569 00000 n 0000836591 00000 n 0000836789 00000 n 0000836871 00000 n 0000837007 00000 n 0000837147 00000 n 0000837229 00000 n 0000837366 00000 n 0000837506 00000 n 0000837588 00000 n 0000837725 00000 n 0000837865 00000 n 0000837947 00000 n 0000838084 00000 n 0000838224 00000 n 0000838306 00000 n 0000838442 00000 n 0000838578 00000 n 0000838660 00000 n 0000838797 00000 n 0000838937 00000 n 0000839019 00000 n 0000839156 00000 n 0000839292 00000 n 0000839374 00000 n 0000839511 00000 n 0000839651 00000 n 0000839733 00000 n 0000839870 00000 n 0000840010 00000 n 0000840092 00000 n 0000840229 00000 n 0000840369 00000 n 0000840451 00000 n 0000840588 00000 n 0000840728 00000 n 0000840810 00000 n 0000840948 00000 n 0000841088 00000 n 0000841170 00000 n 0000841306 00000 n 0000841442 00000 n 0000841524 00000 n 0000841661 00000 n 0000841797 00000 n 0000841879 00000 n 0000842016 00000 n 0000842156 00000 n 0000842238 00000 n 0000842375 00000 n 0000842515 00000 n 0000842597 00000 n 0000842734 00000 n 0000842870 00000 n 0000842952 00000 n 0000843089 00000 n 0000843225 00000 n 0000843307 00000 n 0000843444 00000 n 0000843580 00000 n 0000843662 00000 n 0000843799 00000 n 0000843939 00000 n 0000844021 00000 n 0000844158 00000 n 0000844294 00000 n 0000844376 00000 n 0000844513 00000 n 0000844649 00000 n 0000844731 00000 n 0000844868 00000 n 0000845008 00000 n 0000845090 00000 n 0000845227 00000 n 0000845363 00000 n 0000845445 00000 n 0000845582 00000 n 0000845722 00000 n 0000845804 00000 n 0000845941 00000 n 0000846081 00000 n 0000846163 00000 n 0000846300 00000 n 0000846440 00000 n 0000846522 00000 n 0000846659 00000 n 0000846799 00000 n 0000846881 00000 n 0000847017 00000 n 0000847157 00000 n 0000847239 00000 n 0000847376 00000 n 0000847516 00000 n 0000847598 00000 n 0000847735 00000 n 0000847871 00000 n 0000847953 00000 n 0000848090 00000 n 0000848226 00000 n 0000848308 00000 n 0000848445 00000 n 0000848581 00000 n 0000848663 00000 n 0000848800 00000 n 0000848940 00000 n 0000849022 00000 n 0000849159 00000 n 0000849295 00000 n 0000849377 00000 n 0000849514 00000 n 0000849654 00000 n 0000849736 00000 n 0000849873 00000 n 0000850009 00000 n 0000850091 00000 n 0000850228 00000 n 0000850368 00000 n 0000850450 00000 n 0000850587 00000 n 0000850723 00000 n 0000850805 00000 n 0000850942 00000 n 0000851082 00000 n 0000851164 00000 n 0000851301 00000 n 0000851441 00000 n 0000851523 00000 n 0000851660 00000 n 0000851800 00000 n 0000851882 00000 n 0000852019 00000 n 0000852155 00000 n 0000852237 00000 n 0000852373 00000 n 0000852509 00000 n 0000852591 00000 n 0000852728 00000 n 0000852868 00000 n 0000852950 00000 n 0000853087 00000 n 0000853223 00000 n 0000853305 00000 n 0000853442 00000 n 0000853582 00000 n 0000853664 00000 n 0000853801 00000 n 0000853937 00000 n 0000854019 00000 n 0000854156 00000 n 0000854292 00000 n 0000854374 00000 n 0000854511 00000 n 0000854651 00000 n 0000854733 00000 n 0000854870 00000 n 0000855010 00000 n 0000855092 00000 n 0000855228 00000 n 0000855363 00000 n 0000855445 00000 n 0000855580 00000 n 0000855714 00000 n 0000855796 00000 n 0000855931 00000 n 0000856065 00000 n 0000870528 00000 n 0000870552 00000 n 0000871546 00000 n 0000871763 00000 n 0000872678 00000 n 0000872700 00000 n 0000872898 00000 n 0000873596 00000 n 0000873618 00000 n 0000873816 00000 n 0000874514 00000 n 0000874536 00000 n 0000874734 00000 n 0000875561 00000 n 0000875583 00000 n 0000875781 00000 n 0000876608 00000 n 0000876630 00000 n 0000876828 00000 n 0000877793 00000 n 0000877815 00000 n 0000878013 00000 n 0000878725 00000 n 0000878747 00000 n 0000878945 00000 n 0000879674 00000 n 0000879696 00000 n 0000879894 00000 n 0000880606 00000 n 0000880628 00000 n 0000880826 00000 n 0000881555 00000 n 0000881577 00000 n 0000881775 00000 n 0000882487 00000 n 0000882509 00000 n 0000882707 00000 n 0000883436 00000 n 0000883458 00000 n 0000883656 00000 n 0000884365 00000 n 0000884387 00000 n 0000884585 00000 n 0000885311 00000 n 0000885333 00000 n 0000885531 00000 n 0000886349 00000 n 0000886371 00000 n 0000886569 00000 n 0000887403 00000 n 0000887425 00000 n 0000887623 00000 n 0000888498 00000 n 0000888520 00000 n 0000888718 00000 n 0000889419 00000 n 0000889441 00000 n 0000889639 00000 n 0000890357 00000 n 0000890379 00000 n 0000890577 00000 n 0000891317 00000 n 0000891339 00000 n 0000891537 00000 n 0000892167 00000 n 0000892189 00000 n 0000892387 00000 n 0000893131 00000 n 0000893153 00000 n 0000893351 00000 n 0000894096 00000 n 0000894118 00000 n 0000894316 00000 n 0000895059 00000 n 0000895081 00000 n 0000895279 00000 n 0000896030 00000 n 0000896052 00000 n 0000896250 00000 n 0000896998 00000 n 0000897020 00000 n 0000897218 00000 n 0000897947 00000 n 0000897969 00000 n 0000898167 00000 n 0000898954 00000 n 0000898976 00000 n 0000899174 00000 n 0000899918 00000 n 0000899940 00000 n 0000900138 00000 n 0000900881 00000 n 0000900903 00000 n 0000901101 00000 n 0000901841 00000 n 0000901863 00000 n 0000902061 00000 n 0000902810 00000 n 0000902832 00000 n 0000903030 00000 n 0000903771 00000 n 0000903793 00000 n 0000903991 00000 n 0000904722 00000 n 0000904744 00000 n 0000904942 00000 n 0000905728 00000 n 0000905750 00000 n 0000905948 00000 n 0000906488 00000 n 0000906510 00000 n 0000906708 00000 n 0000907317 00000 n 0000907339 00000 n 0000907537 00000 n 0000908204 00000 n 0000908226 00000 n 0000908424 00000 n 0000909131 00000 n 0000909153 00000 n 0000909351 00000 n 0000909959 00000 n 0000909981 00000 n 0000910179 00000 n 0000910680 00000 n 0000910702 00000 n 0000910900 00000 n 0000911566 00000 n 0000911588 00000 n 0000911786 00000 n 0000912470 00000 n 0000912492 00000 n 0000912690 00000 n 0000913558 00000 n 0000913580 00000 n 0000913778 00000 n 0000914453 00000 n 0000914475 00000 n 0000914673 00000 n 0000915550 00000 n 0000915572 00000 n 0000915770 00000 n 0000916499 00000 n 0000916521 00000 n 0000916719 00000 n 0000917509 00000 n 0000917531 00000 n 0000917729 00000 n 0000918479 00000 n 0000918501 00000 n 0000918699 00000 n 0000919318 00000 n 0000919340 00000 n 0000919538 00000 n 0000920383 00000 n 0000920405 00000 n 0000920603 00000 n 0000921351 00000 n 0000921373 00000 n 0000921571 00000 n 0000922356 00000 n 0000922378 00000 n 0000922576 00000 n 0000923287 00000 n 0000923309 00000 n 0000923507 00000 n 0000923589 00000 n 0000923726 00000 n 0000923866 00000 n 0000923948 00000 n 0000924085 00000 n 0000924225 00000 n 0000924307 00000 n 0000924444 00000 n 0000924584 00000 n 0000924666 00000 n 0000924803 00000 n 0000924943 00000 n 0000925025 00000 n 0000925162 00000 n 0000925302 00000 n 0000925384 00000 n 0000925521 00000 n 0000925661 00000 n 0000925743 00000 n 0000925880 00000 n 0000926020 00000 n 0000926102 00000 n 0000926239 00000 n 0000926379 00000 n 0000926461 00000 n 0000926598 00000 n 0000926738 00000 n 0000926820 00000 n 0000926957 00000 n 0000927097 00000 n 0000927179 00000 n 0000927316 00000 n 0000927456 00000 n 0000927538 00000 n 0000927675 00000 n 0000927815 00000 n 0000927897 00000 n 0000928034 00000 n 0000928170 00000 n 0000928252 00000 n 0000928389 00000 n 0000928529 00000 n 0000928611 00000 n 0000928748 00000 n 0000928888 00000 n 0000928970 00000 n 0000929107 00000 n 0000929243 00000 n 0000929325 00000 n 0000929462 00000 n 0000929602 00000 n 0000929684 00000 n 0000929821 00000 n 0000929957 00000 n 0000930039 00000 n 0000930176 00000 n 0000930316 00000 n 0000930398 00000 n 0000930535 00000 n 0000930675 00000 n 0000930757 00000 n 0000930895 00000 n 0000931035 00000 n 0000931117 00000 n 0000931253 00000 n 0000931389 00000 n 0000931471 00000 n 0000931608 00000 n 0000931748 00000 n 0000931830 00000 n 0000931967 00000 n 0000932103 00000 n 0000932185 00000 n 0000932322 00000 n 0000932458 00000 n 0000932540 00000 n 0000932677 00000 n 0000932817 00000 n 0000932899 00000 n 0000933036 00000 n 0000933172 00000 n 0000933254 00000 n 0000933391 00000 n 0000933531 00000 n 0000933613 00000 n 0000933750 00000 n 0000933886 00000 n 0000933968 00000 n 0000934105 00000 n 0000934241 00000 n 0000934323 00000 n 0000934460 00000 n 0000934600 00000 n 0000934682 00000 n 0000934819 00000 n 0000934959 00000 n 0000935041 00000 n 0000935178 00000 n 0000935314 00000 n 0000935396 00000 n 0000935533 00000 n 0000935673 00000 n 0000935755 00000 n 0000935892 00000 n 0000936032 00000 n 0000936114 00000 n 0000936252 00000 n 0000936392 00000 n 0000936474 00000 n 0000936611 00000 n 0000936751 00000 n 0000936833 00000 n 0000936970 00000 n 0000937110 00000 n 0000937192 00000 n 0000937329 00000 n 0000937469 00000 n 0000937551 00000 n 0000937688 00000 n 0000937824 00000 n 0000937906 00000 n 0000938044 00000 n 0000938184 00000 n 0000938266 00000 n 0000938402 00000 n 0000938542 00000 n 0000938624 00000 n 0000938761 00000 n 0000938897 00000 n 0000938979 00000 n 0000939116 00000 n 0000939252 00000 n 0000939334 00000 n 0000939471 00000 n 0000939611 00000 n 0000939693 00000 n 0000939830 00000 n 0000939970 00000 n 0000940052 00000 n 0000940189 00000 n 0000940325 00000 n 0000940407 00000 n 0000940544 00000 n 0000940680 00000 n 0000940762 00000 n 0000940899 00000 n 0000941035 00000 n 0000941117 00000 n 0000941254 00000 n 0000941390 00000 n 0000941472 00000 n 0000941609 00000 n 0000941745 00000 n 0000941827 00000 n 0000941963 00000 n 0000942102 00000 n 0000942184 00000 n 0000942319 00000 n 0000942453 00000 n 0000942535 00000 n 0000942670 00000 n 0000942804 00000 n 0000957472 00000 n 0000957496 00000 n 0000958490 00000 n 0000958707 00000 n 0000959631 00000 n 0000959653 00000 n 0000959851 00000 n 0000961015 00000 n 0000961038 00000 n 0000961236 00000 n 0000961755 00000 n 0000961777 00000 n 0000961975 00000 n 0000962652 00000 n 0000962674 00000 n 0000962872 00000 n 0000963458 00000 n 0000963480 00000 n 0000963678 00000 n 0000964411 00000 n 0000964433 00000 n 0000964631 00000 n 0000965276 00000 n 0000965298 00000 n 0000965496 00000 n 0000966093 00000 n 0000966115 00000 n 0000966313 00000 n 0000966897 00000 n 0000966919 00000 n 0000967117 00000 n 0000967700 00000 n 0000967722 00000 n 0000967920 00000 n 0000968558 00000 n 0000968580 00000 n 0000968778 00000 n 0000969989 00000 n 0000970012 00000 n 0000970210 00000 n 0000970991 00000 n 0000971013 00000 n 0000971211 00000 n 0000972038 00000 n 0000972060 00000 n 0000972258 00000 n 0000973161 00000 n 0000973183 00000 n 0000973381 00000 n 0000974303 00000 n 0000974325 00000 n 0000974523 00000 n 0000975175 00000 n 0000975197 00000 n 0000975395 00000 n 0000976119 00000 n 0000976141 00000 n 0000976339 00000 n 0000977106 00000 n 0000977128 00000 n 0000977326 00000 n 0000978035 00000 n 0000978057 00000 n 0000978255 00000 n 0000978865 00000 n 0000978887 00000 n 0000979085 00000 n 0000979729 00000 n 0000979751 00000 n 0000979949 00000 n 0000980552 00000 n 0000980574 00000 n 0000980772 00000 n 0000981411 00000 n 0000981433 00000 n 0000981631 00000 n 0000982244 00000 n 0000982266 00000 n 0000982464 00000 n 0000983105 00000 n 0000983127 00000 n 0000983325 00000 n 0000983922 00000 n 0000983944 00000 n 0000984142 00000 n 0000984776 00000 n 0000984798 00000 n 0000984996 00000 n 0000985606 00000 n 0000985628 00000 n 0000985826 00000 n 0000986457 00000 n 0000986479 00000 n 0000986677 00000 n 0000987289 00000 n 0000987311 00000 n 0000987509 00000 n 0000988156 00000 n 0000988178 00000 n 0000988376 00000 n 0000989003 00000 n 0000989025 00000 n 0000989223 00000 n 0000989863 00000 n 0000989885 00000 n 0000990083 00000 n 0000990690 00000 n 0000990712 00000 n 0000990910 00000 n 0000991520 00000 n 0000991542 00000 n 0000991740 00000 n 0000992334 00000 n 0000992356 00000 n 0000992554 00000 n 0000993161 00000 n 0000993183 00000 n 0000993381 00000 n 0000994065 00000 n 0000994087 00000 n 0000994285 00000 n 0000994893 00000 n 0000994915 00000 n 0000995113 00000 n 0000995828 00000 n 0000995850 00000 n 0000996048 00000 n 0000996660 00000 n 0000996682 00000 n 0000996880 00000 n 0000997498 00000 n 0000997520 00000 n 0000997718 00000 n 0000998414 00000 n 0000998436 00000 n 0000998634 00000 n 0000999068 00000 n 0000999090 00000 n 0000999288 00000 n 0000999899 00000 n 0000999921 00000 n 0001000119 00000 n 0001001007 00000 n 0001001029 00000 n 0001001227 00000 n 0001001961 00000 n 0001001983 00000 n 0001002181 00000 n 0001002916 00000 n 0001002938 00000 n 0001003136 00000 n 0001003844 00000 n 0001003866 00000 n 0001004064 00000 n 0001005058 00000 n 0001005080 00000 n 0001005278 00000 n 0001006184 00000 n 0001006206 00000 n 0001006404 00000 n 0001007411 00000 n 0001007433 00000 n 0001007631 00000 n 0001008499 00000 n 0001008521 00000 n 0001008719 00000 n 0001008801 00000 n 0001008938 00000 n 0001009074 00000 n 0001009156 00000 n 0001009293 00000 n 0001009429 00000 n 0001009511 00000 n 0001009649 00000 n 0001009789 00000 n 0001009871 00000 n 0001010008 00000 n 0001010148 00000 n 0001010230 00000 n 0001010367 00000 n 0001010507 00000 n 0001010589 00000 n 0001010726 00000 n 0001010866 00000 n 0001010948 00000 n 0001011084 00000 n 0001011224 00000 n 0001011306 00000 n 0001011443 00000 n 0001011579 00000 n 0001011661 00000 n 0001011797 00000 n 0001011933 00000 n 0001012015 00000 n 0001012152 00000 n 0001012288 00000 n 0001012370 00000 n 0001012507 00000 n 0001012643 00000 n 0001012725 00000 n 0001012862 00000 n 0001012998 00000 n 0001013080 00000 n 0001013217 00000 n 0001013353 00000 n 0001013435 00000 n 0001013572 00000 n 0001013712 00000 n 0001013794 00000 n 0001013931 00000 n 0001014067 00000 n 0001014149 00000 n 0001014285 00000 n 0001014421 00000 n 0001014503 00000 n 0001014641 00000 n 0001014781 00000 n 0001014863 00000 n 0001015000 00000 n 0001015140 00000 n 0001015222 00000 n 0001015359 00000 n 0001015499 00000 n 0001015581 00000 n 0001015717 00000 n 0001015857 00000 n 0001015939 00000 n 0001016075 00000 n 0001016211 00000 n 0001016293 00000 n 0001016430 00000 n 0001016566 00000 n 0001016648 00000 n 0001016785 00000 n 0001016921 00000 n 0001017003 00000 n 0001017139 00000 n 0001017279 00000 n 0001017361 00000 n 0001017497 00000 n 0001017637 00000 n 0001017719 00000 n 0001017855 00000 n 0001017991 00000 n 0001018073 00000 n 0001018210 00000 n 0001018350 00000 n 0001018432 00000 n 0001018569 00000 n 0001018705 00000 n 0001018787 00000 n 0001018923 00000 n 0001019063 00000 n 0001019145 00000 n 0001019282 00000 n 0001019418 00000 n 0001019500 00000 n 0001019636 00000 n 0001019776 00000 n 0001019858 00000 n 0001019995 00000 n 0001020131 00000 n 0001020213 00000 n 0001020349 00000 n 0001020489 00000 n 0001020571 00000 n 0001020708 00000 n 0001020844 00000 n 0001020926 00000 n 0001021062 00000 n 0001021202 00000 n 0001021284 00000 n 0001021421 00000 n 0001021557 00000 n 0001021639 00000 n 0001021775 00000 n 0001021915 00000 n 0001021997 00000 n 0001022134 00000 n 0001022274 00000 n 0001022356 00000 n 0001022492 00000 n 0001022632 00000 n 0001022714 00000 n 0001022851 00000 n 0001022987 00000 n 0001023069 00000 n 0001023205 00000 n 0001023345 00000 n 0001023427 00000 n 0001023564 00000 n 0001023704 00000 n 0001023786 00000 n 0001023923 00000 n 0001024063 00000 n 0001024145 00000 n 0001024282 00000 n 0001024422 00000 n 0001024504 00000 n 0001024642 00000 n 0001024782 00000 n 0001024864 00000 n 0001025001 00000 n 0001025141 00000 n 0001025223 00000 n 0001025360 00000 n 0001025496 00000 n 0001025578 00000 n 0001025715 00000 n 0001025851 00000 n 0001025933 00000 n 0001026070 00000 n 0001026210 00000 n 0001026292 00000 n 0001026429 00000 n 0001026569 00000 n 0001026651 00000 n 0001026788 00000 n 0001026924 00000 n 0001027006 00000 n 0001027142 00000 n 0001027281 00000 n 0001027363 00000 n 0001027498 00000 n 0001027632 00000 n 0001027714 00000 n 0001027849 00000 n 0001027987 00000 n 0001042547 00000 n 0001042571 00000 n 0001043565 00000 n 0001043782 00000 n 0001044636 00000 n 0001044658 00000 n 0001044856 00000 n 0001045523 00000 n 0001045545 00000 n 0001045743 00000 n 0001046273 00000 n 0001046295 00000 n 0001046493 00000 n 0001047083 00000 n 0001047105 00000 n 0001047303 00000 n 0001047873 00000 n 0001047895 00000 n 0001048093 00000 n 0001048743 00000 n 0001048765 00000 n 0001048963 00000 n 0001049651 00000 n 0001049673 00000 n 0001049871 00000 n 0001050747 00000 n 0001050769 00000 n 0001050967 00000 n 0001051577 00000 n 0001051599 00000 n 0001051797 00000 n 0001052463 00000 n 0001052485 00000 n 0001052683 00000 n 0001053504 00000 n 0001053526 00000 n 0001053724 00000 n 0001054291 00000 n 0001054313 00000 n 0001054511 00000 n 0001055301 00000 n 0001055323 00000 n 0001055521 00000 n 0001056186 00000 n 0001056208 00000 n 0001056406 00000 n 0001057042 00000 n 0001057064 00000 n 0001057262 00000 n 0001058252 00000 n 0001058274 00000 n 0001058472 00000 n 0001059343 00000 n 0001059365 00000 n 0001059563 00000 n 0001060422 00000 n 0001060444 00000 n 0001060642 00000 n 0001061355 00000 n 0001061377 00000 n 0001061575 00000 n 0001062183 00000 n 0001062205 00000 n 0001062403 00000 n 0001063129 00000 n 0001063151 00000 n 0001063349 00000 n 0001064065 00000 n 0001064087 00000 n 0001064285 00000 n 0001065124 00000 n 0001065146 00000 n 0001065344 00000 n 0001066151 00000 n 0001066173 00000 n 0001066371 00000 n 0001067111 00000 n 0001067133 00000 n 0001067331 00000 n 0001068042 00000 n 0001068064 00000 n 0001068262 00000 n 0001068932 00000 n 0001068954 00000 n 0001069152 00000 n 0001069877 00000 n 0001069899 00000 n 0001070097 00000 n 0001070947 00000 n 0001070969 00000 n 0001071167 00000 n 0001071896 00000 n 0001071918 00000 n 0001072116 00000 n 0001073031 00000 n 0001073053 00000 n 0001073251 00000 n 0001074108 00000 n 0001074130 00000 n 0001074328 00000 n 0001075275 00000 n 0001075297 00000 n 0001075495 00000 n 0001076097 00000 n 0001076119 00000 n 0001076317 00000 n 0001077021 00000 n 0001077043 00000 n 0001077241 00000 n 0001078032 00000 n 0001078054 00000 n 0001078252 00000 n 0001079299 00000 n 0001079321 00000 n 0001079519 00000 n 0001080163 00000 n 0001080185 00000 n 0001080383 00000 n 0001081020 00000 n 0001081042 00000 n 0001081240 00000 n 0001081904 00000 n 0001081926 00000 n 0001082124 00000 n 0001082866 00000 n 0001082888 00000 n 0001083086 00000 n 0001083799 00000 n 0001083821 00000 n 0001084019 00000 n 0001084746 00000 n 0001084768 00000 n 0001084966 00000 n 0001085769 00000 n 0001085791 00000 n 0001085989 00000 n 0001086699 00000 n 0001086721 00000 n 0001086919 00000 n 0001087612 00000 n 0001087634 00000 n 0001087832 00000 n 0001088663 00000 n 0001088685 00000 n 0001088883 00000 n 0001089637 00000 n 0001089659 00000 n 0001089857 00000 n 0001090510 00000 n 0001090532 00000 n 0001090730 00000 n 0001091382 00000 n 0001091404 00000 n 0001091602 00000 n 0001092366 00000 n 0001092388 00000 n 0001092586 00000 n 0001093074 00000 n 0001093096 00000 n 0001093294 00000 n 0001093978 00000 n 0001094000 00000 n 0001094198 00000 n 0001094747 00000 n 0001094769 00000 n 0001094967 00000 n 0001095049 00000 n 0001095186 00000 n 0001095322 00000 n 0001095404 00000 n 0001095541 00000 n 0001095681 00000 n 0001095763 00000 n 0001095900 00000 n 0001096040 00000 n 0001096122 00000 n 0001096259 00000 n 0001096399 00000 n 0001096481 00000 n 0001096618 00000 n 0001096754 00000 n 0001096836 00000 n 0001096973 00000 n 0001097109 00000 n 0001097191 00000 n 0001097327 00000 n 0001097467 00000 n 0001097549 00000 n 0001097686 00000 n 0001097822 00000 n 0001097904 00000 n 0001098041 00000 n 0001098177 00000 n 0001098259 00000 n 0001098396 00000 n 0001098532 00000 n 0001098614 00000 n 0001098751 00000 n 0001098887 00000 n 0001098969 00000 n 0001099106 00000 n 0001099246 00000 n 0001099328 00000 n 0001099465 00000 n 0001099601 00000 n 0001099683 00000 n 0001099820 00000 n 0001099960 00000 n 0001100042 00000 n 0001100179 00000 n 0001100319 00000 n 0001100401 00000 n 0001100538 00000 n 0001100674 00000 n 0001100756 00000 n 0001100893 00000 n 0001101029 00000 n 0001101111 00000 n 0001101248 00000 n 0001101384 00000 n 0001101466 00000 n 0001101603 00000 n 0001101743 00000 n 0001101825 00000 n 0001101962 00000 n 0001102098 00000 n 0001102180 00000 n 0001102316 00000 n 0001102452 00000 n 0001102534 00000 n 0001102671 00000 n 0001102807 00000 n 0001102889 00000 n 0001103026 00000 n 0001103166 00000 n 0001103248 00000 n 0001103385 00000 n 0001103525 00000 n 0001103607 00000 n 0001103744 00000 n 0001103884 00000 n 0001103966 00000 n 0001104103 00000 n 0001104239 00000 n 0001104321 00000 n 0001104458 00000 n 0001104594 00000 n 0001104676 00000 n 0001104813 00000 n 0001104949 00000 n 0001105031 00000 n 0001105168 00000 n 0001105308 00000 n 0001105390 00000 n 0001105527 00000 n 0001105667 00000 n 0001105749 00000 n 0001105886 00000 n 0001106022 00000 n 0001106104 00000 n 0001106241 00000 n 0001106381 00000 n 0001106463 00000 n 0001106600 00000 n 0001106740 00000 n 0001106822 00000 n 0001106958 00000 n 0001107094 00000 n 0001107176 00000 n 0001107313 00000 n 0001107449 00000 n 0001107531 00000 n 0001107668 00000 n 0001107804 00000 n 0001107886 00000 n 0001108023 00000 n 0001108163 00000 n 0001108245 00000 n 0001108382 00000 n 0001108522 00000 n 0001108604 00000 n 0001108741 00000 n 0001108881 00000 n 0001108963 00000 n 0001109100 00000 n 0001109236 00000 n 0001109318 00000 n 0001109455 00000 n 0001109591 00000 n 0001109673 00000 n 0001109810 00000 n 0001109950 00000 n 0001110032 00000 n 0001110168 00000 n 0001110304 00000 n 0001110386 00000 n 0001110523 00000 n 0001110663 00000 n 0001110745 00000 n 0001110882 00000 n 0001111022 00000 n 0001111104 00000 n 0001111241 00000 n 0001111377 00000 n 0001111459 00000 n 0001111596 00000 n 0001111736 00000 n 0001111818 00000 n 0001111955 00000 n 0001112091 00000 n 0001112173 00000 n 0001112310 00000 n 0001112446 00000 n 0001112528 00000 n 0001112665 00000 n 0001112805 00000 n 0001112887 00000 n 0001113023 00000 n 0001113159 00000 n 0001113241 00000 n 0001113378 00000 n 0001113517 00000 n 0001113599 00000 n 0001113734 00000 n 0001113872 00000 n 0001113954 00000 n 0001114089 00000 n 0001114227 00000 n 0001128950 00000 n 0001128974 00000 n 0001129968 00000 n 0001130185 00000 n 0001130827 00000 n 0001130849 00000 n 0001131047 00000 n 0001131795 00000 n 0001131817 00000 n 0001132015 00000 n 0001132491 00000 n 0001132513 00000 n 0001132711 00000 n 0001133447 00000 n 0001133469 00000 n 0001133667 00000 n 0001134413 00000 n 0001134435 00000 n 0001134633 00000 n 0001135330 00000 n 0001135352 00000 n 0001135550 00000 n 0001136222 00000 n 0001136244 00000 n 0001136442 00000 n 0001137084 00000 n 0001137106 00000 n 0001137304 00000 n 0001138017 00000 n 0001138039 00000 n 0001138237 00000 n 0001139096 00000 n 0001139118 00000 n 0001139316 00000 n 0001140176 00000 n 0001140198 00000 n 0001140396 00000 n 0001141028 00000 n 0001141050 00000 n 0001141248 00000 n 0001141882 00000 n 0001141904 00000 n 0001142102 00000 n 0001142864 00000 n 0001142886 00000 n 0001143084 00000 n 0001143843 00000 n 0001143865 00000 n 0001144063 00000 n 0001145006 00000 n 0001145028 00000 n 0001145226 00000 n 0001145633 00000 n 0001145655 00000 n 0001145853 00000 n 0001146498 00000 n 0001146520 00000 n 0001146718 00000 n 0001147309 00000 n 0001147331 00000 n 0001147529 00000 n 0001148421 00000 n 0001148443 00000 n 0001148641 00000 n 0001149607 00000 n 0001149629 00000 n 0001149827 00000 n 0001149909 00000 n 0001150045 00000 n 0001150185 00000 n 0001150267 00000 n 0001150404 00000 n 0001150544 00000 n 0001150626 00000 n 0001150764 00000 n 0001150904 00000 n 0001150986 00000 n 0001151123 00000 n 0001151263 00000 n 0001151345 00000 n 0001151482 00000 n 0001151618 00000 n 0001151700 00000 n 0001151837 00000 n 0001151977 00000 n 0001152059 00000 n 0001152196 00000 n 0001152336 00000 n 0001152418 00000 n 0001152555 00000 n 0001152695 00000 n 0001152777 00000 n 0001152914 00000 n 0001153050 00000 n 0001153132 00000 n 0001153269 00000 n 0001153405 00000 n 0001153487 00000 n 0001153624 00000 n 0001153760 00000 n 0001153842 00000 n 0001153979 00000 n 0001154119 00000 n 0001154201 00000 n 0001154338 00000 n 0001154478 00000 n 0001154560 00000 n 0001154697 00000 n 0001154837 00000 n 0001154919 00000 n 0001155056 00000 n 0001155192 00000 n 0001155274 00000 n 0001155411 00000 n 0001155551 00000 n 0001155633 00000 n 0001155770 00000 n 0001155910 00000 n 0001155992 00000 n 0001156129 00000 n 0001156269 00000 n 0001156351 00000 n 0001156489 00000 n 0001156629 00000 n 0001156711 00000 n 0001156848 00000 n 0001156984 00000 n 0001157066 00000 n 0001157203 00000 n 0001157343 00000 n 0001163183 00000 n 0001163206 00000 n 0001163606 00000 n 0001163823 00000 n 0001163902 00000 n 0001352464 00000 n 0001164097 00000 n 0001164016 00000 n 0001164211 00000 n 0001164403 00000 n 0001179624 00000 n 0001164661 00000 n 0001179526 00000 n 0001164755 00000 n 0001164871 00000 n 0001164986 00000 n 0001165098 00000 n 0001165215 00000 n 0001165328 00000 n 0001165445 00000 n 0001165563 00000 n 0001165680 00000 n 0001165789 00000 n 0001165900 00000 n 0001166022 00000 n 0001166132 00000 n 0001166245 00000 n 0001166355 00000 n 0001166469 00000 n 0001166583 00000 n 0001166692 00000 n 0001166805 00000 n 0001166920 00000 n 0001167035 00000 n 0001167149 00000 n 0001167267 00000 n 0001167380 00000 n 0001167497 00000 n 0001167614 00000 n 0001167727 00000 n 0001167840 00000 n 0001167952 00000 n 0001168065 00000 n 0001168177 00000 n 0001168290 00000 n 0001168402 00000 n 0001168514 00000 n 0001168626 00000 n 0001168741 00000 n 0001168851 00000 n 0001168960 00000 n 0001169078 00000 n 0001169192 00000 n 0001169300 00000 n 0001169413 00000 n 0001169530 00000 n 0001169638 00000 n 0001169750 00000 n 0001169860 00000 n 0001169981 00000 n 0001170111 00000 n 0001170227 00000 n 0001170344 00000 n 0001170460 00000 n 0001170582 00000 n 0001170710 00000 n 0001170841 00000 n 0001170959 00000 n 0001171076 00000 n 0001171192 00000 n 0001171307 00000 n 0001171421 00000 n 0001171534 00000 n 0001171648 00000 n 0001171769 00000 n 0001171882 00000 n 0001171997 00000 n 0001172113 00000 n 0001172226 00000 n 0001172339 00000 n 0001172448 00000 n 0001172570 00000 n 0001172688 00000 n 0001172805 00000 n 0001172928 00000 n 0001173047 00000 n 0001173165 00000 n 0001173276 00000 n 0001173392 00000 n 0001173510 00000 n 0001173626 00000 n 0001173739 00000 n 0001173852 00000 n 0001173965 00000 n 0001174082 00000 n 0001174195 00000 n 0001174308 00000 n 0001174420 00000 n 0001174539 00000 n 0001174659 00000 n 0001174773 00000 n 0001174891 00000 n 0001175010 00000 n 0001175125 00000 n 0001175240 00000 n 0001175359 00000 n 0001175478 00000 n 0001175598 00000 n 0001175712 00000 n 0001175839 00000 n 0001175954 00000 n 0001176072 00000 n 0001176190 00000 n 0001176307 00000 n 0001176424 00000 n 0001176541 00000 n 0001176658 00000 n 0001176786 00000 n 0001176903 00000 n 0001177017 00000 n 0001177132 00000 n 0001177248 00000 n 0001177362 00000 n 0001177476 00000 n 0001177585 00000 n 0001177698 00000 n 0001177811 00000 n 0001177927 00000 n 0001178038 00000 n 0001178154 00000 n 0001178268 00000 n 0001178377 00000 n 0001178491 00000 n 0001178606 00000 n 0001178725 00000 n 0001178839 00000 n 0001178954 00000 n 0001179066 00000 n 0001179180 00000 n 0001179294 00000 n 0001179412 00000 n 0001182599 00000 n 0001179889 00000 n 0001182495 00000 n 0001179981 00000 n 0001180099 00000 n 0001180217 00000 n 0001180334 00000 n 0001180452 00000 n 0001180574 00000 n 0001180690 00000 n 0001180811 00000 n 0001180932 00000 n 0001181052 00000 n 0001181173 00000 n 0001181286 00000 n 0001181404 00000 n 0001181524 00000 n 0001181644 00000 n 0001181763 00000 n 0001181883 00000 n 0001182006 00000 n 0001182129 00000 n 0001182251 00000 n 0001182374 00000 n 0001183298 00000 n 0001182875 00000 n 0001183200 00000 n 0001182970 00000 n 0001183084 00000 n 0001183660 00000 n 0001183579 00000 n 0001186845 00000 n 0001183902 00000 n 0001186737 00000 n 0001184005 00000 n 0001184127 00000 n 0001184247 00000 n 0001184369 00000 n 0001184489 00000 n 0001184608 00000 n 0001184727 00000 n 0001184847 00000 n 0001184969 00000 n 0001185088 00000 n 0001185212 00000 n 0001185322 00000 n 0001185434 00000 n 0001185548 00000 n 0001185667 00000 n 0001185790 00000 n 0001185918 00000 n 0001186040 00000 n 0001186151 00000 n 0001186264 00000 n 0001186379 00000 n 0001186495 00000 n 0001186618 00000 n 0001188409 00000 n 0001187099 00000 n 0001188303 00000 n 0001187206 00000 n 0001187330 00000 n 0001187453 00000 n 0001187575 00000 n 0001187697 00000 n 0001187819 00000 n 0001187936 00000 n 0001188059 00000 n 0001188186 00000 n 0001190610 00000 n 0001188663 00000 n 0001190502 00000 n 0001188768 00000 n 0001188889 00000 n 0001189009 00000 n 0001189132 00000 n 0001189258 00000 n 0001189391 00000 n 0001189512 00000 n 0001189638 00000 n 0001189764 00000 n 0001189890 00000 n 0001190016 00000 n 0001190141 00000 n 0001190259 00000 n 0001190382 00000 n 0001193260 00000 n 0001190928 00000 n 0001193142 00000 n 0001191027 00000 n 0001191146 00000 n 0001191270 00000 n 0001191391 00000 n 0001191516 00000 n 0001191647 00000 n 0001191781 00000 n 0001191915 00000 n 0001192052 00000 n 0001192184 00000 n 0001192323 00000 n 0001192462 00000 n 0001192605 00000 n 0001192744 00000 n 0001192885 00000 n 0001193011 00000 n 0001194174 00000 n 0001193497 00000 n 0001194072 00000 n 0001193601 00000 n 0001193723 00000 n 0001193838 00000 n 0001193954 00000 n 0001195628 00000 n 0001194408 00000 n 0001195531 00000 n 0001194504 00000 n 0001194617 00000 n 0001194729 00000 n 0001194841 00000 n 0001194953 00000 n 0001195068 00000 n 0001195184 00000 n 0001195299 00000 n 0001195413 00000 n 0001196865 00000 n 0001195941 00000 n 0001196761 00000 n 0001196046 00000 n 0001196166 00000 n 0001196283 00000 n 0001196399 00000 n 0001196519 00000 n 0001196640 00000 n 0001205363 00000 n 0001197127 00000 n 0001205257 00000 n 0001197231 00000 n 0001197343 00000 n 0001197456 00000 n 0001197568 00000 n 0001197682 00000 n 0001197794 00000 n 0001197907 00000 n 0001198019 00000 n 0001198140 00000 n 0001198261 00000 n 0001198386 00000 n 0001198502 00000 n 0001198622 00000 n 0001198746 00000 n 0001198862 00000 n 0001198977 00000 n 0001199095 00000 n 0001199214 00000 n 0001199327 00000 n 0001199453 00000 n 0001199572 00000 n 0001199693 00000 n 0001199818 00000 n 0001199938 00000 n 0001200059 00000 n 0001200187 00000 n 0001200316 00000 n 0001200446 00000 n 0001200579 00000 n 0001200711 00000 n 0001200835 00000 n 0001200960 00000 n 0001201086 00000 n 0001201215 00000 n 0001201343 00000 n 0001201475 00000 n 0001201601 00000 n 0001201726 00000 n 0001201854 00000 n 0001201983 00000 n 0001202111 00000 n 0001202242 00000 n 0001202364 00000 n 0001202488 00000 n 0001202613 00000 n 0001202742 00000 n 0001202863 00000 n 0001202985 00000 n 0001203104 00000 n 0001203226 00000 n 0001203345 00000 n 0001203468 00000 n 0001203587 00000 n 0001203705 00000 n 0001203830 00000 n 0001203945 00000 n 0001204060 00000 n 0001204182 00000 n 0001204297 00000 n 0001204419 00000 n 0001204537 00000 n 0001204662 00000 n 0001204780 00000 n 0001204905 00000 n 0001205020 00000 n 0001205142 00000 n 0001209239 00000 n 0001205609 00000 n 0001209131 00000 n 0001205718 00000 n 0001205844 00000 n 0001205967 00000 n 0001206090 00000 n 0001206214 00000 n 0001206338 00000 n 0001206463 00000 n 0001206588 00000 n 0001206707 00000 n 0001206833 00000 n 0001206953 00000 n 0001207080 00000 n 0001207196 00000 n 0001207319 00000 n 0001207436 00000 n 0001207560 00000 n 0001207680 00000 n 0001207807 00000 n 0001207923 00000 n 0001208046 00000 n 0001208164 00000 n 0001208282 00000 n 0001208407 00000 n 0001208522 00000 n 0001208640 00000 n 0001208765 00000 n 0001208886 00000 n 0001209014 00000 n 0001214032 00000 n 0001209525 00000 n 0001213926 00000 n 0001209632 00000 n 0001209754 00000 n 0001209877 00000 n 0001210001 00000 n 0001210128 00000 n 0001210256 00000 n 0001210382 00000 n 0001210506 00000 n 0001210629 00000 n 0001210753 00000 n 0001210877 00000 n 0001211002 00000 n 0001211127 00000 n 0001211250 00000 n 0001211369 00000 n 0001211486 00000 n 0001211608 00000 n 0001211728 00000 n 0001211848 00000 n 0001211968 00000 n 0001212093 00000 n 0001212214 00000 n 0001212334 00000 n 0001212456 00000 n 0001212580 00000 n 0001212704 00000 n 0001212832 00000 n 0001212963 00000 n 0001213085 00000 n 0001213208 00000 n 0001213328 00000 n 0001213450 00000 n 0001213567 00000 n 0001213685 00000 n 0001213803 00000 n 0001215485 00000 n 0001214310 00000 n 0001215383 00000 n 0001214418 00000 n 0001214539 00000 n 0001214660 00000 n 0001214784 00000 n 0001214903 00000 n 0001215020 00000 n 0001215146 00000 n 0001215263 00000 n 0001219731 00000 n 0001215731 00000 n 0001219630 00000 n 0001215834 00000 n 0001215955 00000 n 0001216076 00000 n 0001216195 00000 n 0001216316 00000 n 0001216433 00000 n 0001216555 00000 n 0001216679 00000 n 0001216810 00000 n 0001216930 00000 n 0001217057 00000 n 0001217177 00000 n 0001217304 00000 n 0001217420 00000 n 0001217541 00000 n 0001217669 00000 n 0001217786 00000 n 0001217910 00000 n 0001218028 00000 n 0001218153 00000 n 0001218272 00000 n 0001218398 00000 n 0001218513 00000 n 0001218635 00000 n 0001218760 00000 n 0001218892 00000 n 0001219013 00000 n 0001219141 00000 n 0001219261 00000 n 0001219379 00000 n 0001219504 00000 n 0001220405 00000 n 0001219972 00000 n 0001220305 00000 n 0001220072 00000 n 0001220189 00000 n 0001220740 00000 n 0001220650 00000 n 0001221410 00000 n 0001220985 00000 n 0001221305 00000 n 0001221081 00000 n 0001221193 00000 n 0001222906 00000 n 0001221728 00000 n 0001222799 00000 n 0001221825 00000 n 0001221938 00000 n 0001222065 00000 n 0001222197 00000 n 0001222324 00000 n 0001222441 00000 n 0001222558 00000 n 0001222675 00000 n 0001224018 00000 n 0001223155 00000 n 0001223923 00000 n 0001223251 00000 n 0001223364 00000 n 0001223476 00000 n 0001223587 00000 n 0001223700 00000 n 0001223810 00000 n 0001225577 00000 n 0001224304 00000 n 0001225473 00000 n 0001224402 00000 n 0001224515 00000 n 0001224629 00000 n 0001224747 00000 n 0001224863 00000 n 0001224986 00000 n 0001225102 00000 n 0001225223 00000 n 0001225345 00000 n 0001225944 00000 n 0001225862 00000 n 0001233850 00000 n 0001226310 00000 n 0001233743 00000 n 0001226417 00000 n 0001226535 00000 n 0001226662 00000 n 0001226795 00000 n 0001226913 00000 n 0001227030 00000 n 0001227148 00000 n 0001227269 00000 n 0001227388 00000 n 0001227508 00000 n 0001227630 00000 n 0001227757 00000 n 0001227890 00000 n 0001228023 00000 n 0001228149 00000 n 0001228275 00000 n 0001228400 00000 n 0001228531 00000 n 0001228647 00000 n 0001228769 00000 n 0001228890 00000 n 0001229005 00000 n 0001229122 00000 n 0001229245 00000 n 0001229362 00000 n 0001229485 00000 n 0001229602 00000 n 0001229725 00000 n 0001229841 00000 n 0001229963 00000 n 0001230084 00000 n 0001230204 00000 n 0001230320 00000 n 0001230442 00000 n 0001230563 00000 n 0001230680 00000 n 0001230803 00000 n 0001230925 00000 n 0001231043 00000 n 0001231163 00000 n 0001231290 00000 n 0001231415 00000 n 0001231540 00000 n 0001231671 00000 n 0001231802 00000 n 0001231926 00000 n 0001232050 00000 n 0001232173 00000 n 0001232291 00000 n 0001232415 00000 n 0001232533 00000 n 0001232657 00000 n 0001232775 00000 n 0001232899 00000 n 0001233016 00000 n 0001233139 00000 n 0001233256 00000 n 0001233379 00000 n 0001233501 00000 n 0001233619 00000 n 0001235884 00000 n 0001234204 00000 n 0001235776 00000 n 0001234310 00000 n 0001234431 00000 n 0001234553 00000 n 0001234678 00000 n 0001234801 00000 n 0001234925 00000 n 0001235051 00000 n 0001235171 00000 n 0001235290 00000 n 0001235410 00000 n 0001235533 00000 n 0001235654 00000 n 0001236543 00000 n 0001236125 00000 n 0001236446 00000 n 0001236222 00000 n 0001236334 00000 n 0001238594 00000 n 0001236901 00000 n 0001238495 00000 n 0001236999 00000 n 0001237113 00000 n 0001237227 00000 n 0001237345 00000 n 0001237459 00000 n 0001237577 00000 n 0001237697 00000 n 0001237812 00000 n 0001237925 00000 n 0001238038 00000 n 0001238151 00000 n 0001238264 00000 n 0001238379 00000 n 0001240556 00000 n 0001239004 00000 n 0001240446 00000 n 0001239112 00000 n 0001239235 00000 n 0001239358 00000 n 0001239484 00000 n 0001239607 00000 n 0001239730 00000 n 0001239850 00000 n 0001239973 00000 n 0001240094 00000 n 0001240207 00000 n 0001240326 00000 n 0001244044 00000 n 0001240858 00000 n 0001243928 00000 n 0001240964 00000 n 0001241086 00000 n 0001241208 00000 n 0001241328 00000 n 0001241446 00000 n 0001241560 00000 n 0001241678 00000 n 0001241796 00000 n 0001241911 00000 n 0001242026 00000 n 0001242140 00000 n 0001242258 00000 n 0001242372 00000 n 0001242490 00000 n 0001242604 00000 n 0001242722 00000 n 0001242836 00000 n 0001242954 00000 n 0001243068 00000 n 0001243186 00000 n 0001243301 00000 n 0001243423 00000 n 0001243544 00000 n 0001243678 00000 n 0001243803 00000 n 0001251477 00000 n 0001244350 00000 n 0001251379 00000 n 0001244450 00000 n 0001244570 00000 n 0001244691 00000 n 0001244815 00000 n 0001244941 00000 n 0001245064 00000 n 0001245185 00000 n 0001245306 00000 n 0001245428 00000 n 0001245548 00000 n 0001245669 00000 n 0001245792 00000 n 0001245909 00000 n 0001246026 00000 n 0001246144 00000 n 0001246260 00000 n 0001246376 00000 n 0001246492 00000 n 0001246608 00000 n 0001246729 00000 n 0001246848 00000 n 0001246968 00000 n 0001247085 00000 n 0001247207 00000 n 0001247326 00000 n 0001247450 00000 n 0001247575 00000 n 0001247694 00000 n 0001247823 00000 n 0001247942 00000 n 0001248059 00000 n 0001248176 00000 n 0001248298 00000 n 0001248421 00000 n 0001248541 00000 n 0001248660 00000 n 0001248779 00000 n 0001248903 00000 n 0001249028 00000 n 0001249146 00000 n 0001249269 00000 n 0001249393 00000 n 0001249507 00000 n 0001249622 00000 n 0001249737 00000 n 0001249854 00000 n 0001249971 00000 n 0001250086 00000 n 0001250199 00000 n 0001250319 00000 n 0001250439 00000 n 0001250559 00000 n 0001250677 00000 n 0001250797 00000 n 0001250917 00000 n 0001251036 00000 n 0001251149 00000 n 0001251264 00000 n 0001252143 00000 n 0001251714 00000 n 0001252041 00000 n 0001251811 00000 n 0001251925 00000 n 0001254011 00000 n 0001252381 00000 n 0001253914 00000 n 0001252486 00000 n 0001252622 00000 n 0001252757 00000 n 0001252887 00000 n 0001253016 00000 n 0001253138 00000 n 0001253273 00000 n 0001253407 00000 n 0001253531 00000 n 0001253657 00000 n 0001253786 00000 n 0001254402 00000 n 0001254316 00000 n 0001254651 00000 n 0001254750 00000 n 0001254856 00000 n 0001254967 00000 n 0001255076 00000 n 0001255182 00000 n 0001255296 00000 n 0001255409 00000 n 0001255519 00000 n 0001255597 00000 n 0001255685 00000 n 0001255773 00000 n 0001255861 00000 n 0001255949 00000 n 0001256033 00000 n 0001256142 00000 n 0001256266 00000 n 0001256387 00000 n 0001256508 00000 n 0001256638 00000 n 0001256759 00000 n 0001256880 00000 n 0001256992 00000 n 0001257113 00000 n 0001257228 00000 n 0001257330 00000 n 0001257421 00000 n 0001257542 00000 n 0001257648 00000 n 0001257747 00000 n 0001257865 00000 n 0001257955 00000 n 0001258060 00000 n 0001258153 00000 n 0001258258 00000 n 0001258366 00000 n 0001258471 00000 n 0001258562 00000 n 0001258643 00000 n 0001258751 00000 n 0001258859 00000 n 0001258964 00000 n 0001259072 00000 n 0001259159 00000 n 0001259280 00000 n 0001259404 00000 n 0001259525 00000 n 0001259612 00000 n 0001259732 00000 n 0001259823 00000 n 0001259914 00000 n 0001260034 00000 n 0001260128 00000 n 0001260212 00000 n 0001260305 00000 n 0001260405 00000 n 0001260493 00000 n 0001260577 00000 n 0001260673 00000 n 0001260758 00000 n 0001260854 00000 n 0001260966 00000 n 0001261057 00000 n 0001261190 00000 n 0001261338 00000 n 0001261471 00000 n 0001261573 00000 n 0001261697 00000 n 0001261806 00000 n 0001261921 00000 n 0001262038 00000 n 0001262155 00000 n 0001262269 00000 n 0001262386 00000 n 0001262467 00000 n 0001262555 00000 n 0001262646 00000 n 0001262734 00000 n 0001262825 00000 n 0001262934 00000 n 0001263061 00000 n 0001263191 00000 n 0001263294 00000 n 0001263397 00000 n 0001263490 00000 n 0001263596 00000 n 0001263714 00000 n 0001263847 00000 n 0001263971 00000 n 0001264107 00000 n 0001264261 00000 n 0001264424 00000 n 0001264587 00000 n 0001264759 00000 n 0001264916 00000 n 0001265094 00000 n 0001265272 00000 n 0001265462 00000 n 0001265640 00000 n 0001265824 00000 n 0001265963 00000 n 0001266117 00000 n 0001266280 00000 n 0001266374 00000 n 0001266504 00000 n 0001266622 00000 n 0001266734 00000 n 0001266861 00000 n 0001266982 00000 n 0001267103 00000 n 0001267224 00000 n 0001267360 00000 n 0001267484 00000 n 0001267605 00000 n 0001267732 00000 n 0001267853 00000 n 0001267971 00000 n 0001268092 00000 n 0001268216 00000 n 0001268349 00000 n 0001268485 00000 n 0001268609 00000 n 0001268730 00000 n 0001268829 00000 n 0001268928 00000 n 0001269043 00000 n 0001269137 00000 n 0001269231 00000 n 0001269324 00000 n 0001269439 00000 n 0001269599 00000 n 0001269756 00000 n 0001269898 00000 n 0001270037 00000 n 0001270137 00000 n 0001270303 00000 n 0001270466 00000 n 0001270599 00000 n 0001270738 00000 n 0001270886 00000 n 0001271031 00000 n 0001271149 00000 n 0001271282 00000 n 0001271433 00000 n 0001271539 00000 n 0001271642 00000 n 0001271748 00000 n 0001271863 00000 n 0001271972 00000 n 0001272084 00000 n 0001272202 00000 n 0001272335 00000 n 0001272486 00000 n 0001272637 00000 n 0001272767 00000 n 0001272897 00000 n 0001273015 00000 n 0001273127 00000 n 0001273266 00000 n 0001273378 00000 n 0001273499 00000 n 0001273614 00000 n 0001273722 00000 n 0001273855 00000 n 0001273988 00000 n 0001274133 00000 n 0001274287 00000 n 0001274417 00000 n 0001274531 00000 n 0001274645 00000 n 0001274756 00000 n 0001274870 00000 n 0001274952 00000 n 0001275048 00000 n 0001275156 00000 n 0001275250 00000 n 0001275356 00000 n 0001275447 00000 n 0001275559 00000 n 0001275652 00000 n 0001275757 00000 n 0001275862 00000 n 0001275980 00000 n 0001276104 00000 n 0001276228 00000 n 0001276364 00000 n 0001276473 00000 n 0001276594 00000 n 0001276727 00000 n 0001276836 00000 n 0001276942 00000 n 0001277057 00000 n 0001277175 00000 n 0001277275 00000 n 0001277414 00000 n 0001277532 00000 n 0001277656 00000 n 0001277792 00000 n 0001277913 00000 n 0001278037 00000 n 0001278182 00000 n 0001278330 00000 n 0001278481 00000 n 0001278641 00000 n 0001278798 00000 n 0001278931 00000 n 0001279067 00000 n 0001279206 00000 n 0001279354 00000 n 0001279499 00000 n 0001279620 00000 n 0001279744 00000 n 0001279877 00000 n 0001280016 00000 n 0001280146 00000 n 0001280270 00000 n 0001280394 00000 n 0001280521 00000 n 0001280642 00000 n 0001280766 00000 n 0001280896 00000 n 0001281008 00000 n 0001281120 00000 n 0001281235 00000 n 0001281344 00000 n 0001281453 00000 n 0001281562 00000 n 0001281671 00000 n 0001281795 00000 n 0001281913 00000 n 0001282034 00000 n 0001282146 00000 n 0001282273 00000 n 0001282391 00000 n 0001282524 00000 n 0001282660 00000 n 0001282778 00000 n 0001282926 00000 n 0001283044 00000 n 0001283156 00000 n 0001283268 00000 n 0001283395 00000 n 0001283525 00000 n 0001283646 00000 n 0001283764 00000 n 0001283882 00000 n 0001284015 00000 n 0001284151 00000 n 0001284266 00000 n 0001284396 00000 n 0001284529 00000 n 0001284632 00000 n 0001284738 00000 n 0001284844 00000 n 0001284956 00000 n 0001285068 00000 n 0001285174 00000 n 0001285274 00000 n 0001285395 00000 n 0001285516 00000 n 0001285637 00000 n 0001285752 00000 n 0001285873 00000 n 0001285994 00000 n 0001286112 00000 n 0001286212 00000 n 0001286318 00000 n 0001286424 00000 n 0001286527 00000 n 0001286627 00000 n 0001286721 00000 n 0001286814 00000 n 0001286907 00000 n 0001286997 00000 n 0001287090 00000 n 0001287180 00000 n 0001287273 00000 n 0001287363 00000 n 0001287453 00000 n 0001287543 00000 n 0001287661 00000 n 0001287749 00000 n 0001287840 00000 n 0001287928 00000 n 0001288046 00000 n 0001288134 00000 n 0001288233 00000 n 0001288317 00000 n 0001288398 00000 n 0001288506 00000 n 0001288602 00000 n 0001288680 00000 n 0001288773 00000 n 0001288878 00000 n 0001288956 00000 n 0001289046 00000 n 0001289130 00000 n 0001289247 00000 n 0001289391 00000 n 0001289493 00000 n 0001289598 00000 n 0001289700 00000 n 0001289820 00000 n 0001289958 00000 n 0001290105 00000 n 0001290213 00000 n 0001290318 00000 n 0001290409 00000 n 0001290511 00000 n 0001290610 00000 n 0001290706 00000 n 0001290818 00000 n 0001290927 00000 n 0001291036 00000 n 0001291148 00000 n 0001291266 00000 n 0001291375 00000 n 0001291468 00000 n 0001291562 00000 n 0001291653 00000 n 0001291747 00000 n 0001291853 00000 n 0001291953 00000 n 0001292074 00000 n 0001292174 00000 n 0001292289 00000 n 0001292407 00000 n 0001292543 00000 n 0001292655 00000 n 0001292743 00000 n 0001292837 00000 n 0001292960 00000 n 0001293083 00000 n 0001293203 00000 n 0001293326 00000 n 0001293429 00000 n 0001293525 00000 n 0001293642 00000 n 0001293735 00000 n 0001293834 00000 n 0001293936 00000 n 0001294039 00000 n 0001294139 00000 n 0001294239 00000 n 0001294363 00000 n 0001294481 00000 n 0001294574 00000 n 0001294667 00000 n 0001294776 00000 n 0001294891 00000 n 0001295015 00000 n 0001295139 00000 n 0001295260 00000 n 0001295390 00000 n 0001295529 00000 n 0001295689 00000 n 0001295813 00000 n 0001295952 00000 n 0001296091 00000 n 0001296230 00000 n 0001296369 00000 n 0001296505 00000 n 0001296620 00000 n 0001296750 00000 n 0001296871 00000 n 0001297004 00000 n 0001297125 00000 n 0001297252 00000 n 0001297358 00000 n 0001297467 00000 n 0001297582 00000 n 0001297697 00000 n 0001297815 00000 n 0001297930 00000 n 0001298048 00000 n 0001298175 00000 n 0001298296 00000 n 0001298420 00000 n 0001298550 00000 n 0001298662 00000 n 0001298771 00000 n 0001298883 00000 n 0001299004 00000 n 0001299119 00000 n 0001299237 00000 n 0001299361 00000 n 0001299442 00000 n 0001299575 00000 n 0001299729 00000 n 0001299850 00000 n 0001299992 00000 n 0001300113 00000 n 0001300255 00000 n 0001300364 00000 n 0001300488 00000 n 0001300633 00000 n 0001300745 00000 n 0001300878 00000 n 0001300993 00000 n 0001301129 00000 n 0001301247 00000 n 0001301386 00000 n 0001301492 00000 n 0001301619 00000 n 0001301755 00000 n 0001301912 00000 n 0001302015 00000 n 0001302139 00000 n 0001302284 00000 n 0001302405 00000 n 0001302520 00000 n 0001302656 00000 n 0001302795 00000 n 0001302907 00000 n 0001303025 00000 n 0001303146 00000 n 0001303267 00000 n 0001303391 00000 n 0001303515 00000 n 0001303642 00000 n 0001303769 00000 n 0001303887 00000 n 0001304026 00000 n 0001304147 00000 n 0001304289 00000 n 0001304398 00000 n 0001304528 00000 n 0001304640 00000 n 0001304773 00000 n 0001304894 00000 n 0001305036 00000 n 0001305145 00000 n 0001305275 00000 n 0001305390 00000 n 0001305505 00000 n 0001305641 00000 n 0001305747 00000 n 0001305862 00000 n 0001305998 00000 n 0001306122 00000 n 0001306267 00000 n 0001306379 00000 n 0001306512 00000 n 0001306624 00000 n 0001306733 00000 n 0001306833 00000 n 0001306939 00000 n 0001307059 00000 n 0001307174 00000 n 0001307282 00000 n 0001307387 00000 n 0001307510 00000 n 0001307621 00000 n 0001307729 00000 n 0001307816 00000 n 0001307918 00000 n 0001308026 00000 n 0001308128 00000 n 0001308255 00000 n 0001308382 00000 n 0001308509 00000 n 0001308630 00000 n 0001308745 00000 n 0001308848 00000 n 0001308963 00000 n 0001309078 00000 n 0001309184 00000 n 0001309290 00000 n 0001309393 00000 n 0001309508 00000 n 0001309611 00000 n 0001309726 00000 n 0001309829 00000 n 0001309944 00000 n 0001310047 00000 n 0001310162 00000 n 0001310265 00000 n 0001310380 00000 n 0001310486 00000 n 0001310613 00000 n 0001310737 00000 n 0001310900 00000 n 0001311036 00000 n 0001311172 00000 n 0001311329 00000 n 0001311446 00000 n 0001311560 00000 n 0001311653 00000 n 0001311759 00000 n 0001311871 00000 n 0001311968 00000 n 0001312059 00000 n 0001312150 00000 n 0001312241 00000 n 0001312332 00000 n 0001312489 00000 n 0001312628 00000 n 0001312764 00000 n 0001312909 00000 n 0001313057 00000 n 0001313202 00000 n 0001313356 00000 n 0001313483 00000 n 0001313616 00000 n 0001313752 00000 n 0001313900 00000 n 0001314024 00000 n 0001314151 00000 n 0001314269 00000 n 0001314396 00000 n 0001314514 00000 n 0001314644 00000 n 0001314762 00000 n 0001314868 00000 n 0001314961 00000 n 0001315054 00000 n 0001315159 00000 n 0001315252 00000 n 0001315345 00000 n 0001315451 00000 n 0001315578 00000 n 0001315669 00000 n 0001315759 00000 n 0001315874 00000 n 0001315998 00000 n 0001316109 00000 n 0001316223 00000 n 0001316319 00000 n 0001316427 00000 n 0001316538 00000 n 0001316659 00000 n 0001316758 00000 n 0001316857 00000 n 0001316968 00000 n 0001317079 00000 n 0001317193 00000 n 0001317289 00000 n 0001317424 00000 n 0001317523 00000 n 0001317631 00000 n 0001317739 00000 n 0001317844 00000 n 0001317949 00000 n 0001318054 00000 n 0001318159 00000 n 0001318297 00000 n 0001318402 00000 n 0001318498 00000 n 0001318597 00000 n 0001318715 00000 n 0001318817 00000 n 0001318920 00000 n 0001319016 00000 n 0001319137 00000 n 0001319270 00000 n 0001319366 00000 n 0001319469 00000 n 0001319584 00000 n 0001319720 00000 n 0001319826 00000 n 0001319932 00000 n 0001320059 00000 n 0001320165 00000 n 0001320292 00000 n 0001320407 00000 n 0001320543 00000 n 0001320670 00000 n 0001320800 00000 n 0001320921 00000 n 0001321048 00000 n 0001321160 00000 n 0001321275 00000 n 0001321390 00000 n 0001321520 00000 n 0001321647 00000 n 0001321771 00000 n 0001321892 00000 n 0001322016 00000 n 0001322140 00000 n 0001322267 00000 n 0001322394 00000 n 0001322491 00000 n 0001322591 00000 n 0001322703 00000 n 0001322833 00000 n 0001322914 00000 n 0001323011 00000 n 0001323108 00000 n 0001323208 00000 n 0001323305 00000 n 0001323402 00000 n 0001323499 00000 n 0001323605 00000 n 0001323714 00000 n 0001323820 00000 n 0001323923 00000 n 0001324038 00000 n 0001324138 00000 n 0001324234 00000 n 0001324334 00000 n 0001324428 00000 n 0001324530 00000 n 0001324623 00000 n 0001324716 00000 n 0001324803 00000 n 0001324905 00000 n 0001325001 00000 n 0001325092 00000 n 0001325207 00000 n 0001325343 00000 n 0001325449 00000 n 0001325576 00000 n 0001325682 00000 n 0001325809 00000 n 0001325890 00000 n 0001325986 00000 n 0001326085 00000 n 0001326196 00000 n 0001326292 00000 n 0001326410 00000 n 0001326537 00000 n 0001326682 00000 n 0001326782 00000 n 0001326900 00000 n 0001327015 00000 n 0001327112 00000 n 0001327227 00000 n 0001327339 00000 n 0001327442 00000 n 0001327563 00000 n 0001327666 00000 n 0001327787 00000 n 0001327890 00000 n 0001328011 00000 n 0001328111 00000 n 0001328229 00000 n 0001328329 00000 n 0001328447 00000 n 0001328562 00000 n 0001328661 00000 n 0001328764 00000 n 0001328885 00000 n 0001329003 00000 n 0001329109 00000 n 0001329221 00000 n 0001329354 00000 n 0001329481 00000 n 0001329608 00000 n 0001329753 00000 n 0001329898 00000 n 0001330022 00000 n 0001330146 00000 n 0001330267 00000 n 0001330373 00000 n 0001330497 00000 n 0001330603 00000 n 0001330727 00000 n 0001330833 00000 n 0001330957 00000 n 0001331060 00000 n 0001331181 00000 n 0001331284 00000 n 0001331405 00000 n 0001331523 00000 n 0001331629 00000 n 0001331753 00000 n 0001331874 00000 n 0001331989 00000 n 0001332079 00000 n 0001332175 00000 n 0001332271 00000 n 0001332379 00000 n 0001332475 00000 n 0001332571 00000 n 0001332662 00000 n 0001332786 00000 n 0001332883 00000 n 0001332986 00000 n 0001333104 00000 n 0001333234 00000 n 0001333379 00000 n 0001333506 00000 n 0001333600 00000 n 0001333700 00000 n 0001333806 00000 n 0001333915 00000 n 0001334045 00000 n 0001334163 00000 n 0001334296 00000 n 0001334381 00000 n 0001334502 00000 n 0001334626 00000 n 0001334750 00000 n 0001334871 00000 n 0001334959 00000 n 0001335044 00000 n 0001335137 00000 n 0001335258 00000 n 0001335364 00000 n 0001335451 00000 n 0001335542 00000 n 0001335624 00000 n 0001335712 00000 n 0001335815 00000 n 0001335911 00000 n 0001336005 00000 n 0001336087 00000 n 0001336172 00000 n 0001336269 00000 n 0001336363 00000 n 0001336454 00000 n 0001336557 00000 n 0001336642 00000 n 0001336748 00000 n 0001336839 00000 n 0001336930 00000 n 0001337018 00000 n 0001337103 00000 n 0001337194 00000 n 0001337279 00000 n 0001337370 00000 n 0001337476 00000 n 0001337603 00000 n 0001337694 00000 n 0001337797 00000 n 0001337903 00000 n 0001337994 00000 n 0001338094 00000 n 0001338193 00000 n 0001338275 00000 n 0001351420 00000 n 0001351800 00000 n 0001352520 00000 n trailer << /Root 5883 0 R /Info 1 0 R /ID [<8505B9EBF640BF9CA1DA6273EC0E764B> <8505B9EBF640BF9CA1DA6273EC0E764B>] /Size 5886 >> startxref 1352560 %%EOF systemtap-4.2/doc/SystemTap_Tapset_Reference/tapsets.tmpl000066400000000000000000000347741356460210500240060ustar00rootroot00000000000000 SystemTap Tapset Reference Manual 2008-2015 Red Hat, Inc. and others SystemTap Hackers This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. For more details see the file COPYING in the source distribution of Linux. Introduction SystemTap provides free software (GPL) infrastructure to simplify the gathering of information about the running Linux system. This assists diagnosis of a performance or functional problem. SystemTap eliminates the need for the developer to go through the tedious and disruptive instrument, recompile, install, and reboot sequence that may be otherwise required to collect data. SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live running kernel. The instrumentation makes extensive use of the probe points and functions provided in the tapset library. This document describes the various probe points and functions.

Tapset Name Format In this guide, tapset definitions appear in the following format: name:return (parameters) definition The return field specifies what data type the tapset extracts and returns from the kernel during a probe (and thus, returns). Tapsets use 2 data types for return: long (tapset extracts and returns an integer) and string (tapset extracts and returns a string). In some cases, tapsets do not have a return value. This simply means that the tapset does not extract anything from the kernel. This is common among asynchronous events such as timers, exit functions, and print functions.
Context Functions The context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. !Itapset/context.stp !Itapset/linux/context.stp !Itapset/linux/context-envvar.stp !Itapset/linux/context-symbols.stp !Itapset/linux/ucontext.stp !Itapset/linux/ucontext-symbols.stp !Itapset/linux/context-unwind.stp !Itapset/linux/context-caller.stp !Itapset/linux/ucontext-unwind.stp !Itapset/linux/task.stp !Itapset/linux/task_ancestry.stp !Itapset/pn.stp !Itapset/linux/pstrace.stp !Itapset/registers.stp Timestamp Functions Each timestamp function returns a value to indicate when a function is executed. These returned values can then be used to indicate when an event occurred, provide an ordering for events, or compute the amount of time elapsed between two time stamps. !Itapset/linux/timestamp.stp !Itapset/linux/timestamp_gtod.stp !Itapset/linux/timestamp_monotonic.stp !Itapset/stopwatch.stp Time utility functions Utility functions to turn seconds since the epoch (as returned by the timestamp function gettimeofday_s()) into a human readable date/time strings. !Itapset/linux/ctime.stp !Itapset/linux/tzinfo.stp !Itapset/tzinfo.stp Shell command functions Utility functions to enqueue shell commands. !Itapset/system.stp Memory Tapset This family of probe points is used to probe memory-related events or query the memory usage of the current process. It contains the following probe points: !Itapset/linux/memory.stp !Itapset/linux/proc_mem.stp Task Time Tapset This tapset defines utility functions to query time related properties of the current tasks, translate those in miliseconds and human readable strings. !Itapset/linux/task_time.stp Scheduler Tapset This family of probe points is used to probe the task scheduler activities. It contains the following probe points: !Itapset/linux/scheduler.stp IO Scheduler and block IO Tapset This family of probe points is used to probe block IO layer and IO scheduler activities. It contains the following probe points: !Itapset/linux/ioscheduler.stp !Itapset/linux/ioblock.stp SCSI Tapset This family of probe points is used to probe SCSI activities. It contains the following probe points: !Itapset/linux/scsi.stp TTY Tapset This family of probe points is used to probe TTY (Teletype) activities. It contains the following probe points: !Itapset/linux/tty.stp Interrupt Request (IRQ) Tapset This family of probe points is used to probe interrupt request (IRQ) activities. It contains the following probe points: !Itapset/linux/irq.stp Networking Tapset This family of probe points is used to probe the activities of the network device and protocol layers. !Itapset/linux/networking.stp !Itapset/linux/tcp.stp !Itapset/linux/udp.stp !Itapset/linux/ip.stp !Itapset/linux/inet.stp !Itapset/linux/rpc.stp !Itapset/linux/netfilter.stp Socket Tapset This family of probe points is used to probe socket activities. It contains the following probe points: !Itapset/linux/socket.stp !Itapset/linux/inet_sock.stp SNMP Information Tapset This family of probe points is used to probe socket activities to provide SNMP type information. It contains the following functions and probe points: !Itapset/linux/ipmib.stp !Itapset/linux/ipmib-filter-default.stp !Itapset/linux/tcpmib.stp !Itapset/linux/tcpmib-filter-default.stp !Itapset/linux/linuxmib.stp !Itapset/linux/linuxmib-filter-default.stp Kernel Process Tapset This family of probe points is used to probe process-related activities. It contains the following probe points: !Itapset/linux/kprocess.stp !Itapset/linux/target_set.stp !Itapset/linux/loadavg.stp Signal Tapset This family of probe points is used to probe signal activities. It contains the following probe points: !Itapset/linux/signal.stp Errno Tapset This set of functions is used to handle errno number values. It contains the following functions: !Itapset/errno.stp RLIMIT Tapset This set of functions is used to handle string which defines resource limits (RLIMIT_*) and returns corresponding number of resource limit. It contains the following functions: !Itapset/linux/rlimit.stp Device Tapset This set of functions is used to handle kernel and userspace device numbers. It contains the following functions: !Itapset/linux/dev.stp Directory-entry (dentry) Tapset This family of functions is used to map kernel VFS directory entry pointers to file or full path names. !Itapset/linux/dentry.stp Logging Tapset This family of functions is used to send simple message strings to various destinations. !Itapset/logging.stp !Itapset/linux/logging.stp Queue Statistics Tapset This family of functions is used to track performance of queuing systems. !Itapset/queue_stats.stp Random functions Tapset These functions deal with random number generation. !Itapset/random.stp String and data retrieving functions Tapset Functions to retrieve strings and other primitive types from the kernel or a user space programs based on addresses. All strings are of a maximum length given by MAXSTRINGLEN. !Itapset/linux/conversions.stp !Itapset/linux/atomic.stp !Itapset/uconversions.stp String and data writing functions Tapset The SystemTap guru mode can be used to test error handling in kernel code by simulating faults. The functions in the this tapset provide standard methods of writing to primitive types in the kernel's memory. All the functions in this tapset require the use of guru mode (-g). !Itapset/linux/conversions-guru.stp !Itapset/uconversions-guru.stp Guru tapsets Functions to deliberately interfere with the system's behavior, in order to inject faults or improve observability. All the functions in this tapset require the use of guru mode (-g). !Itapset/linux/guru-delay.stp !Itapset/linux/panic.stp !Itapset/linux/guru-signal.stp A collection of standard string functions Functions to get the length, a substring, getting at individual characters, string seaching, escaping, tokenizing, and converting strings to longs. !Itapset/string.stp !Itapset/tokenize.stp !Itapset/regex.stp Utility functions for using ansi control chars in logs Utility functions for logging using ansi control characters. This lets you manipulate the cursor position and character color output and attributes of log messages. !Itapset/ansi.stp !Itapset/indent.stp SystemTap Translator Tapset This family of user-space probe points is used to probe the operation of the SystemTap translator (stap) and run command (staprun). The tapset includes probes to watch the various phases of SystemTap and SystemTap's management of instrumentation cache. It contains the following probe points: !Itapset/stap_staticmarkers.stp Network File Storage Tapsets This family of probe points is used to probe network file storage functions and operations. !Itapset/linux/nfs_proc.stp !Itapset/linux/nfs.stp !Itapset/linux/nfsd.stp !Itapset/linux/nfsderrno.stp Speculation This family of functions provides the ability to speculative record information and then at a later point in the SystemTap script either commit the information or discard it. !Itapset/speculative.stp JSON Tapset This family of probe points, functions, and macros is used to output data in JSON format. It contains the following probe points, functions, and macros: !Itapset/linux/json.stp !Itapset/linux/json.stpm Output file switching Tapset Utility function to allow switching of output files. !Itapset/switchfile.stp Syscall Any Tapset This family of probe points is designed to provide low cost instrumentation for cases where only the syscall name (or number) and return value are required and there is no need for the detailed syscall argument values. They are restricted versions of syscall.* and syscall.*.return. !Itapset/linux/syscall_any.stp !Syscalls systemtap-4.2/doc/Tapset_Reference_Guide/000077500000000000000000000000001356460210500205125ustar00rootroot00000000000000systemtap-4.2/doc/Tapset_Reference_Guide/Makefile000066400000000000000000000006411356460210500221530ustar00rootroot00000000000000#Makefile for Tapset_Reference_Guide XML_LANG = en-US DOCNAME = Tapset_Reference_Guide #PRODUCT = FIX_ME! BRAND = fedora #OTHER_LANGS = as-IN bn-IN de-DE es-ES fr-FR gu-IN hi-IN it-IT ja-JP kn-IN ko-KR ml-IN mr-IN or-IN pa-IN pt-BR ru-RU si-LK ta-IN te-IN zh-CN zh-TW # Extra Parameters start here # Extra Parameters stop here COMMON_CONFIG = /usr/share/publican include $(COMMON_CONFIG)/make/Makefile.common systemtap-4.2/doc/Tapset_Reference_Guide/README000066400000000000000000000032661356460210500214010ustar00rootroot00000000000000The Publican Tapset Reference Guide is build from files generated during the build of SystemTap when it is configured with "--enable-refdocs". Assuming that SystemTap was built in /home/wcohen/systemtap/build, the file needed to generate the Publican Tapset Reference Guide would be /home/wcohen/systemtap/build/doc/SystemTap_Tapset_Reference/tapsets.xml. To generate the required DocBook XML file of the tapsets.xml file and build the Publican Tapset Reference Guide from this directory: export BUILD=/home/wcohen/systemtap/build ./publicanize.sh -i=$BUILD/doc/SystemTap_Tapset_Reference/tapsets.xml This will copy and clean the XML source of SystemTap_Tapset_Reference created by kernel-doc and place the resulting file in ./en-US/Tapset_Reference_Guide.xml. You can now build it in pdf, html, etc using Publican. To make the Publican pdf file: make pdf-en-US The resulting output file will be ./tmp/en-US/pdf/Tapset_Reference_Guide.pdf The main source of the Language Reference Guide is in the build directory: $BUILD/doc/SystemTap_Tapset_Reference/tapsets.xml This main source is generated by kernel-doc when you run 'make' in the main git tree. The tapset documentation inside is collected from all tapset files defined in the following template file: ../SystemTap_Tapset_Reference/tapsets.tmpl The tapset file definitions appear in tapsets.tmpl as: !Itapset/context.stp !Itapset/context-symbols.stp etc context.stp, context-symbols, and all the other tapset files are located in: ../../tapset All tapset documentation should be done inside their respective tapset files. For more information about this project, refer to: http://sourceware.org/systemtap/wiki/ProjectTapsetReferenceGuide systemtap-4.2/doc/Tapset_Reference_Guide/en-US/000077500000000000000000000000001356460210500214415ustar00rootroot00000000000000systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Author_Group.xml000066400000000000000000000013371356460210500246050ustar00rootroot00000000000000 Red Hat Enterprise Linux Documentation Don Domingo Engineering Services and Operations Content Services ddomingo@redhat.com William Cohen Engineering Services and Operations Performance Tools wcohen@redhat.com systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Book_Info.xml000066400000000000000000000023111356460210500240250ustar00rootroot00000000000000 Tapset Reference Guide For SystemTap in Fedora 10 Fedora 10 1.0 0 The Tapset Reference Guide describes the most common tapset definitions users can apply to SystemTap scripts. All included tapsets documented in this guide are current as of Fedora 10 and the latest upstream version of SystemTap. Logo &YEAR; &HOLDER; systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Introduction.xml000066400000000000000000000046631356460210500246550ustar00rootroot00000000000000 Introduction SystemTap provides free software (GPL) infrastructure to simplify the gathering of information about the running Linux system. This assists diagnosis of a performance or functional problem. SystemTap eliminates the need for the developer to go through the tedious and disruptive instrument, recompile, install, and reboot sequence that may be otherwise required to collect data. SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live, running kernel. This instrumentation uses probe points and functions provided in the tapset library. Simply put, tapsets are scripts that encapsulate knowledge about a kernel subsystem into pre-written probes and functions that can be used by other scripts. Tapsets are analogous to libraries for C programs. They hide the underlying details of a kernel area while exposing the key information needed to manage and monitor that aspect of the kernel. They are typically developed by kernel subject-matter experts. A tapset exposes the high-level data and state transitions of a subsystem. For the most part, good tapset developers assume that SystemTap users know little to nothing about the kernel subsystem's low-level details. As such, tapset developers write tapsets that help ordinary SystemTap users write meaningful and useful SystemTap scripts.
Documentation Goals This guide aims to document SystemTap's most useful and common tapset entries; it also contains guidelines on proper tapset development and documentation. The tapset definitions contained in this guide are extracted automatically from properly-formatted comments in the code of each tapset file. As such, any revisions to the definitions in this guide should be applied directly to their respective tapset file. add: "while users can read from code, it's easier to read from here!" add: target audience, expected proficiency of readers
systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Legal_Notice.xml000066400000000000000000000017221356460210500245120ustar00rootroot00000000000000 This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. For more details see the file COPYING in the source distribution of Linux. systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Preface.xml000066400000000000000000000011361356460210500235310ustar00rootroot00000000000000 Preface systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Tapset_Dev_Guide.xml000066400000000000000000000220311356460210500253340ustar00rootroot00000000000000 Tapset Development Guidelines This chapter describes the upstream guidelines on proper tapset documentation. It also contains information on how to properly document your tapsets, to ensure that they are properly defined in this guide.
Writing Good Tapsets The first step to writing good tapsets is to create a simple model of your subject area. For example, a model of the process subsystem might include the following: Key Data process ID parent process ID process group ID State Transitions forked exec'd running stopped terminated Note Both lists are examples, and are not meant to represent a complete list. Use your subsystem expertise to find probe points (function entries and exits) that expose the elements of the model, then define probe aliases for those points. Be aware that some state transitions can occur in more than one place. In those cases, an alias can place a probe in multiple locations. For example, process execs can occur in either the do_execve() or the compat_do_execve() functions. The following alias inserts probes at the beginning of those functions: probe kprocess.exec = kernel.function("do_execve"), kernel.function("compat_do_execve") {probe body} Try to place probes on stable interfaces (i.e., functions that are unlikely to change at the interface level) whenever possible. This will make the tapset less likely to break due to kernel changes. Where kernel version or architecture dependencies are unavoidable, use preprocessor conditionals (see the stap(1) man page for details). Fill in the probe bodies with the key data available at the probe points. Function entry probes can access the entry parameters specified to the function, while exit probes can access the entry parameters and the return value. Convert the data into meaningful forms where appropriate (e.g., bytes to kilobytes, state values to strings, etc). You may need to use auxiliary functions to access or convert some of the data. Auxiliary functions often use embedded C to do things that cannot be done in the SystemTap language, like access structure fields in some contexts, follow linked lists, etc. You can use auxiliary functions defined in other tapsets or write your own. In the following example, copy_process() returns a pointer to the task_struct for the new process. Note that the process ID of the new process is retrieved by calling task_pid() and passing it the task_struct pointer. In this case, the auxiliary function is an embedded C function defined in task.stp. probe kprocess.create = kernel.function("copy_process").return { task = $return new_pid = task_pid(task) } It is not advisable to write probes for every function. Most SystemTap users will not need or understand them. Keep your tapsets simple and high-level. info from here:http://sourceware.org/git/?p=systemtap.git;a=blob_plain;f=tapset/DEVGUIDE
Elements of a Tapset The following sections describe the most important aspects of writing a tapset. Most of the content herein is suitable for developers who wish to contribute to SystemTap's upstream library of tapsets.
Tapset Files Tapset files are stored in src/tapset/ of the SystemTap GIT directory. Most tapset files are kept at that level. If you have code that only works with a specific architecture or kernel version, you may choose to put your tapset in the appropriate subdirectory. Installed tapsets are located in /usr/share/systemtap/tapset/ or /usr/local/share/systemtap/tapset. Personal tapsets can be stored anywhere. However, to ensure that SystemTap can use them, use -I tapset_directory to specify their location when invoking stap.
Namespace Probe alias names should take the form tapset_name.probe_name. For example, the probe for sending a signal could be named signal.send. Global symbol names (probes, functions, and variables) should be unique accross all tapsets. This helps avoid namespace collisions in scripts that use multiple tapsets. To ensure this, use tapset-specific prefixes in your global symbols. Internal symbol names should be prefixed with an underscore (_).
Comments and Documentation All probes and functions should include comment blocks that describe their purpose, the data they provide, and the context in which they run (e.g. interrupt, process, etc). Use comments in areas where your intent may not be clear from reading the code. Note that specially-formatted comments are automatically extracted from most tapsets and included in this guide. This helps ensure that tapset contributors can write their tapset and document it in the same place. The specified format for documenting tapsets is as follows: /** * probe tapset.name - Short summary of what the tapset does. * @argument: Explanation of argument. * @argument2: Explanation of argument2. Probes can have multiple arguments. * * Context: * A brief explanation of the tapset context. * Note that the context should only be 1 paragraph short. * * Text that will appear under "Description." * * A new paragraph that will also appear under the heading "Description". * * Header: * A paragraph that will appear under the heading "Header". **/ For example: /** * probe vm.write_shared_copy- Page copy for shared page write. * @address: The address of the shared write. * @zero: Boolean indicating whether it is a zero page * (can do a clear instead of a copy). * * Context: * The process attempting the write. * * Fires when a write to a shared page requires a page copy. This is * always preceded by a vm.write_shared. **/ To override the automatically-generated Synopsis content, use: * Synopsis: * New Synopsis string * For example: /** * probe signal.handle - Fires when the signal handler is invoked * @sig: The signal number that invoked the signal handler * * Synopsis: * <programlisting>static int handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, * sigset_t *oldset, struct pt_regs * regs)</programlisting> */ It is recommended that you use the <programlisting> tag in this instance, since overriding the Synopsis content of an entry does not automatically form the necessary tags. For the purposes of improving the DocBook XML output of your comments, you can also use the following XML tags in your comments: command emphasis programlisting remark (tagged strings will appear in Publican beta builds of the document)
systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Tapset_Reference_Guide.ent000066400000000000000000000002521356460210500265030ustar00rootroot00000000000000 systemtap-4.2/doc/Tapset_Reference_Guide/en-US/Tapset_Reference_Guide.xml000066400000000000000000035174141356460210500265350ustar00rootroot00000000000000 Context Functions The context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. LINUX SystemTap Tapset Reference November 2019 function::addr 3stap function::addr Address of the current probe point. Synopsis addr:long() Arguments None Description Returns the instruction pointer from the current probe's register state. Not all probe types have registers though, in which case zero is returned. The returned address is suitable for use with functions like symname and symdata. LINUX SystemTap Tapset Reference November 2019 function::asmlinkage 3stap function::asmlinkage Mark function as declared asmlinkage Synopsis asmlinkage() Arguments None Description Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared asmlinkage in the source. LINUX SystemTap Tapset Reference November 2019 function::backtrace 3stap function::backtrace Hex backtrace of current kernel stack Synopsis backtrace:string() Arguments None Description This function returns a string of hex addresses that are a backtrace of the kernel stack. Output may be truncated as per maximum string length (MAXSTRINGLEN). See ubacktrace for user-space backtrace. LINUX SystemTap Tapset Reference November 2019 function::caller 3stap function::caller Return name and address of calling function Synopsis caller:string() Arguments None Description This function returns the address and name of the calling function. This is equivalent to calling: sprintf("s 0xx", symname(caller_addr), caller_addr) LINUX SystemTap Tapset Reference November 2019 function::caller_addr 3stap function::caller_addr Return caller address Synopsis caller_addr:long() Arguments None Description This function returns the address of the calling function. LINUX SystemTap Tapset Reference November 2019 function::callers 3stap function::callers Return first n elements of kernel stack backtrace Synopsis callers:string(n:long) Arguments n number of levels to descend in the stack (not counting the top level). If n is -1, print the entire stack. Description This function returns a string of the first n hex addresses from the backtrace of the kernel stack. Output may be truncated as per maximum string length (MAXSTRINGLEN). LINUX SystemTap Tapset Reference November 2019 function::cmdline_arg 3stap function::cmdline_arg Fetch a command line argument Synopsis cmdline_arg:string(n:long) Arguments n Argument to get (zero is the program itself) Description Returns argument the requested argument from the current process or the empty string when there are not that many arguments or there is a problem retrieving the argument. Argument zero is traditionally the command itself. LINUX SystemTap Tapset Reference November 2019 function::cmdline_args 3stap function::cmdline_args Fetch command line arguments from current process Synopsis cmdline_args:string(n:long,m:long,delim:string) Arguments n First argument to get (zero is normally the program itself) m Last argument to get (or minus one for all arguments after n) delim String to use to separate arguments when more than one. Description Returns arguments from the current process starting with argument number n, up to argument m. If there are less than n arguments, or the arguments cannot be retrieved from the current process, the empty string is returned. If m is smaller than n then all arguments starting from argument n are returned. Argument zero is traditionally the command itself. LINUX SystemTap Tapset Reference November 2019 function::cmdline_str 3stap function::cmdline_str Fetch all command line arguments from current process Synopsis cmdline_str:string() Arguments None Description Returns all arguments from the current process delimited by spaces. Returns the empty string when the arguments cannot be retrieved. LINUX SystemTap Tapset Reference November 2019 function::cpu 3stap function::cpu Returns the current cpu number Synopsis cpu:long() Arguments None Description This function returns the current cpu number. LINUX SystemTap Tapset Reference November 2019 function::cpuid 3stap function::cpuid Returns the current cpu number Synopsis cpuid:long() Arguments None Description This function returns the current cpu number. Deprecated in SystemTap 1.4 and removed in SystemTap 1.5. LINUX SystemTap Tapset Reference November 2019 function::current_exe_file 3stap function::current_exe_file get the file struct pointer for the current task's executable file Synopsis current_exe_file:long() Arguments None Description This function returns the file struct pointer for the current task's executable file. Note that the file struct pointer isn't locked on return. The return value of this function can be passed to fullpath_struct_file to get the path from the file struct. LINUX SystemTap Tapset Reference November 2019 function::egid 3stap function::egid Returns the effective gid of a target process Synopsis egid:long() Arguments None Description This function returns the effective gid of a target process LINUX SystemTap Tapset Reference November 2019 function::env_var 3stap function::env_var Fetch environment variable from current process Synopsis env_var:string(name:string) Arguments name Name of the environment variable to fetch Description Returns the contents of the specified environment value for the current process. If the variable isn't set an empty string is returned. LINUX SystemTap Tapset Reference November 2019 function::euid 3stap function::euid Return the effective uid of a target process Synopsis euid:long() Arguments None Description Returns the effective user ID of the target process. LINUX SystemTap Tapset Reference November 2019 function::execname 3stap function::execname Returns the execname of a target process (or group of processes) Synopsis execname:string() Arguments None Description Returns the execname of a target process (or group of processes). LINUX SystemTap Tapset Reference November 2019 function::fastcall 3stap function::fastcall Mark function as declared fastcall Synopsis fastcall() Arguments None Description Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared fastcall in the source. LINUX SystemTap Tapset Reference November 2019 function::gid 3stap function::gid Returns the group ID of a target process Synopsis gid:long() Arguments None Description This function returns the group ID of a target process. LINUX SystemTap Tapset Reference November 2019 function::int_arg 3stap function::int_arg Return function argument as signed int Synopsis int_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a signed int (i.e., a 32-bit integer sign-extended to 64 bits). LINUX SystemTap Tapset Reference November 2019 function::is_myproc 3stap function::is_myproc Determines if the current probe point has occurred in the user's own process Synopsis is_myproc:long() Arguments None Description This function returns 1 if the current probe point has occurred in the user's own process. LINUX SystemTap Tapset Reference November 2019 function::is_return 3stap function::is_return Whether the current probe context is a return probe Synopsis is_return:long() Arguments None Description Returns 1 if the current probe context is a return probe, returns 0 otherwise. LINUX SystemTap Tapset Reference November 2019 function::long_arg 3stap function::long_arg Return function argument as signed long Synopsis long_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a signed long. On architectures where a long is 32 bits, the value is sign-extended to 64 bits. LINUX SystemTap Tapset Reference November 2019 function::longlong_arg 3stap function::longlong_arg Return function argument as 64-bit value Synopsis longlong_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a 64-bit value. LINUX SystemTap Tapset Reference November 2019 function::modname 3stap function::modname Return the kernel module name loaded at the address Synopsis modname:string(addr:long) Arguments addr The address to map to a kernel module name Description Returns the module name associated with the given address if known. If not known it will raise an error. If the address was not in a kernel module, but in the kernel itself, then the string kernel will be returned. LINUX SystemTap Tapset Reference November 2019 function::module_name 3stap function::module_name The module name of the current script Synopsis module_name:string() Arguments None Description This function returns the name of the stap module. Either generated randomly (stap_[0-9a-f]+_[0-9a-f]+) or set by stap -m <module_name>. LINUX SystemTap Tapset Reference November 2019 function::module_size 3stap function::module_size The module size of the current script Synopsis module_size:string() Arguments None Description This function returns the sizes of various sections of the stap module. LINUX SystemTap Tapset Reference November 2019 function::ns_egid 3stap function::ns_egid Returns the effective gid of a target process as seen in a user namespace Synopsis ns_egid:long() Arguments None Description This function returns the effective gid of a target process as seen in the target user namespace if provided, or the stap process namespace LINUX SystemTap Tapset Reference November 2019 function::ns_euid 3stap function::ns_euid Returns the effective user ID of a target process as seen in a user namespace Synopsis ns_euid:long() Arguments None Description This function returns the effective user ID of the target process as seen in the target user namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2019 function::ns_gid 3stap function::ns_gid Returns the group ID of a target process as seen in a user namespace Synopsis ns_gid:long() Arguments None Description This function returns the group ID of a target process as seen in the target user namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2019 function::ns_pgrp 3stap function::ns_pgrp Returns the process group ID of the current process as seen in a pid namespace Synopsis ns_pgrp:long() Arguments None Description This function returns the process group ID of the current process as seen in the target pid namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2019 function::ns_pid 3stap function::ns_pid Returns the ID of a target process as seen in a pid namespace Synopsis ns_pid:long() Arguments None Description This function returns the ID of a target process as seen in the target pid namespace. LINUX SystemTap Tapset Reference November 2019 function::ns_ppid 3stap function::ns_ppid Returns the process ID of a target process's parent process as seen in a pid namespace Synopsis ns_ppid:long() Arguments None Description This function return the process ID of the target proccess's parent process as seen in the target pid namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2019 function::ns_sid 3stap function::ns_sid Returns the session ID of the current process as seen in a pid namespace Synopsis ns_sid:long() Arguments None Description The namespace-aware session ID of a process is the process group ID of the session leader as seen in the target pid namespace if provided, or the stap process namespace. Session ID is stored in the signal_struct since Kernel 2.6.0. LINUX SystemTap Tapset Reference November 2019 function::ns_tid 3stap function::ns_tid Returns the thread ID of a target process as seen in a pid namespace Synopsis ns_tid:long() Arguments None Description This function returns the thread ID of a target process as seen in the target pid namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2019 function::ns_uid 3stap function::ns_uid Returns the user ID of a target process as seen in a user namespace Synopsis ns_uid:long() Arguments None Description This function returns the user ID of the target process as seen in the target user namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2019 function::pexecname 3stap function::pexecname Returns the execname of a target process's parent process Synopsis pexecname:string() Arguments None Description This function returns the execname of a target process's parent procces. LINUX SystemTap Tapset Reference November 2019 function::pgrp 3stap function::pgrp Returns the process group ID of the current process Synopsis pgrp:long() Arguments None Description This function returns the process group ID of the current process. LINUX SystemTap Tapset Reference November 2019 function::pid 3stap function::pid Returns the ID of a target process Synopsis pid:long() Arguments None Description This function returns the ID of a target process. LINUX SystemTap Tapset Reference November 2019 function::pid2execname 3stap function::pid2execname The name of the given process identifier Synopsis pid2execname:string(pid:long) Arguments pid process identifier Description Return the name of the given process id. LINUX SystemTap Tapset Reference November 2019 function::pid2task 3stap function::pid2task The task_struct of the given process identifier Synopsis pid2task:long(pid:long) Arguments pid process identifier Description Return the task struct of the given process id. LINUX SystemTap Tapset Reference November 2019 function::pn 3stap function::pn Returns the active probe name Synopsis pn:string() Arguments None Description This function returns the script-level probe point associated with a currently running probe handler, including wild-card expansion effects. Context: The current probe point. LINUX SystemTap Tapset Reference November 2019 function::pnlabel 3stap function::pnlabel Returns the label name parsed from the probe name Synopsis pnlabel:string() Arguments None Description This returns the label name as parsed from the script-level probe point. This function will only work if called directly from the body of a '.label' probe point (i.e. no aliases). Context The current probe point. LINUX SystemTap Tapset Reference November 2019 function::pointer_arg 3stap function::pointer_arg Return function argument as pointer value Synopsis pointer_arg:long(n:long) Arguments n index of argument to return Description Return the unsigned value of argument n, same as ulong_arg. Can be used with any type of pointer. LINUX SystemTap Tapset Reference November 2019 function::pp 3stap function::pp Returns the active probe point Synopsis pp:string() Arguments None Description This function returns the fully-resolved probe point associated with a currently running probe handler, including alias and wild-card expansion effects. Context: The current probe point. LINUX SystemTap Tapset Reference November 2019 function::ppfunc 3stap function::ppfunc Returns the function name parsed from pp Synopsis ppfunc:string() Arguments None Description This returns the function name from the current pp. Not all pp have functions in them, in which case "" is returned. LINUX SystemTap Tapset Reference November 2019 function::ppid 3stap function::ppid Returns the process ID of a target process's parent process Synopsis ppid:long() Arguments None Description This function return the process ID of the target proccess's parent process. LINUX SystemTap Tapset Reference November 2019 function::print_backtrace 3stap function::print_backtrace Print kernel stack back trace Synopsis print_backtrace() Arguments None Description This function is equivalent to print_stack(backtrace), except that deeper stack nesting may be supported. See print_ubacktrace for user-space backtrace. The function does not return a value. LINUX SystemTap Tapset Reference November 2019 function::print_backtrace_fileline 3stap function::print_backtrace_fileline Print kernel stack back trace Synopsis print_backtrace_fileline() Arguments None Description This function is equivalent to print_backtrace, but output for each symbol is longer including file names and line numbers. The function does not return a value. LINUX SystemTap Tapset Reference November 2019 function::print_regs 3stap function::print_regs Print a register dump Synopsis print_regs() Arguments None Description This function prints a register dump. Does nothing if no registers are available for the probe point. LINUX SystemTap Tapset Reference November 2019 function::print_stack 3stap function::print_stack Print out kernel stack from string Synopsis print_stack(stk:string) Arguments stk String with list of hexadecimal addresses Description This function performs a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to backtrace. Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function. Return nothing. NOTE it is recommended to use print_syms instead of this function. LINUX SystemTap Tapset Reference November 2019 function::print_syms 3stap function::print_syms Print out kernel stack from string Synopsis print_syms(callers:string) Arguments callers String with list of hexadecimal (kernel) addresses Description This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to stack, callers, and similar functions. Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by symdata. Returns nothing. LINUX SystemTap Tapset Reference November 2019 function::print_ubacktrace 3stap function::print_ubacktrace Print stack back trace for current user-space task. Synopsis 1) print_ubacktrace() 2) print_ubacktrace(pc:long,sp:long,fp:long) Arguments pc -- undescribed -- sp -- undescribed -- fp -- undescribed -- Description 1) 2) Equivalent to print_ustack(ubacktrace), except that deeper stack nesting may be supported. Returns nothing. See print_backtrace for kernel backtrace. Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2019 function::print_ubacktrace_brief 3stap function::print_ubacktrace_brief Print stack back trace for current user-space task. Synopsis print_ubacktrace_brief() Arguments None Description Equivalent to print_ubacktrace, but output for each symbol is shorter (just name and offset, or just the hex address of no symbol could be found). Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2019 function::print_ubacktrace_fileline 3stap function::print_ubacktrace_fileline Print stack back trace for current user-space task. Synopsis 1) print_ubacktrace_fileline() 2) print_ubacktrace_fileline(pc:long,sp:long,fp:long) Arguments pc -- undescribed -- sp -- undescribed -- fp -- undescribed -- Description 1) 2) Equivalent toprint_ubacktrace, but output for each symbol is longer including file names and line numbers. Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2019 function::print_ustack 3stap function::print_ustack Print out stack for the current task from string. Synopsis print_ustack(stk:string) Arguments stk String with list of hexadecimal addresses for the current task. Description Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to ubacktrace for the current task. Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function. Return nothing. NOTE it is recommended to use print_usyms instead of this function. LINUX SystemTap Tapset Reference November 2019 function::print_usyms 3stap function::print_usyms Print out user stack from string Synopsis print_usyms(callers:string) Arguments callers String with list of hexadecimal (user) addresses Description This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to ustack, ucallers, and similar functions. Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by usymdata. Returns nothing. LINUX SystemTap Tapset Reference November 2019 function::probe_type 3stap function::probe_type The low level probe handler type of the current probe. Synopsis probe_type:string() Arguments None Description Returns a short string describing the low level probe handler type for the current probe point. This is for informational purposes only. Depending on the low level probe handler different context functions can or cannot provide information about the current event (for example some probe handlers only trigger in user space and have no associated kernel context). High-level probes might map to the same or different low-level probes (depending on systemtap version and/or kernel used). LINUX SystemTap Tapset Reference November 2019 function::probefunc 3stap function::probefunc Return the probe point's function name, if known Synopsis probefunc:string() Arguments None Description This function returns the name of the function being probed based on the current address, as computed by symname(addr) or usymname(uaddr) depending on probe context (whether the probe is a user probe or a kernel probe). Please note this function's behaviour differs between SystemTap 2.0 and earlier versions. Prior to 2.0, probefunc obtained the function name from the probe point string as returned by pp, and used the current address as a fallback. Consider using ppfunc instead. LINUX SystemTap Tapset Reference November 2019 function::probemod 3stap function::probemod Return the probe point's kernel module name Synopsis probemod:string() Arguments None Description This function returns the name of the kernel module containing the probe point, if known. LINUX SystemTap Tapset Reference November 2019 function::pstrace 3stap function::pstrace Chain of processes and pids back to init(1) Synopsis pstrace:string(task:long) Arguments task Pointer to task struct of process Description This function returns a string listing execname and pid for each process starting from task back to the process ancestor that init(1) spawned. LINUX SystemTap Tapset Reference November 2019 function::register 3stap function::register Return the signed value of the named CPU register Synopsis register:long(name:string) Arguments name Name of the register to return Description Return the value of the named CPU register, as it was saved when the current probe point was hit. If the register is 32 bits, it is sign-extended to 64 bits. For the i386 architecture, the following names are recognized. (name1/name2 indicates that name1 and name2 are alternative names for the same register.) eax/ax, ebp/bp, ebx/bx, ecx/cx, edi/di, edx/dx, eflags/flags, eip/ip, esi/si, esp/sp, orig_eax/orig_ax, xcs/cs, xds/ds, xes/es, xfs/fs, xss/ss. For the x86_64 architecture, the following names are recognized: 64-bit registers: r8, r9, r10, r11, r12, r13, r14, r15, rax/ax, rbp/bp, rbx/bx, rcx/cx, rdi/di, rdx/dx, rip/ip, rsi/si, rsp/sp; 32-bit registers: eax, ebp, ebx, ecx, edx, edi, edx, eip, esi, esp, flags/eflags, orig_eax; segment registers: xcs/cs, xss/ss. For powerpc, the following names are recognized: r0, r1, ... r31, nip, msr, orig_gpr3, ctr, link, xer, ccr, softe, trap, dar, dsisr, result. For s390x, the following names are recognized: r0, r1, ... r15, args, psw.mask, psw.addr, orig_gpr2, ilc, trap. For AArch64, the following names are recognized: x0, x1, ... x30, fp, lr, sp, pc, and orig_x0. LINUX SystemTap Tapset Reference November 2019 function::registers_valid 3stap function::registers_valid Determines validity of register and u_register in current context Synopsis registers_valid:long() Arguments None Description This function returns 1 if register and u_register can be used in the current context, or 0 otherwise. For example, registers_valid returns 0 when called from a begin or end probe. LINUX SystemTap Tapset Reference November 2019 function::regparm 3stap function::regparm Specify regparm value used to compile function Synopsis regparm(n:long) Arguments n original regparm value Description Call this function with argument n before accessing function arguments using the *_arg function is the function was build with the gcc -mregparm=n option. (The i386 kernel is built with \-mregparm=3, so systemtap considers regparm(3) the default for kernel functions on that architecture.) Only valid on i386 and x86_64 (when probing 32bit applications). Produces an error on other architectures. LINUX SystemTap Tapset Reference November 2019 function::remote_id 3stap function::remote_id The index of this instance in a remote execution. Synopsis remote_id:long() Arguments None Description This function returns a number 0..N, which is the unique index of this particular script execution from a swarm of stap --remote A --remote B ... runs, and is the same number stap --remote-prefix would print. The function returns -1 if the script was not launched with stap --remote, or if the remote staprun/stapsh are older than version 1.7. LINUX SystemTap Tapset Reference November 2019 function::remote_uri 3stap function::remote_uri The name of this instance in a remote execution. Synopsis remote_uri:string() Arguments None Description This function returns the remote host used to invoke this particular script execution from a swarm of stap --remote runs. It may not be unique among the swarm. The function returns an empty string if the script was not launched with stap --remote. LINUX SystemTap Tapset Reference November 2019 function::s32_arg 3stap function::s32_arg Return function argument as signed 32-bit value Synopsis s32_arg:long(n:long) Arguments n index of argument to return Description Return the signed 32-bit value of argument n, same as int_arg. LINUX SystemTap Tapset Reference November 2019 function::s64_arg 3stap function::s64_arg Return function argument as signed 64-bit value Synopsis s64_arg:long(n:long) Arguments n index of argument to return Description Return the signed 64-bit value of argument n, same as longlong_arg. LINUX SystemTap Tapset Reference November 2019 function::sid 3stap function::sid Returns the session ID of the current process Synopsis sid:long() Arguments None Description The session ID of a process is the process group ID of the session leader. Session ID is stored in the signal_struct since Kernel 2.6.0. LINUX SystemTap Tapset Reference November 2019 function::sprint_backtrace 3stap function::sprint_backtrace Return stack back trace as string Synopsis sprint_backtrace:string() Arguments None Description Returns a simple (kernel) backtrace. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_backtrace. Equivalent to sprint_stack(backtrace), but more efficient (no need to translate between hex strings and final backtrace string). LINUX SystemTap Tapset Reference November 2019 function::sprint_stack 3stap function::sprint_stack Return stack for kernel addresses from string Synopsis sprint_stack:string(stk:string) Arguments stk String with list of hexadecimal (kernel) addresses Description Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to backtrace. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_stack. NOTE it is recommended to use sprint_syms instead of this function. LINUX SystemTap Tapset Reference November 2019 function::sprint_syms 3stap function::sprint_syms Return stack for kernel addresses from string Synopsis sprint_syms(callers:string) Arguments callers String with list of hexadecimal (kernel) addresses Description Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to stack, callers, and similar functions. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found), as obtained from symdata. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_syms. LINUX SystemTap Tapset Reference November 2019 function::sprint_ubacktrace 3stap function::sprint_ubacktrace Return stack back trace for current user-space task as string. Synopsis sprint_ubacktrace:string() Arguments None Description Returns a simple backtrace for the current task. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_ubacktrace. Equivalent to sprint_ustack(ubacktrace), but more efficient (no need to translate between hex strings and final backtrace string). Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2019 function::sprint_ustack 3stap function::sprint_ustack Return stack for the current task from string. Synopsis sprint_ustack:string(stk:string) Arguments stk String with list of hexadecimal addresses for the current task. Description Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to ubacktrace for the current task. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_ustack. NOTE it is recommended to use sprint_usyms instead of this function. LINUX SystemTap Tapset Reference November 2019 function::sprint_usyms 3stap function::sprint_usyms Return stack for user addresses from string Synopsis sprint_usyms(callers:string) Arguments callers String with list of hexadecimal (user) addresses Description Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to ustack, ucallers, and similar functions. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found), as obtained from usymdata. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_usyms. LINUX SystemTap Tapset Reference November 2019 function::stack 3stap function::stack Return address at given depth of kernel stack backtrace Synopsis stack:long(n:long) Arguments n number of levels to descend in the stack. Description Performs a simple (kernel) backtrace, and returns the element at the specified position. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times stack is called, or in what order. LINUX SystemTap Tapset Reference November 2019 function::stack_size 3stap function::stack_size Return the size of the kernel stack Synopsis stack_size:long() Arguments None Description This function returns the size of the kernel stack. LINUX SystemTap Tapset Reference November 2019 function::stack_unused 3stap function::stack_unused Returns the amount of kernel stack currently available Synopsis stack_unused:long() Arguments None Description This function determines how many bytes are currently available in the kernel stack. LINUX SystemTap Tapset Reference November 2019 function::stack_used 3stap function::stack_used Returns the amount of kernel stack used Synopsis stack_used:long() Arguments None Description This function determines how many bytes are currently used in the kernel stack. LINUX SystemTap Tapset Reference November 2019 function::stp_pid 3stap function::stp_pid The process id of the stapio process Synopsis stp_pid:long() Arguments None Description This function returns the process id of the stapio process that launched this script. There could be other SystemTap scripts and stapio processes running on the system. LINUX SystemTap Tapset Reference November 2019 function::symdata 3stap function::symdata Return the kernel symbol and module offset for the address Synopsis symdata:string(addr:long) Arguments addr The address to translate Description Returns the (function) symbol name associated with the given address if known, the offset from the start and size of the symbol, plus module name (between brackets). If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address. LINUX SystemTap Tapset Reference November 2019 function::symfile 3stap function::symfile Return the file name of a given address. Synopsis symfile:string(addr:long) Arguments addr The address to translate. Description Returns the file name of the given address, if known. If the file name cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2019 function::symfileline 3stap function::symfileline Return the file name and line number of an address. Synopsis symfileline:string(addr:long) Arguments addr The address to translate. Description Returns the file name and the (approximate) line number of the given address, if known. If the file name or the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2019 function::symline 3stap function::symline Return the line number of an address. Synopsis symline:string(addr:long) Arguments addr The address to translate. Description Returns the (approximate) line number of the given address, if known. If the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2019 function::symname 3stap function::symname Return the kernel symbol associated with the given address Synopsis symname:string(addr:long) Arguments addr The address to translate Description Returns the (function) symbol name associated with the given address if known. If not known it will return the hex string representation of addr. LINUX SystemTap Tapset Reference November 2019 function::target 3stap function::target Return the process ID of the target process Synopsis target:long() Arguments None Description This function returns the process ID of the target process. This is useful in conjunction with the -x PID or -c CMD command-line options to stap. An example of its use is to create scripts that filter on a specific process. -x <pid> target returns the pid specified by -x -c target returns the pid for the executed command specified by -c LINUX SystemTap Tapset Reference November 2019 function::task_ancestry 3stap function::task_ancestry The ancestry of the given task Synopsis task_ancestry:string(task:long,with_time:long) Arguments task task_struct pointer with_time set to 1 to also print the start time of processes (given as a delta from boot time) Description Return the ancestry of the given task in the form of grandparent_process=>parent_process=>process. LINUX SystemTap Tapset Reference November 2019 function::task_backtrace 3stap function::task_backtrace Hex backtrace of an arbitrary task Synopsis task_backtrace:string(task:long) Arguments task pointer to task_struct Description This function returns a string of hex addresses that are a backtrace of the stack of a particular task Output may be truncated as per maximum string length. Deprecated in SystemTap 1.6. LINUX SystemTap Tapset Reference November 2019 function::task_cpu 3stap function::task_cpu The scheduled cpu of the task Synopsis task_cpu:long(task:long) Arguments task task_struct pointer Description This function returns the scheduled cpu for the given task. LINUX SystemTap Tapset Reference November 2019 function::task_current 3stap function::task_current The current task_struct of the current task Synopsis task_current:long() Arguments None Description This function returns the task_struct representing the current process. This address can be passed to the various task_*() functions to extract more task-specific data. LINUX SystemTap Tapset Reference November 2019 function::task_cwd_path 3stap function::task_cwd_path get the path struct pointer for a task's current working directory Synopsis task_cwd_path:long(task:long) Arguments task task_struct pointer. LINUX SystemTap Tapset Reference November 2019 function::task_egid 3stap function::task_egid The effective group identifier of the task Synopsis task_egid:long(task:long) Arguments task task_struct pointer Description This function returns the effective group id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_euid 3stap function::task_euid The effective user identifier of the task Synopsis task_euid:long(task:long) Arguments task task_struct pointer Description This function returns the effective user id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_exe_file 3stap function::task_exe_file get the file struct pointer for a task's executable file Synopsis task_exe_file:long(task:long) Arguments task task_struct pointer. LINUX SystemTap Tapset Reference November 2019 function::task_execname 3stap function::task_execname The name of the task Synopsis task_execname:string(task:long) Arguments task task_struct pointer Description Return the name of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_fd_lookup 3stap function::task_fd_lookup get the file struct for a task's fd Synopsis task_fd_lookup:long(task:long,fd:long) Arguments task task_struct pointer. fd file descriptor number. Description Returns the file struct pointer for a task's file descriptor. LINUX SystemTap Tapset Reference November 2019 function::task_gid 3stap function::task_gid The group identifier of the task Synopsis task_gid:long(task:long) Arguments task task_struct pointer Description This function returns the group id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_max_file_handles 3stap function::task_max_file_handles The max number of open files for the task Synopsis task_max_file_handles:long(task:long) Arguments task task_struct pointer Description This function returns the maximum number of file handlers for the given task. LINUX SystemTap Tapset Reference November 2019 function::task_nice 3stap function::task_nice The nice value of the task Synopsis task_nice:long(task:long) Arguments task task_struct pointer Description This function returns the nice value of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_ns_egid 3stap function::task_ns_egid The effective group identifier of the task Synopsis task_ns_egid:long(task:long) Arguments task task_struct pointer Description This function returns the effective group id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_ns_euid 3stap function::task_ns_euid The effective user identifier of the task Synopsis task_ns_euid:long(task:long) Arguments task task_struct pointer Description This function returns the effective user id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_ns_gid 3stap function::task_ns_gid The group identifier of the task as seen in a namespace Synopsis task_ns_gid:long(task:long) Arguments task task_struct pointer Description This function returns the group id of the given task as seen in in the given user namespace. LINUX SystemTap Tapset Reference November 2019 function::task_ns_pid 3stap function::task_ns_pid The process identifier of the task Synopsis task_ns_pid:long(task:long) Arguments task task_struct pointer Description This fucntion returns the process id of the given task based on the specified pid namespace.. LINUX SystemTap Tapset Reference November 2019 function::task_ns_tid 3stap function::task_ns_tid The thread identifier of the task as seen in a namespace Synopsis task_ns_tid:long(task:long) Arguments task task_struct pointer Description This function returns the thread id of the given task as seen in the pid namespace. LINUX SystemTap Tapset Reference November 2019 function::task_ns_uid 3stap function::task_ns_uid The user identifier of the task Synopsis task_ns_uid:long(task:long) Arguments task task_struct pointer Description This function returns the user id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_open_file_handles 3stap function::task_open_file_handles The number of open files of the task Synopsis task_open_file_handles:long(task:long) Arguments task task_struct pointer Description This function returns the number of open file handlers for the given task. LINUX SystemTap Tapset Reference November 2019 function::task_parent 3stap function::task_parent The task_struct of the parent task Synopsis task_parent:long(task:long) Arguments task task_struct pointer Description This function returns the parent task_struct of the given task. This address can be passed to the various task_*() functions to extract more task-specific data. LINUX SystemTap Tapset Reference November 2019 function::task_pid 3stap function::task_pid The process identifier of the task Synopsis task_pid:long(task:long) Arguments task task_struct pointer Description This fucntion returns the process id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_prio 3stap function::task_prio The priority value of the task Synopsis task_prio:long(task:long) Arguments task task_struct pointer Description This function returns the priority value of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_state 3stap function::task_state The state of the task Synopsis task_state:long(task:long) Arguments task task_struct pointer Description Return the state of the given task, one of: TASK_RUNNING (0), TASK_INTERRUPTIBLE (1), TASK_UNINTERRUPTIBLE (2), TASK_STOPPED (4), TASK_TRACED (8), EXIT_ZOMBIE (16), or EXIT_DEAD (32). LINUX SystemTap Tapset Reference November 2019 function::task_tid 3stap function::task_tid The thread identifier of the task Synopsis task_tid:long(task:long) Arguments task task_struct pointer Description This function returns the thread id of the given task. LINUX SystemTap Tapset Reference November 2019 function::task_uid 3stap function::task_uid The user identifier of the task Synopsis task_uid:long(task:long) Arguments task task_struct pointer Description This function returns the user id of the given task. LINUX SystemTap Tapset Reference November 2019 function::tid 3stap function::tid Returns the thread ID of a target process Synopsis tid:long() Arguments None Description This function returns the thread ID of the target process. LINUX SystemTap Tapset Reference November 2019 function::u32_arg 3stap function::u32_arg Return function argument as unsigned 32-bit value Synopsis u32_arg:long(n:long) Arguments n index of argument to return Description Return the unsigned 32-bit value of argument n, same as uint_arg. LINUX SystemTap Tapset Reference November 2019 function::u64_arg 3stap function::u64_arg Return function argument as unsigned 64-bit value Synopsis u64_arg:long(n:long) Arguments n index of argument to return Description Return the unsigned 64-bit value of argument n, same as ulonglong_arg. LINUX SystemTap Tapset Reference November 2019 function::u_register 3stap function::u_register Return the unsigned value of the named CPU register Synopsis u_register:long(name:string) Arguments name Name of the register to return Description Same as register(name), except that if the register is 32 bits wide, it is zero-extended to 64 bits. LINUX SystemTap Tapset Reference November 2019 function::uaddr 3stap function::uaddr User space address of current running task Synopsis uaddr:long() Arguments None Description Returns the address in userspace that the current task was at when the probe occurred. When the current running task isn't a user space thread, or the address cannot be found, zero is returned. Can be used to see where the current task is combined with usymname or usymdata. Often the task will be in the VDSO where it entered the kernel. LINUX SystemTap Tapset Reference November 2019 function::ubacktrace 3stap function::ubacktrace Hex backtrace of current user-space task stack. Synopsis ubacktrace:string() Arguments None Description Return a string of hex addresses that are a backtrace of the stack of the current task. Output may be truncated as per maximum string length. Returns empty string when current probe point cannot determine user backtrace. See backtrace for kernel traceback. Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2019 function::ucallers 3stap function::ucallers Return first n elements of user stack backtrace Synopsis ucallers:string(n:long) Arguments n number of levels to descend in the stack (not counting the top level). If n is -1, print the entire stack. Description This function returns a string of the first n hex addresses from the backtrace of the user stack. Output may be truncated as per maximum string length (MAXSTRINGLEN). Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2019 function::uid 3stap function::uid Returns the user ID of a target process Synopsis uid:long() Arguments None Description This function returns the user ID of the target process. LINUX SystemTap Tapset Reference November 2019 function::uint_arg 3stap function::uint_arg Return function argument as unsigned int Synopsis uint_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as an unsigned int (i.e., a 32-bit integer zero-extended to 64 bits). LINUX SystemTap Tapset Reference November 2019 function::ulong_arg 3stap function::ulong_arg Return function argument as unsigned long Synopsis ulong_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as an unsigned long. On architectures where a long is 32 bits, the value is zero-extended to 64 bits. LINUX SystemTap Tapset Reference November 2019 function::ulonglong_arg 3stap function::ulonglong_arg Return function argument as 64-bit value Synopsis ulonglong_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a 64-bit value. (Same as longlong_arg.) LINUX SystemTap Tapset Reference November 2019 function::umodname 3stap function::umodname Returns the (short) name of the user module. Synopsis umodname:string(addr:long) Arguments addr User-space address Description Returns the short name of the user space module for the current task that that the given address is part of. Reports an error when the address isn't in a (mapped in) module, or the module cannot be found for some reason. LINUX SystemTap Tapset Reference November 2019 function::user_mode 3stap function::user_mode Determines if probe point occurs in user-mode Synopsis user_mode:long() Arguments None Description Return 1 if the probe point occurred in user-mode. LINUX SystemTap Tapset Reference November 2019 function::ustack 3stap function::ustack Return address at given depth of user stack backtrace Synopsis ustack:long(n:long) Arguments n number of levels to descend in the stack. Description Performs a simple (user space) backtrace, and returns the element at the specified position. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times ustack is called, or in what order. LINUX SystemTap Tapset Reference November 2019 function::usymdata 3stap function::usymdata Return the symbol and module offset of an address. Synopsis usymdata:string(addr:long) Arguments addr The address to translate. Description Returns the (function) symbol name associated with the given address in the current task if known, the offset from the start and the size of the symbol, plus the module name (between brackets). If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address. LINUX SystemTap Tapset Reference November 2019 function::usymfile 3stap function::usymfile Return the file name of a given address. Synopsis usymfile:string(addr:long) Arguments addr The address to translate. Description Returns the file name of the given address, if known. If the file name cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2019 function::usymfileline 3stap function::usymfileline Return the file name and line number of an address. Synopsis usymfileline:string(addr:long) Arguments addr The address to translate. Description Returns the file name and the (approximate) line number of the given address, if known. If the file name or the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2019 function::usymline 3stap function::usymline Return the line number of an address. Synopsis usymline:string(addr:long) Arguments addr The address to translate. Description Returns the (approximate) line number of the given address, if known. If the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2019 function::usymname 3stap function::usymname Return the symbol of an address in the current task. Synopsis usymname:string(addr:long) Arguments addr The address to translate. Description Returns the (function) symbol name associated with the given address if known. If not known it will return the hex string representation of addr. Timestamp Functions Each timestamp function returns a value to indicate when a function is executed. These returned values can then be used to indicate when an event occurred, provide an ordering for events, or compute the amount of time elapsed between two time stamps. LINUX SystemTap Tapset Reference November 2019 function::HZ 3stap function::HZ Kernel HZ Synopsis HZ:long() Arguments None Description This function returns the value of the kernel HZ macro, which corresponds to the rate of increase of the jiffies value. LINUX SystemTap Tapset Reference November 2019 function::cpu_clock_ms 3stap function::cpu_clock_ms Number of milliseconds on the given cpu's clock Synopsis cpu_clock_ms:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of milliseconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::cpu_clock_ns 3stap function::cpu_clock_ns Number of nanoseconds on the given cpu's clock Synopsis cpu_clock_ns:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of nanoseconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::cpu_clock_s 3stap function::cpu_clock_s Number of seconds on the given cpu's clock Synopsis cpu_clock_s:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of seconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::cpu_clock_us 3stap function::cpu_clock_us Number of microseconds on the given cpu's clock Synopsis cpu_clock_us:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of microseconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::delete_stopwatch 3stap function::delete_stopwatch Remove an existing stopwatch Synopsis delete_stopwatch(name:string) Arguments name the stopwatch name Description Remove stopwatch name. LINUX SystemTap Tapset Reference November 2019 function::get_cycles 3stap function::get_cycles Processor cycle count Synopsis get_cycles:long() Arguments None Description This function returns the processor cycle counter value if available, else it returns zero. The cycle counter is free running and unsynchronized on each processor. Thus, the order of events cannot determined by comparing the results of the get_cycles function on different processors. LINUX SystemTap Tapset Reference November 2019 function::gettimeofday_ms 3stap function::gettimeofday_ms Number of milliseconds since UNIX epoch Synopsis gettimeofday_ms:long() Arguments None Description This function returns the number of milliseconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2019 function::gettimeofday_ns 3stap function::gettimeofday_ns Number of nanoseconds since UNIX epoch Synopsis gettimeofday_ns:long() Arguments None Description This function returns the number of nanoseconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2019 function::gettimeofday_s 3stap function::gettimeofday_s Number of seconds since UNIX epoch Synopsis gettimeofday_s:long() Arguments None Description This function returns the number of seconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2019 function::gettimeofday_us 3stap function::gettimeofday_us Number of microseconds since UNIX epoch Synopsis gettimeofday_us:long() Arguments None Description This function returns the number of microseconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2019 function::jiffies 3stap function::jiffies Kernel jiffies count Synopsis jiffies:long() Arguments None Description This function returns the value of the kernel jiffies variable. This value is incremented periodically by timer interrupts, and may wrap around a 32-bit or 64-bit boundary. See HZ. LINUX SystemTap Tapset Reference November 2019 function::ktime_get_ns 3stap function::ktime_get_ns Number of nanoseconds since boot Synopsis ktime_get_ns:long() Arguments None Description This function returns the system ktime. LINUX SystemTap Tapset Reference November 2019 function::local_clock_ms 3stap function::local_clock_ms Number of milliseconds on the local cpu's clock Synopsis local_clock_ms:long() Arguments None Description This function returns the number of milliseconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::local_clock_ns 3stap function::local_clock_ns Number of nanoseconds on the local cpu's clock Synopsis local_clock_ns:long() Arguments None Description This function returns the number of nanoseconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::local_clock_s 3stap function::local_clock_s Number of seconds on the local cpu's clock Synopsis local_clock_s:long() Arguments None Description This function returns the number of seconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::local_clock_us 3stap function::local_clock_us Number of microseconds on the local cpu's clock Synopsis local_clock_us:long() Arguments None Description This function returns the number of microseconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2019 function::read_stopwatch_ms 3stap function::read_stopwatch_ms Reads the time in milliseconds for a stopwatch Synopsis read_stopwatch_ms:long(name:string) Arguments name stopwatch name Description Returns time in milliseconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2019 function::read_stopwatch_ns 3stap function::read_stopwatch_ns Reads the time in nanoseconds for a stopwatch Synopsis read_stopwatch_ns:long(name:string) Arguments name stopwatch name Description Returns time in nanoseconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2019 function::read_stopwatch_s 3stap function::read_stopwatch_s Reads the time in seconds for a stopwatch Synopsis read_stopwatch_s:long(name:string) Arguments name stopwatch name Description Returns time in seconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2019 function::read_stopwatch_us 3stap function::read_stopwatch_us Reads the time in microseconds for a stopwatch Synopsis read_stopwatch_us:long(name:string) Arguments name stopwatch name Description Returns time in microseconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2019 function::start_stopwatch 3stap function::start_stopwatch Start a stopwatch Synopsis start_stopwatch(name:string) Arguments name the stopwatch name Description Start stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2019 function::stop_stopwatch 3stap function::stop_stopwatch Stop a stopwatch Synopsis stop_stopwatch(name:string) Arguments name the stopwatch name Description Stop stopwatch name. Creates stopwatch name if it does not currently exist. Time utility functions Utility functions to turn seconds since the epoch (as returned by the timestamp function gettimeofday_s()) into a human readable date/time strings. LINUX SystemTap Tapset Reference November 2019 function::ctime 3stap function::ctime Convert seconds since epoch into human readable date/time string Synopsis 1) ctime:string(epochsecs:long) 2) ctime:string() Arguments epochsecs Number of seconds since epoch (as returned by gettimeofday_s) Description 1) Takes an argument of seconds since the epoch as returned bygettimeofday_s. Returns a string of the form 2) Wed Jun 30 21:49:08 1993 The string will always be exactly 24 characters. If the time would be unreasonable far in the past (before what can be represented with a 32 bit offset in seconds from the epoch) an error will occur (which can be avoided with try/catch). If the time would be unreasonable far in the future, an error will also occur. Note that the epoch (zero) corresponds to Thu Jan 1 00:00:00 1970 The earliest full date given by ctime, corresponding to epochsecs -2147483648 is Fri Dec 13 20:45:52 1901. The latest full date given by ctime, corresponding to epochsecs 2147483647 is Tue Jan 19 03:14:07 2038. The abbreviations for the days of the week are ‘Sun’, ‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’, and ‘Sat’. The abbreviations for the months are ‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’, ‘May’, ‘Jun’, ‘Jul’, ‘Aug’, ‘Sep’, ‘Oct’, ‘Nov’, and ‘Dec’. Note that the real C library ctime function puts a newline ('\n') character at the end of the string that this function does not. Also note that since the kernel has no concept of timezones, the returned time is always in GMT. LINUX SystemTap Tapset Reference November 2019 function::tz_ctime 3stap function::tz_ctime Convert seconds since epoch into human readable date/time string, with local time zone Synopsis tz_ctime(epochsecs:) Arguments epochsecs number of seconds since epoch (as returned by gettimeofday_s) Description Takes an argument of seconds since the epoch as returned by gettimeofday_s. Returns a string of the same form as ctime, but offsets the epoch time for the local time zone, and appends the name of the local time zone. The string length may vary. The time zone information is passed by staprun at script startup only. LINUX SystemTap Tapset Reference November 2019 function::tz_gmtoff 3stap function::tz_gmtoff Return local time zone offset Synopsis tz_gmtoff() Arguments None Description Returns the local time zone offset (seconds west of UTC), as passed by staprun at script startup only. LINUX SystemTap Tapset Reference November 2019 function::tz_name 3stap function::tz_name Return local time zone name Synopsis tz_name() Arguments None Description Returns the local time zone name, as passed by staprun at script startup only. Shell command functions Utility functions to enqueue shell commands. LINUX SystemTap Tapset Reference November 2019 function::system 3stap function::system Issue a command to the system Synopsis system(cmd:string) Arguments cmd the command to issue to the system Description This function runs a command on the system. The command is started in the background some time after the current probe completes. The command is run with the same UID as the user running the stap or staprun command. The runtime may impose a relatively short length limit on the command string. Exceeding it may print a warning. Memory Tapset This family of probe points is used to probe memory-related events or query the memory usage of the current process. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 function::addr_to_node 3stap function::addr_to_node Returns which node a given address belongs to within a NUMA system Synopsis addr_to_node:long(addr:long) Arguments addr the address of the faulting memory access Description This function accepts an address, and returns the node that the given address belongs to in a NUMA system. LINUX SystemTap Tapset Reference November 2019 function::bytes_to_string 3stap function::bytes_to_string Human readable string for given bytes Synopsis bytes_to_string:string(bytes:long) Arguments bytes Number of bytes to translate. Description Returns a string representing the number of bytes (up to 1024 bytes), the number of kilobytes (when less than 1024K) postfixed by 'K', the number of megabytes (when less than 1024M) postfixed by 'M' or the number of gigabytes postfixed by 'G'. If representing K, M or G, and the number is amount is less than 100, it includes a '.' plus the remainer. The returned string will be 5 characters wide (padding with whitespace at the front) unless negative or representing more than 9999G bytes. LINUX SystemTap Tapset Reference November 2019 function::mem_page_size 3stap function::mem_page_size Number of bytes in a page for this architecture Synopsis mem_page_size:long() Arguments None LINUX SystemTap Tapset Reference November 2019 function::pages_to_string 3stap function::pages_to_string Turns pages into a human readable string Synopsis pages_to_string:string(pages:long) Arguments pages Number of pages to translate. Description Multiplies pages by page_size to get the number of bytes and returns the result of bytes_to_string. LINUX SystemTap Tapset Reference November 2019 function::proc_mem_data 3stap function::proc_mem_data Program data size (data + stack) in pages Synopsis 1) proc_mem_data:long() 2) proc_mem_data:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the current process data size (data + stack) in pages, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the given process data size (data + stack) in pages, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2019 function::proc_mem_rss 3stap function::proc_mem_rss Program resident set size in pages Synopsis 1) proc_mem_rss:long() 2) proc_mem_rss:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the resident set size in pages of the current process, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the resident set size in pages of the given process, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2019 function::proc_mem_shr 3stap function::proc_mem_shr Program shared pages (from shared mappings) Synopsis 1) proc_mem_shr:long() 2) proc_mem_shr:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the shared pages (from shared mappings) of the current process, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the shared pages (from shared mappings) of the given process, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2019 function::proc_mem_size 3stap function::proc_mem_size Total program virtual memory size in pages Synopsis 1) proc_mem_size:long() 2) proc_mem_size:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the total virtual memory size in pages of the current process, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the total virtual memory size in pages of the given process, or zero when that process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2019 function::proc_mem_string 3stap function::proc_mem_string Human readable string of process memory usage Synopsis 1) proc_mem_string:string() 2) proc_mem_string:string(pid:long) Arguments pid The pid of process to examine Description 1) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the current process. For examplesize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k. 2) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the given process. For examplesize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k. LINUX SystemTap Tapset Reference November 2019 function::proc_mem_txt 3stap function::proc_mem_txt Program text (code) size in pages Synopsis 1) proc_mem_txt:long() 2) proc_mem_txt:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the current process text (code) size in pages, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the given process text (code) size in pages, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2019 function::vm_fault_contains 3stap function::vm_fault_contains Test return value for page fault reason Synopsis vm_fault_contains:long(value:long,test:long) Arguments value the fault_type returned by vm.page_fault.return test the type of fault to test for (VM_FAULT_OOM or similar) LINUX SystemTap Tapset Reference November 2019 probe::vm.brk 3stap probe::vm.brk Fires when a brk is requested (i.e. the heap will be resized) Synopsis vm.brk Values length the length of the memory segment address the requested address name name of the probe point Context The process calling brk. LINUX SystemTap Tapset Reference November 2019 probe::vm.kfree 3stap probe::vm.kfree Fires when kfree is requested Synopsis vm.kfree Values ptr pointer to the kmemory allocated which is returned by kmalloc name name of the probe point caller_function name of the caller function. call_site address of the function calling this kmemory function LINUX SystemTap Tapset Reference November 2019 probe::vm.kmalloc 3stap probe::vm.kmalloc Fires when kmalloc is requested Synopsis vm.kmalloc Values gfp_flags type of kmemory to allocate call_site address of the kmemory function caller_function name of the caller function bytes_alloc allocated Bytes bytes_req requested Bytes name name of the probe point gfp_flag_name type of kmemory to allocate (in String format) ptr pointer to the kmemory allocated LINUX SystemTap Tapset Reference November 2019 probe::vm.kmalloc_node 3stap probe::vm.kmalloc_node Fires when kmalloc_node is requested Synopsis vm.kmalloc_node Values gfp_flags type of kmemory to allocate call_site address of the function caling this kmemory function caller_function name of the caller function bytes_alloc allocated Bytes bytes_req requested Bytes name name of the probe point gfp_flag_name type of kmemory to allocate(in string format) ptr pointer to the kmemory allocated LINUX SystemTap Tapset Reference November 2019 probe::vm.kmem_cache_alloc 3stap probe::vm.kmem_cache_alloc Fires when kmem_cache_alloc is requested Synopsis vm.kmem_cache_alloc Values bytes_alloc allocated Bytes gfp_flags type of kmemory to allocate call_site address of the function calling this kmemory function. caller_function name of the caller function. gfp_flag_name type of kmemory to allocate(in string format) ptr pointer to the kmemory allocated bytes_req requested Bytes name name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::vm.kmem_cache_alloc_node 3stap probe::vm.kmem_cache_alloc_node Fires when kmem_cache_alloc_node is requested Synopsis vm.kmem_cache_alloc_node Values bytes_alloc allocated Bytes call_site address of the function calling this kmemory function caller_function name of the caller function gfp_flags type of kmemory to allocate ptr pointer to the kmemory allocated gfp_flag_name type of kmemory to allocate(in string format) name name of the probe point bytes_req requested Bytes LINUX SystemTap Tapset Reference November 2019 probe::vm.kmem_cache_free 3stap probe::vm.kmem_cache_free Fires when kmem_cache_free is requested Synopsis vm.kmem_cache_free Values name Name of the probe point ptr Pointer to the kmemory allocated which is returned by kmem_cache call_site Address of the function calling this kmemory function caller_function Name of the caller function. LINUX SystemTap Tapset Reference November 2019 probe::vm.mmap 3stap probe::vm.mmap Fires when an mmap is requested Synopsis vm.mmap Values length the length of the memory segment address the requested address name name of the probe point Context The process calling mmap. LINUX SystemTap Tapset Reference November 2019 probe::vm.munmap 3stap probe::vm.munmap Fires when an munmap is requested Synopsis vm.munmap Values address the requested address length the length of the memory segment name name of the probe point Context The process calling munmap. LINUX SystemTap Tapset Reference November 2019 probe::vm.oom_kill 3stap probe::vm.oom_kill Fires when a thread is selected for termination by the OOM killer Synopsis vm.oom_kill Values task the task being killed name name of the probe point Context The process that tried to consume excessive memory, and thus triggered the OOM. LINUX SystemTap Tapset Reference November 2019 probe::vm.pagefault 3stap probe::vm.pagefault Records that a page fault occurred Synopsis vm.pagefault Values write_access indicates whether this was a write or read access; 1 indicates a write, while 0 indicates a read address the address of the faulting memory access; i.e. the address that caused the page fault name name of the probe point Context The process which triggered the fault LINUX SystemTap Tapset Reference November 2019 probe::vm.pagefault.return 3stap probe::vm.pagefault.return Indicates what type of fault occurred Synopsis vm.pagefault.return Values fault_type returns either 0 (VM_FAULT_OOM) for out of memory faults, 2 (VM_FAULT_MINOR) for minor faults, 3 (VM_FAULT_MAJOR) for major faults, or 1 (VM_FAULT_SIGBUS) if the fault was neither OOM, minor fault, nor major fault. name name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::vm.write_shared 3stap probe::vm.write_shared Attempts at writing to a shared page Synopsis vm.write_shared Values address the address of the shared write name name of the probe point Context The context is the process attempting the write. Description Fires when a process attempts to write to a shared page. If a copy is necessary, this will be followed by a vm.write_shared_copy. LINUX SystemTap Tapset Reference November 2019 probe::vm.write_shared_copy 3stap probe::vm.write_shared_copy Page copy for shared page write Synopsis vm.write_shared_copy Values address The address of the shared write zero boolean indicating whether it is a zero page (can do a clear instead of a copy) name Name of the probe point Context The process attempting the write. Description Fires when a write to a shared page requires a page copy. This is always preceded by a vm.write_shared. Task Time Tapset This tapset defines utility functions to query time related properties of the current tasks, translate those in miliseconds and human readable strings. LINUX SystemTap Tapset Reference November 2019 function::cputime_to_msecs 3stap function::cputime_to_msecs Translates the given cputime into milliseconds Synopsis cputime_to_msecs:long(cputime:long) Arguments cputime Time to convert to milliseconds. LINUX SystemTap Tapset Reference November 2019 function::cputime_to_string 3stap function::cputime_to_string Human readable string for given cputime Synopsis cputime_to_string:string(cputime:long) Arguments cputime Time to translate. Description Equivalent to calling: msec_to_string (cputime_to_msecs (cputime). LINUX SystemTap Tapset Reference November 2019 function::cputime_to_usecs 3stap function::cputime_to_usecs Translates the given cputime into microseconds Synopsis cputime_to_usecs:long(cputime:long) Arguments cputime Time to convert to microseconds. LINUX SystemTap Tapset Reference November 2019 function::msecs_to_string 3stap function::msecs_to_string Human readable string for given milliseconds Synopsis msecs_to_string:string(msecs:long) Arguments msecs Number of milliseconds to translate. Description Returns a string representing the number of milliseconds as a human readable string consisting of XmY.ZZZs, where X is the number of minutes, Y is the number of seconds and ZZZ is the number of milliseconds. LINUX SystemTap Tapset Reference November 2019 function::nsecs_to_string 3stap function::nsecs_to_string Human readable string for given nanoseconds Synopsis nsecs_to_string:string(nsecs:long) Arguments nsecs Number of nanoseconds to translate. Description Returns a string representing the number of nanoseconds as a human readable string consisting of XmY.ZZZZZZs, where X is the number of minutes, Y is the number of seconds and ZZZZZZZZZ is the number of nanoseconds. LINUX SystemTap Tapset Reference November 2019 function::task_start_time 3stap function::task_start_time Start time of the given task Synopsis task_start_time:long(tid:long) Arguments tid Thread id of the given task Description Returns the start time of the given task in nanoseconds since boot time or 0 if the task does not exist. LINUX SystemTap Tapset Reference November 2019 function::task_stime 3stap function::task_stime System time of the task Synopsis 1) task_stime:long() 2) task_stime:long(tid:long) Arguments tid Thread id of the given task Description 1) Returns the system time of the current task in cputime. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. 2) Returns the system time of the given task in cputime, or zero if the task doesn't exist. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. LINUX SystemTap Tapset Reference November 2019 function::task_time_string 3stap function::task_time_string Human readable string of task time usage Synopsis task_time_string:string() Arguments None Description Returns a human readable string showing the user and system time the current task has used up to now. For example usr: 0m12.908s, sys: 1m6.851s. LINUX SystemTap Tapset Reference November 2019 function::task_time_string_tid 3stap function::task_time_string_tid Human readable string of task time usage Synopsis task_time_string_tid:string(tid:long) Arguments tid Thread id of the given task Description Returns a human readable string showing the user and system time the given task has used up to now. For example usr: 0m12.908s, sys: 1m6.851s. LINUX SystemTap Tapset Reference November 2019 function::task_utime 3stap function::task_utime User time of the task Synopsis 1) task_utime:long() 2) task_utime:long(tid:long) Arguments tid Thread id of the given task Description 1) Returns the user time of the current task in cputime. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. 2) Returns the user time of the given task in cputime, or zero if the task doesn't exist. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. LINUX SystemTap Tapset Reference November 2019 function::usecs_to_string 3stap function::usecs_to_string Human readable string for given microseconds Synopsis usecs_to_string:string(usecs:long) Arguments usecs Number of microseconds to translate. Description Returns a string representing the number of microseconds as a human readable string consisting of XmY.ZZZZZZs, where X is the number of minutes, Y is the number of seconds and ZZZZZZ is the number of microseconds. Scheduler Tapset This family of probe points is used to probe the task scheduler activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 probe::scheduler.balance 3stap probe::scheduler.balance A cpu attempting to find more work. Synopsis scheduler.balance Values name name of the probe point Context The cpu looking for more work. LINUX SystemTap Tapset Reference November 2019 probe::scheduler.cpu_off 3stap probe::scheduler.cpu_off Process is about to stop running on a cpu Synopsis scheduler.cpu_off Values idle boolean indicating whether current is the idle process name name of the probe point task_prev the process leaving the cpu (same as current) task_next the process replacing current Context The process leaving the cpu. LINUX SystemTap Tapset Reference November 2019 probe::scheduler.cpu_on 3stap probe::scheduler.cpu_on Process is beginning execution on a cpu Synopsis scheduler.cpu_on Values task_prev the process that was previously running on this cpu name name of the probe point idle - boolean indicating whether current is the idle process Context The resuming process. LINUX SystemTap Tapset Reference November 2019 probe::scheduler.ctxswitch 3stap probe::scheduler.ctxswitch A context switch is occuring. Synopsis scheduler.ctxswitch Values name name of the probe point prev_tid The TID of the process to be switched out prev_priority The priority of the process to be switched out nexttsk_state the state of the process to be switched in prev_task_name The name of the process to be switched out prev_pid The PID of the process to be switched out next_pid The PID of the process to be switched in next_task_name The name of the process to be switched in next_tid The TID of the process to be switched in next_priority The priority of the process to be switched in prevtsk_state the state of the process to be switched out LINUX SystemTap Tapset Reference November 2019 probe::scheduler.kthread_stop 3stap probe::scheduler.kthread_stop A thread created by kthread_create is being stopped Synopsis scheduler.kthread_stop Values thread_priority priority of the thread thread_pid PID of the thread being stopped LINUX SystemTap Tapset Reference November 2019 probe::scheduler.kthread_stop.return 3stap probe::scheduler.kthread_stop.return A kthread is stopped and gets the return value Synopsis scheduler.kthread_stop.return Values name name of the probe point return_value return value after stopping the thread LINUX SystemTap Tapset Reference November 2019 probe::scheduler.migrate 3stap probe::scheduler.migrate Task migrating across cpus Synopsis scheduler.migrate Values name name of the probe point pid PID of the task being migrated cpu_from the original cpu priority priority of the task being migrated task the process that is being migrated cpu_to the destination cpu LINUX SystemTap Tapset Reference November 2019 probe::scheduler.process_exit 3stap probe::scheduler.process_exit Process exiting Synopsis scheduler.process_exit Values priority priority of the process exiting pid PID of the process exiting name name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::scheduler.process_fork 3stap probe::scheduler.process_fork Process forked Synopsis scheduler.process_fork Values name name of the probe point child_pid PID of the child process parent_pid PID of the parent process LINUX SystemTap Tapset Reference November 2019 probe::scheduler.process_free 3stap probe::scheduler.process_free Scheduler freeing a data structure for a process Synopsis scheduler.process_free Values name name of the probe point pid PID of the process getting freed priority priority of the process getting freed LINUX SystemTap Tapset Reference November 2019 probe::scheduler.process_wait 3stap probe::scheduler.process_wait Scheduler starting to wait on a process Synopsis scheduler.process_wait Values pid PID of the process scheduler is waiting on name name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::scheduler.signal_send 3stap probe::scheduler.signal_send Sending a signal Synopsis scheduler.signal_send Values name name of the probe point signal_number signal number pid pid of the process sending signal LINUX SystemTap Tapset Reference November 2019 probe::scheduler.tick 3stap probe::scheduler.tick Schedulers internal tick, a processes timeslice accounting is updated Synopsis scheduler.tick Values name name of the probe point idle boolean indicating whether current is the idle process Context The process whose accounting will be updated. LINUX SystemTap Tapset Reference November 2019 probe::scheduler.wait_task 3stap probe::scheduler.wait_task Waiting on a task to unschedule (become inactive) Synopsis scheduler.wait_task Values name name of the probe point task_pid PID of the task the scheduler is waiting on task_priority priority of the task LINUX SystemTap Tapset Reference November 2019 probe::scheduler.wakeup 3stap probe::scheduler.wakeup Task is woken up Synopsis scheduler.wakeup Values name name of the probe point task_cpu cpu of the task being woken up task_tid tid of the task being woken up task_priority priority of the task being woken up task_state state of the task being woken up task_pid PID of the task being woken up LINUX SystemTap Tapset Reference November 2019 probe::scheduler.wakeup_new 3stap probe::scheduler.wakeup_new Newly created task is woken up for the first time Synopsis scheduler.wakeup_new Values name name of the probe point task_cpu cpu of the task woken up task_state state of the task woken up task_pid PID of the new task woken up task_priority priority of the new task task_tid TID of the new task woken up IO Scheduler and block IO Tapset This family of probe points is used to probe block IO layer and IO scheduler activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 probe::ioblock.end 3stap probe::ioblock.end Fires whenever a block I/O transfer is complete. Synopsis ioblock.end Values rw binary trace for read/write request error 0 on success phys_segments number of segments in this bio after physical address coalescing is performed. name name of the probe point opf operations and flags sector beginning sector for the entire bio ino i-node number of the mapped file devname block device name hw_segments number of segments after physical and DMA remapping hardware coalescing is performed flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request bytes_done number of bytes transferred idx offset into the bio vector array size total size in bytes Context The process signals the transfer is done. LINUX SystemTap Tapset Reference November 2019 probe::ioblock.request 3stap probe::ioblock.request Fires whenever making a generic block I/O request. Synopsis ioblock.request Values ino i-node number of the mapped file devname block device name bdev target block device vcnt bio vector count which represents number of array element (page, offset, length) which make up this I/O request flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported idx offset into the bio vector array size total size in bytes p_start_sect points to the start sector of the partition structure of the device hw_segments number of segments after physical and DMA remapping hardware coalescing is performed phys_segments number of segments in this bio after physical address coalescing is performed bdev_contains points to the device object which contains the partition (when bio structure represents a partition) rw binary trace for read/write request sector beginning sector for the entire bio name name of the probe point opf operations and flags Context The process makes block I/O request LINUX SystemTap Tapset Reference November 2019 probe::ioblock_trace.bounce 3stap probe::ioblock_trace.bounce Fires whenever a buffer bounce is needed for at least one page of a block IO request. Synopsis ioblock_trace.bounce Values q request queue on which this bio was queued. rw binary trace for read/write request bdev_contains points to the device object which contains the partition (when bio structure represents a partition) opf operations and flags name name of the probe point sector beginning sector for the entire bio devname device for which a buffer bounce was needed. ino i-node number of the mapped file p_start_sect points to the start sector of the partition structure of the device size total size in bytes idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. bytes_done number of bytes transferred flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request bdev target block device Context The process creating a block IO request. LINUX SystemTap Tapset Reference November 2019 probe::ioblock_trace.end 3stap probe::ioblock_trace.end Fires whenever a block I/O transfer is complete. Synopsis ioblock_trace.end Values ino i-node number of the mapped file devname block device name p_start_sect points to the start sector of the partition structure of the device bdev target block device flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request bytes_done number of bytes transferred idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. size total size in bytes rw binary trace for read/write request q request queue on which this bio was queued. bdev_contains points to the device object which contains the partition (when bio structure represents a partition) name name of the probe point opf operations and flags sector beginning sector for the entire bio Context The process signals the transfer is done. LINUX SystemTap Tapset Reference November 2019 probe::ioblock_trace.request 3stap probe::ioblock_trace.request Fires just as a generic block I/O request is created for a bio. Synopsis ioblock_trace.request Values devname block device name ino i-node number of the mapped file idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. bytes_done number of bytes transferred size total size in bytes bdev target block device vcnt bio vector count which represents number of array element (page, offset, length) which make up this I/O request flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported p_start_sect points to the start sector of the partition structure of the device bdev_contains points to the device object which contains the partition (when bio structure represents a partition) q request queue on which this bio was queued. rw binary trace for read/write request sector beginning sector for the entire bio name name of the probe point opf operations and flags Context The process makes block I/O request LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler.elv_add_request 3stap probe::ioscheduler.elv_add_request probe to indicate request is added to the request queue. Synopsis ioscheduler.elv_add_request Values elevator_name The type of I/O elevator currently enabled. disk_minor Disk minor number of request. disk_major Disk major no of request. q Pointer to request queue. rq Address of request. rq_flags Request flags. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler.elv_add_request.kp 3stap probe::ioscheduler.elv_add_request.kp kprobe based probe to indicate that a request was added to the request queue Synopsis ioscheduler.elv_add_request.kp Values disk_minor Disk minor number of the request elevator_name The type of I/O elevator currently enabled disk_major Disk major number of the request q pointer to request queue rq_flags Request flags name Name of the probe point rq Address of the request LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler.elv_add_request.tp 3stap probe::ioscheduler.elv_add_request.tp tracepoint based probe to indicate a request is added to the request queue. Synopsis ioscheduler.elv_add_request.tp Values rq_flags Request flags. rq Address of request. name Name of the probe point q Pointer to request queue. disk_major Disk major no of request. elevator_name The type of I/O elevator currently enabled. disk_minor Disk minor number of request. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler.elv_completed_request 3stap probe::ioscheduler.elv_completed_request Fires when a request is completed Synopsis ioscheduler.elv_completed_request Values disk_major Disk major number of the request disk_minor Disk minor number of the request elevator_name The type of I/O elevator currently enabled rq_flags Request flags name Name of the probe point rq Address of the request LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler.elv_next_request 3stap probe::ioscheduler.elv_next_request Fires when a request is retrieved from the request queue Synopsis ioscheduler.elv_next_request Values name Name of the probe point elevator_name The type of I/O elevator currently enabled LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler.elv_next_request.return 3stap probe::ioscheduler.elv_next_request.return Fires when a request retrieval issues a return signal Synopsis ioscheduler.elv_next_request.return Values disk_minor Disk minor number of the request disk_major Disk major number of the request rq_flags Request flags rq Address of the request name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler_trace.elv_abort_request 3stap probe::ioscheduler_trace.elv_abort_request Fires when a request is aborted. Synopsis ioscheduler_trace.elv_abort_request Values elevator_name The type of I/O elevator currently enabled. disk_minor Disk minor number of request. disk_major Disk major no of request. name Name of the probe point rq_flags Request flags. rq Address of request. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler_trace.elv_completed_request 3stap probe::ioscheduler_trace.elv_completed_request Fires when a request is Synopsis ioscheduler_trace.elv_completed_request Values rq_flags Request flags. rq Address of request. name Name of the probe point disk_major Disk major no of request. elevator_name The type of I/O elevator currently enabled. disk_minor Disk minor number of request. Description completed. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler_trace.elv_issue_request 3stap probe::ioscheduler_trace.elv_issue_request Fires when a request is Synopsis ioscheduler_trace.elv_issue_request Values disk_major Disk major no of request. elevator_name The type of I/O elevator currently enabled. disk_minor Disk minor number of request. name Name of the probe point rq_flags Request flags. rq Address of request. Description scheduled. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler_trace.elv_requeue_request 3stap probe::ioscheduler_trace.elv_requeue_request Fires when a request is Synopsis ioscheduler_trace.elv_requeue_request Values name Name of the probe point rq_flags Request flags. rq Address of request. disk_major Disk major no of request. elevator_name The type of I/O elevator currently enabled. disk_minor Disk minor number of request. Description put back on the queue, when the hadware cannot accept more requests. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler_trace.plug 3stap probe::ioscheduler_trace.plug Fires when a request queue is plugged; Synopsis ioscheduler_trace.plug Values rq_queue request queue name Name of the probe point Description ie, requests in the queue cannot be serviced by block driver. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler_trace.unplug_io 3stap probe::ioscheduler_trace.unplug_io Fires when a request queue is unplugged; Synopsis ioscheduler_trace.unplug_io Values rq_queue request queue name Name of the probe point Description Either, when number of pending requests in the queue exceeds threshold or, upon expiration of timer that was activated when queue was plugged. LINUX SystemTap Tapset Reference November 2019 probe::ioscheduler_trace.unplug_timer 3stap probe::ioscheduler_trace.unplug_timer Fires when unplug timer associated Synopsis ioscheduler_trace.unplug_timer Values rq_queue request queue name Name of the probe point Description with a request queue expires. SCSI Tapset This family of probe points is used to probe SCSI activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 probe::scsi.iocompleted 3stap probe::scsi.iocompleted SCSI mid-layer running the completion processing for block device I/O requests Synopsis scsi.iocompleted Values data_direction The data_direction specifies whether this command is from/to the device device_state The current state of the device lun The lun number channel The channel number dev_id The scsi device id goodbytes The bytes completed req_addr The current struct request pointer, as a number host_no The host number data_direction_str Data direction, as a string device_state_str The current state of the device, as a string LINUX SystemTap Tapset Reference November 2019 probe::scsi.iodispatching 3stap probe::scsi.iodispatching SCSI mid-layer dispatched low-level SCSI command Synopsis scsi.iodispatching Values device_state The current state of the device lun The lun number request_buffer The request buffer address data_direction The data_direction specifies whether this command is from/to the device 0 (DMA_BIDIRECTIONAL), 1 (DMA_TO_DEVICE), 2 (DMA_FROM_DEVICE), 3 (DMA_NONE) data_direction_str Data direction, as a string host_no The host number device_state_str The current state of the device, as a string dev_id The scsi device id request_bufflen The request buffer length channel The channel number req_addr The current struct request pointer, as a number LINUX SystemTap Tapset Reference November 2019 probe::scsi.iodone 3stap probe::scsi.iodone SCSI command completed by low level driver and enqueued into the done queue. Synopsis scsi.iodone Values req_addr The current struct request pointer, as a number dev_id The scsi device id channel The channel number scsi_timer_pending 1 if a timer is pending on this request device_state_str The current state of the device, as a string data_direction_str Data direction, as a string host_no The host number data_direction The data_direction specifies whether this command is from/to the device. device_state The current state of the device lun The lun number LINUX SystemTap Tapset Reference November 2019 probe::scsi.ioentry 3stap probe::scsi.ioentry Prepares a SCSI mid-layer request Synopsis scsi.ioentry Values req_addr The current struct request pointer, as a number disk_major The major number of the disk (-1 if no information) device_state The current state of the device disk_minor The minor number of the disk (-1 if no information) device_state_str The current state of the device, as a string LINUX SystemTap Tapset Reference November 2019 probe::scsi.ioexecute 3stap probe::scsi.ioexecute Create mid-layer SCSI request and wait for the result Synopsis scsi.ioexecute Values data_direction The data_direction specifies whether this command is from/to the device. retries Number of times to retry request channel The channel number request_bufflen The data buffer buffer length host_no The host number data_direction_str Data direction, as a string device_state_str The current state of the device, as a string request_buffer The data buffer address timeout Request timeout in seconds lun The lun number device_state The current state of the device dev_id The scsi device id LINUX SystemTap Tapset Reference November 2019 probe::scsi.set_state 3stap probe::scsi.set_state Order SCSI device state change Synopsis scsi.set_state Values lun The lun number old_state_str The current state of the device, as a string state_str The new state of the device, as a string state The new state of the device dev_id The scsi device id host_no The host number channel The channel number old_state The current state of the device TTY Tapset This family of probe points is used to probe TTY (Teletype) activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 probe::tty.init 3stap probe::tty.init Called when a tty is being initalized Synopsis tty.init Values module the module name name the driver .dev_name name driver_name the driver name LINUX SystemTap Tapset Reference November 2019 probe::tty.ioctl 3stap probe::tty.ioctl called when a ioctl is request to the tty Synopsis tty.ioctl Values cmd the ioctl command arg the ioctl argument name the file name LINUX SystemTap Tapset Reference November 2019 probe::tty.open 3stap probe::tty.open Called when a tty is opened Synopsis tty.open Values inode_number the inode number file_mode the file mode inode_flags the inode flags file_flags the file flags file_name the file name inode_state the inode state LINUX SystemTap Tapset Reference November 2019 probe::tty.poll 3stap probe::tty.poll Called when a tty device is being polled Synopsis tty.poll Values wait_key the wait queue key file_name the tty file name LINUX SystemTap Tapset Reference November 2019 probe::tty.read 3stap probe::tty.read called when a tty line will be read Synopsis tty.read Values nr The amount of characters to be read driver_name the driver name file_name the file name lreated to the tty buffer the buffer that will receive the characters LINUX SystemTap Tapset Reference November 2019 probe::tty.receive 3stap probe::tty.receive called when a tty receives a message Synopsis tty.receive Values cp the buffer that was received count The amount of characters received driver_name the driver name fp The flag buffer name the name of the module file id the tty id index The tty Index LINUX SystemTap Tapset Reference November 2019 probe::tty.register 3stap probe::tty.register Called when a tty device is registred Synopsis tty.register Values module the module name index the tty index requested name the driver .dev_name name driver_name the driver name LINUX SystemTap Tapset Reference November 2019 probe::tty.release 3stap probe::tty.release Called when the tty is closed Synopsis tty.release Values inode_flags the inode flags file_mode the file mode inode_number the inode number file_flags the file flags inode_state the inode state file_name the file name LINUX SystemTap Tapset Reference November 2019 probe::tty.resize 3stap probe::tty.resize Called when a terminal resize happens Synopsis tty.resize Values old_row the old row value old_ypixel the old ypixel name the tty name new_xpixel the new xpixel value old_xpixel the old xpixel new_row the new row value new_ypixel the new ypixel value old_col the old col value new_col the new col value LINUX SystemTap Tapset Reference November 2019 probe::tty.unregister 3stap probe::tty.unregister Called when a tty device is being unregistered Synopsis tty.unregister Values name the driver .dev_name name index the tty index requested module the module name driver_name the driver name LINUX SystemTap Tapset Reference November 2019 probe::tty.write 3stap probe::tty.write write to the tty line Synopsis tty.write Values buffer the buffer that will be written file_name the file name lreated to the tty nr The amount of characters driver_name the driver name Interrupt Request (IRQ) Tapset This family of probe points is used to probe interrupt request (IRQ) activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 probe::irq_handler.entry 3stap probe::irq_handler.entry Execution of interrupt handler starting Synopsis irq_handler.entry Values thread thread pointer for threaded interrupts thread_fn interrupt handler function for threaded interrupts thread_flags Flags related to thread handler interrupt handler function flags Flags for IRQ handler dev_id Cookie to identify device next_irqaction pointer to next irqaction for shared interrupts flags_str symbolic string representation of IRQ flags dev_name name of device irq irq number action struct irqaction* for this interrupt num dir pointer to the proc/irq/NN/name entry LINUX SystemTap Tapset Reference November 2019 probe::irq_handler.exit 3stap probe::irq_handler.exit Execution of interrupt handler completed Synopsis irq_handler.exit Values ret return value of the handler action struct irqaction* dir pointer to the proc/irq/NN/name entry dev_name name of device irq interrupt number flags_str symbolic string representation of IRQ flags next_irqaction pointer to next irqaction for shared interrupts dev_id Cookie to identify device flags flags for IRQ handler handler interrupt handler function that was executed thread_flags Flags related to thread thread thread pointer for threaded interrupts thread_fn interrupt handler function for threaded interrupts LINUX SystemTap Tapset Reference November 2019 probe::softirq.entry 3stap probe::softirq.entry Execution of handler for a pending softirq starting Synopsis softirq.entry Values vec_nr softirq vector number vec softirq_action vector action pointer to softirq handler just about to execute h struct softirq_action* for current pending softirq LINUX SystemTap Tapset Reference November 2019 probe::softirq.exit 3stap probe::softirq.exit Execution of handler for a pending softirq completed Synopsis softirq.exit Values vec_nr softirq vector number vec softirq_action vector action pointer to softirq handler that just finished execution h struct softirq_action* for just executed softirq LINUX SystemTap Tapset Reference November 2019 probe::workqueue.create 3stap probe::workqueue.create Creating a new workqueue Synopsis workqueue.create Values cpu cpu for which the worker thread is created wq_thread task_struct of the workqueue thread LINUX SystemTap Tapset Reference November 2019 probe::workqueue.destroy 3stap probe::workqueue.destroy Destroying workqueue Synopsis workqueue.destroy Values wq_thread task_struct of the workqueue thread LINUX SystemTap Tapset Reference November 2019 probe::workqueue.execute 3stap probe::workqueue.execute Executing deferred work Synopsis workqueue.execute Values work_func pointer to handler function work work_struct* being executed wq_thread task_struct of the workqueue thread LINUX SystemTap Tapset Reference November 2019 probe::workqueue.insert 3stap probe::workqueue.insert Queuing work on a workqueue Synopsis workqueue.insert Values work work_struct* being queued work_func pointer to handler function wq_thread task_struct of the workqueue thread Networking Tapset This family of probe points is used to probe the activities of the network device and protocol layers. LINUX SystemTap Tapset Reference November 2019 function::format_ipaddr 3stap function::format_ipaddr Returns a string representation for an IP address Synopsis format_ipaddr:string(addr:long,family:long) Arguments addr the IP address family the IP address family (either AF_INET or AF_INET6) LINUX SystemTap Tapset Reference November 2019 function::htonl 3stap function::htonl Convert 32-bit long from host to network order Synopsis htonl:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2019 function::htonll 3stap function::htonll Convert 64-bit long long from host to network order Synopsis htonll:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2019 function::htons 3stap function::htons Convert 16-bit short from host to network order Synopsis htons:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2019 function::ip_ntop 3stap function::ip_ntop Returns a string representation for an IPv4 address Synopsis ip_ntop:string(addr:long) Arguments addr the IPv4 address represented as an integer LINUX SystemTap Tapset Reference November 2019 function::ntohl 3stap function::ntohl Convert 32-bit long from network to host order Synopsis ntohl:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2019 function::ntohll 3stap function::ntohll Convert 64-bit long long from network to host order Synopsis ntohll:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2019 function::ntohs 3stap function::ntohs Convert 16-bit short from network to host order Synopsis ntohs:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2019 probe::netdev.change_mac 3stap probe::netdev.change_mac Called when the netdev_name has the MAC changed Synopsis netdev.change_mac Values new_mac The new MAC address old_mac The current MAC address dev_name The device that will have the MAC changed mac_len The MAC length LINUX SystemTap Tapset Reference November 2019 probe::netdev.change_mtu 3stap probe::netdev.change_mtu Called when the netdev MTU is changed Synopsis netdev.change_mtu Values dev_name The device that will have the MTU changed new_mtu The new MTU old_mtu The current MTU LINUX SystemTap Tapset Reference November 2019 probe::netdev.change_rx_flag 3stap probe::netdev.change_rx_flag Called when the device RX flag will be changed Synopsis netdev.change_rx_flag Values dev_name The device that will be changed flags The new flags LINUX SystemTap Tapset Reference November 2019 probe::netdev.close 3stap probe::netdev.close Called when the device is closed Synopsis netdev.close Values dev_name The device that is going to be closed LINUX SystemTap Tapset Reference November 2019 probe::netdev.get_stats 3stap probe::netdev.get_stats Called when someone asks the device statistics Synopsis netdev.get_stats Values dev_name The device that is going to provide the statistics LINUX SystemTap Tapset Reference November 2019 probe::netdev.hard_transmit 3stap probe::netdev.hard_transmit Called when the devices is going to TX (hard) Synopsis netdev.hard_transmit Values length The length of the transmit buffer. protocol The protocol used in the transmission dev_name The device scheduled to transmit truesize The size of the data to be transmitted. LINUX SystemTap Tapset Reference November 2019 probe::netdev.ioctl 3stap probe::netdev.ioctl Called when the device suffers an IOCTL Synopsis netdev.ioctl Values arg The IOCTL argument (usually the netdev interface) cmd The IOCTL request LINUX SystemTap Tapset Reference November 2019 probe::netdev.open 3stap probe::netdev.open Called when the device is opened Synopsis netdev.open Values dev_name The device that is going to be opened LINUX SystemTap Tapset Reference November 2019 probe::netdev.receive 3stap probe::netdev.receive Data received from network device. Synopsis netdev.receive Values length The length of the receiving buffer. dev_name The name of the device. e.g: eth0, ath1. protocol Protocol of received packet. LINUX SystemTap Tapset Reference November 2019 probe::netdev.register 3stap probe::netdev.register Called when the device is registered Synopsis netdev.register Values dev_name The device that is going to be registered LINUX SystemTap Tapset Reference November 2019 probe::netdev.rx 3stap probe::netdev.rx Called when the device is going to receive a packet Synopsis netdev.rx Values dev_name The device received the packet protocol The packet protocol LINUX SystemTap Tapset Reference November 2019 probe::netdev.set_promiscuity 3stap probe::netdev.set_promiscuity Called when the device enters/leaves promiscuity Synopsis netdev.set_promiscuity Values disable If the device is leaving promiscuity mode dev_name The device that is entering/leaving promiscuity mode inc Count the number of promiscuity openers enable If the device is entering promiscuity mode LINUX SystemTap Tapset Reference November 2019 probe::netdev.transmit 3stap probe::netdev.transmit Network device transmitting buffer Synopsis netdev.transmit Values protocol The protocol of this packet(defined in include/linux/if_ether.h). dev_name The name of the device. e.g: eth0, ath1. truesize The size of the data to be transmitted. length The length of the transmit buffer. LINUX SystemTap Tapset Reference November 2019 probe::netdev.unregister 3stap probe::netdev.unregister Called when the device is being unregistered Synopsis netdev.unregister Values dev_name The device that is going to be unregistered LINUX SystemTap Tapset Reference November 2019 probe::netfilter.arp.forward 3stap probe::netfilter.arp.forward - Called for each ARP packet to be forwarded Synopsis netfilter.arp.forward Values ar_sip Ethernet+IP only (ar_pro==0x800): source IP address pf Protocol family -- always arp indev_name Name of network device packet was received on (if known) ar_data Address of ARP packet data region (after the header) ar_tip Ethernet+IP only (ar_pro==0x800): target IP address ar_pro Format of protocol address indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict outdev Address of net_device representing output device, 0 if unknown nf_stop Constant used to signify a 'stop' verdict nf_accept Constant used to signify an 'accept' verdict length The length of the packet buffer contents, in bytes nf_queue Constant used to signify a 'queue' verdict nf_repeat Constant used to signify a 'repeat' verdict ar_hln Length of hardware address ar_hrd Format of hardware address ar_op ARP opcode (command) data_hex A hexadecimal string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents arphdr Address of ARP header ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address ar_pln Length of protocol address ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address nf_drop Constant used to signify a 'drop' verdict LINUX SystemTap Tapset Reference November 2019 probe::netfilter.arp.in 3stap probe::netfilter.arp.in - Called for each incoming ARP packet Synopsis netfilter.arp.in Values outdev Address of net_device representing output device, 0 if unknown nf_stop Constant used to signify a 'stop' verdict ar_tip Ethernet+IP only (ar_pro==0x800): target IP address ar_pro Format of protocol address nf_stolen Constant used to signify a 'stolen' verdict indev Address of net_device representing input device, 0 if unknown ar_sip Ethernet+IP only (ar_pro==0x800): source IP address pf Protocol family -- always arp indev_name Name of network device packet was received on (if known) ar_data Address of ARP packet data region (after the header) ar_pln Length of protocol address ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address nf_drop Constant used to signify a 'drop' verdict data_hex A hexadecimal string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents arphdr Address of ARP header ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address nf_queue Constant used to signify a 'queue' verdict nf_repeat Constant used to signify a 'repeat' verdict ar_hln Length of hardware address ar_op ARP opcode (command) ar_hrd Format of hardware address nf_accept Constant used to signify an 'accept' verdict length The length of the packet buffer contents, in bytes LINUX SystemTap Tapset Reference November 2019 probe::netfilter.arp.out 3stap probe::netfilter.arp.out - Called for each outgoing ARP packet Synopsis netfilter.arp.out Values ar_pln Length of protocol address nf_drop Constant used to signify a 'drop' verdict ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address data_hex A hexadecimal string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address arphdr Address of ARP header nf_queue Constant used to signify a 'queue' verdict ar_op ARP opcode (command) ar_hrd Format of hardware address nf_repeat Constant used to signify a 'repeat' verdict ar_hln Length of hardware address nf_accept Constant used to signify an 'accept' verdict length The length of the packet buffer contents, in bytes outdev Address of net_device representing output device, 0 if unknown nf_stop Constant used to signify a 'stop' verdict ar_pro Format of protocol address ar_tip Ethernet+IP only (ar_pro==0x800): target IP address nf_stolen Constant used to signify a 'stolen' verdict indev Address of net_device representing input device, 0 if unknown ar_sip Ethernet+IP only (ar_pro==0x800): source IP address indev_name Name of network device packet was received on (if known) ar_data Address of ARP packet data region (after the header) pf Protocol family -- always arp LINUX SystemTap Tapset Reference November 2019 probe::netfilter.bridge.forward 3stap probe::netfilter.bridge.forward Called on an incoming bridging packet destined for some other computer Synopsis netfilter.bridge.forward Values br_flags BPDU flags outdev Address of net_device representing output device, 0 if unknown nf_stop Constant used to signify a 'stop' verdict brhdr Address of bridge header br_bid Identity of bridge protocol Packet protocol br_vid Protocol version identifier llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict indev_name Name of network device packet was received on (if known) br_type BPDU type br_prid Protocol identifier pf Protocol family -- always bridge br_htime Hello time in 1/256 secs br_cost Total cost from transmitting bridge to root br_poid Port identifier br_max Max age in 1/256 secs nf_drop Constant used to signify a 'drop' verdict br_msg Message age in 1/256 secs data_str A string representing the packet buffer contents br_rmac Root bridge MAC address outdev_name Name of network device packet will be routed to (if known) data_hex A hexadecimal string representing the packet buffer contents br_rid Identity of root bridge br_mac Bridge MAC address llcpdu Address of LLC Protocol Data Unit nf_repeat Constant used to signify a 'repeat' verdict nf_queue Constant used to signify a 'queue' verdict br_fd Forward delay in 1/256 secs length The length of the packet buffer contents, in bytes nf_accept Constant used to signify an 'accept' verdict LINUX SystemTap Tapset Reference November 2019 probe::netfilter.bridge.local_in 3stap probe::netfilter.bridge.local_in Called on a bridging packet destined for the local computer Synopsis netfilter.bridge.local_in Values br_rmac Root bridge MAC address data_str A string representing the packet buffer contents data_hex A hexadecimal string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) br_rid Identity of root bridge nf_drop Constant used to signify a 'drop' verdict br_max Max age in 1/256 secs br_msg Message age in 1/256 secs length The length of the packet buffer contents, in bytes nf_accept Constant used to signify an 'accept' verdict llcpdu Address of LLC Protocol Data Unit nf_repeat Constant used to signify a 'repeat' verdict br_mac Bridge MAC address br_fd Forward delay in 1/256 secs nf_queue Constant used to signify a 'queue' verdict br_bid Identity of bridge protocol Packet protocol llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_vid Protocol version identifier outdev Address of net_device representing output device, 0 if unknown br_flags BPDU flags nf_stop Constant used to signify a 'stop' verdict brhdr Address of bridge header br_prid Protocol identifier pf Protocol family -- always bridge indev_name Name of network device packet was received on (if known) br_type BPDU type br_htime Hello time in 1/256 secs br_cost Total cost from transmitting bridge to root br_poid Port identifier indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict LINUX SystemTap Tapset Reference November 2019 probe::netfilter.bridge.local_out 3stap probe::netfilter.bridge.local_out Called on a bridging packet coming from a local process Synopsis netfilter.bridge.local_out Values outdev Address of net_device representing output device, 0 if unknown br_flags BPDU flags nf_stop Constant used to signify a 'stop' verdict brhdr Address of bridge header br_bid Identity of bridge protocol Packet protocol llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_vid Protocol version identifier indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict pf Protocol family -- always bridge br_prid Protocol identifier indev_name Name of network device packet was received on (if known) br_type BPDU type br_htime Hello time in 1/256 secs br_poid Port identifier br_cost Total cost from transmitting bridge to root nf_drop Constant used to signify a 'drop' verdict br_max Max age in 1/256 secs br_msg Message age in 1/256 secs br_rmac Root bridge MAC address data_str A string representing the packet buffer contents data_hex A hexadecimal string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) br_rid Identity of root bridge llcpdu Address of LLC Protocol Data Unit nf_repeat Constant used to signify a 'repeat' verdict br_mac Bridge MAC address nf_queue Constant used to signify a 'queue' verdict br_fd Forward delay in 1/256 secs length The length of the packet buffer contents, in bytes nf_accept Constant used to signify an 'accept' verdict LINUX SystemTap Tapset Reference November 2019 probe::netfilter.bridge.post_routing 3stap probe::netfilter.bridge.post_routing - Called before a bridging packet hits the wire Synopsis netfilter.bridge.post_routing Values nf_stolen Constant used to signify a 'stolen' verdict indev Address of net_device representing input device, 0 if unknown br_poid Port identifier br_cost Total cost from transmitting bridge to root br_htime Hello time in 1/256 secs indev_name Name of network device packet was received on (if known) br_type BPDU type br_prid Protocol identifier pf Protocol family -- always bridge brhdr Address of bridge header nf_stop Constant used to signify a 'stop' verdict br_flags BPDU flags outdev Address of net_device representing output device, 0 if unknown llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_vid Protocol version identifier protocol Packet protocol br_bid Identity of bridge br_fd Forward delay in 1/256 secs nf_queue Constant used to signify a 'queue' verdict br_mac Bridge MAC address llcpdu Address of LLC Protocol Data Unit nf_repeat Constant used to signify a 'repeat' verdict nf_accept Constant used to signify an 'accept' verdict length The length of the packet buffer contents, in bytes br_msg Message age in 1/256 secs br_max Max age in 1/256 secs nf_drop Constant used to signify a 'drop' verdict br_rid Identity of root bridge outdev_name Name of network device packet will be routed to (if known) data_hex A hexadecimal string representing the packet buffer contents data_str A string representing the packet buffer contents br_rmac Root bridge MAC address LINUX SystemTap Tapset Reference November 2019 probe::netfilter.bridge.pre_routing 3stap probe::netfilter.bridge.pre_routing - Called before a bridging packet is routed Synopsis netfilter.bridge.pre_routing Values br_htime Hello time in 1/256 secs indev_name Name of network device packet was received on (if known) br_type BPDU type pf Protocol family -- always bridge br_prid Protocol identifier br_cost Total cost from transmitting bridge to root br_poid Port identifier nf_stolen Constant used to signify a 'stolen' verdict indev Address of net_device representing input device, 0 if unknown protocol Packet protocol br_bid Identity of bridge llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_vid Protocol version identifier nf_stop Constant used to signify a 'stop' verdict br_flags BPDU flags outdev Address of net_device representing output device, 0 if unknown brhdr Address of bridge header length The length of the packet buffer contents, in bytes nf_accept Constant used to signify an 'accept' verdict br_mac Bridge MAC address nf_repeat Constant used to signify a 'repeat' verdict llcpdu Address of LLC Protocol Data Unit br_fd Forward delay in 1/256 secs nf_queue Constant used to signify a 'queue' verdict data_str A string representing the packet buffer contents br_rmac Root bridge MAC address br_rid Identity of root bridge outdev_name Name of network device packet will be routed to (if known) data_hex A hexadecimal string representing the packet buffer contents br_max Max age in 1/256 secs nf_drop Constant used to signify a 'drop' verdict br_msg Message age in 1/256 secs LINUX SystemTap Tapset Reference November 2019 probe::netfilter.ip.forward 3stap probe::netfilter.ip.forward Called on an incoming IP packet addressed to some other computer Synopsis netfilter.ip.forward Values outdev Address of net_device representing output device, 0 if unknown urg TCP URG flag (if protocol is TCP; ipv4 only) nf_stop Constant used to signify a 'stop' verdict syn TCP SYN flag (if protocol is TCP; ipv4 only) saddr A string representing the source IP address fin TCP FIN flag (if protocol is TCP; ipv4 only) protocol Packet protocol from driver (ipv4 only) ipproto_tcp Constant used to signify that the packet protocol is TCP psh TCP PSH flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict indev_name Name of network device packet was received on (if known) dport TCP or UDP destination port (ipv4 only) family IP address family pf Protocol family -- either ipv4 or ipv6 ipproto_udp Constant used to signify that the packet protocol is UDP rst TCP RST flag (if protocol is TCP; ipv4 only) nf_drop Constant used to signify a 'drop' verdict data_str A string representing the packet buffer contents data_hex A hexadecimal string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) daddr A string representing the destination IP address nf_repeat Constant used to signify a 'repeat' verdict sport TCP or UDP source port (ipv4 only) nf_queue Constant used to signify a 'queue' verdict length The length of the packet buffer contents, in bytes iphdr Address of IP header nf_accept Constant used to signify an 'accept' verdict LINUX SystemTap Tapset Reference November 2019 probe::netfilter.ip.local_in 3stap probe::netfilter.ip.local_in Called on an incoming IP packet addressed to the local computer Synopsis netfilter.ip.local_in Values indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict ipproto_udp Constant used to signify that the packet protocol is UDP pf Protocol family -- either ipv4 or ipv6 family IP address family dport TCP or UDP destination port (ipv4 only) indev_name Name of network device packet was received on (if known) nf_stop Constant used to signify a 'stop' verdict urg TCP URG flag (if protocol is TCP; ipv4 only) outdev Address of net_device representing output device, 0 if unknown saddr A string representing the source IP address syn TCP SYN flag (if protocol is TCP; ipv4 only) protocol Packet protocol from driver (ipv4 only) fin TCP FIN flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) ipproto_tcp Constant used to signify that the packet protocol is TCP psh TCP PSH flag (if protocol is TCP; ipv4 only) nf_repeat Constant used to signify a 'repeat' verdict sport TCP or UDP source port (ipv4 only) nf_queue Constant used to signify a 'queue' verdict length The length of the packet buffer contents, in bytes nf_accept Constant used to signify an 'accept' verdict iphdr Address of IP header nf_drop Constant used to signify a 'drop' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) data_str A string representing the packet buffer contents daddr A string representing the destination IP address outdev_name Name of network device packet will be routed to (if known) data_hex A hexadecimal string representing the packet buffer contents LINUX SystemTap Tapset Reference November 2019 probe::netfilter.ip.local_out 3stap probe::netfilter.ip.local_out Called on an outgoing IP packet Synopsis netfilter.ip.local_out Values nf_queue Constant used to signify a 'queue' verdict nf_repeat Constant used to signify a 'repeat' verdict sport TCP or UDP source port (ipv4 only) nf_accept Constant used to signify an 'accept' verdict iphdr Address of IP header length The length of the packet buffer contents, in bytes nf_drop Constant used to signify a 'drop' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) daddr A string representing the destination IP address outdev_name Name of network device packet will be routed to (if known) data_hex A hexadecimal string representing the packet buffer contents data_str A string representing the packet buffer contents indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict ipproto_udp Constant used to signify that the packet protocol is UDP pf Protocol family -- either ipv4 or ipv6 family IP address family dport TCP or UDP destination port (ipv4 only) indev_name Name of network device packet was received on (if known) saddr A string representing the source IP address syn TCP SYN flag (if protocol is TCP; ipv4 only) nf_stop Constant used to signify a 'stop' verdict outdev Address of net_device representing output device, 0 if unknown urg TCP URG flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) ipproto_tcp Constant used to signify that the packet protocol is TCP psh TCP PSH flag (if protocol is TCP; ipv4 only) protocol Packet protocol from driver (ipv4 only) fin TCP FIN flag (if protocol is TCP; ipv4 only) LINUX SystemTap Tapset Reference November 2019 probe::netfilter.ip.post_routing 3stap probe::netfilter.ip.post_routing Called immediately before an outgoing IP packet leaves the computer Synopsis netfilter.ip.post_routing Values iphdr Address of IP header nf_accept Constant used to signify an 'accept' verdict length The length of the packet buffer contents, in bytes nf_queue Constant used to signify a 'queue' verdict nf_repeat Constant used to signify a 'repeat' verdict sport TCP or UDP source port (ipv4 only) outdev_name Name of network device packet will be routed to (if known) data_hex A hexadecimal string representing the packet buffer contents daddr A string representing the destination IP address data_str A string representing the packet buffer contents nf_drop Constant used to signify a 'drop' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) pf Protocol family -- either ipv4 or ipv6 indev_name Name of network device packet was received on (if known) dport TCP or UDP destination port (ipv4 only) family IP address family ipproto_udp Constant used to signify that the packet protocol is UDP indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict ipproto_tcp Constant used to signify that the packet protocol is TCP psh TCP PSH flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) fin TCP FIN flag (if protocol is TCP; ipv4 only) protocol Packet protocol from driver (ipv4 only) syn TCP SYN flag (if protocol is TCP; ipv4 only) saddr A string representing the source IP address urg TCP URG flag (if protocol is TCP; ipv4 only) outdev Address of net_device representing output device, 0 if unknown nf_stop Constant used to signify a 'stop' verdict LINUX SystemTap Tapset Reference November 2019 probe::netfilter.ip.pre_routing 3stap probe::netfilter.ip.pre_routing Called before an IP packet is routed Synopsis netfilter.ip.pre_routing Values ipproto_udp Constant used to signify that the packet protocol is UDP pf Protocol family - either 'ipv4' or 'ipv6' dport TCP or UDP destination port (ipv4 only) family IP address family indev_name Name of network device packet was received on (if known) nf_stolen Constant used to signify a 'stolen' verdict indev Address of net_device representing input device, 0 if unknown protocol Packet protocol from driver (ipv4 only) fin TCP FIN flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) psh TCP PSH flag (if protocol is TCP; ipv4 only) ipproto_tcp Constant used to signify that the packet protocol is TCP nf_stop Constant used to signify a 'stop' verdict urg TCP URG flag (if protocol is TCP; ipv4 only) outdev Address of net_device representing output device, 0 if unknown saddr A string representing the source IP address syn TCP SYN flag (if protocol is TCP; ipv4 only) length The length of the packet buffer contents, in bytes nf_accept Constant used to signify an 'accept' verdict iphdr Address of IP header sport TCP or UDP source port (ipv4 only) nf_repeat Constant used to signify a 'repeat' verdict nf_queue Constant used to signify a 'queue' verdict data_str A string representing the packet buffer contents daddr A string representing the destination IP address outdev_name Name of network device packet will be routed to (if known) data_hex A hexadecimal string representing the packet buffer contents nf_drop Constant used to signify a 'drop' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.clnt.bind_new_program 3stap probe::sunrpc.clnt.bind_new_program Bind a new RPC program to an existing client Synopsis sunrpc.clnt.bind_new_program Values old_vers the version of old RPC program old_prog the number of old RPC program vers the version of new RPC program old_progname the name of old RPC program servername the server machine name progname the name of new RPC program prog the number of new RPC program LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.clnt.call_async 3stap probe::sunrpc.clnt.call_async Make an asynchronous RPC call Synopsis sunrpc.clnt.call_async Values port the port number xid current transmission id servername the server machine name progname the RPC program name flags flags prog the RPC program number dead whether this client is abandoned vers the RPC program version number proc the procedure number in this RPC call procname the procedure name in this RPC call prot the IP protocol number LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.clnt.call_sync 3stap probe::sunrpc.clnt.call_sync Make a synchronous RPC call Synopsis sunrpc.clnt.call_sync Values progname the RPC program name flags flags prog the RPC program number dead whether this client is abandoned servername the server machine name prot the IP protocol number vers the RPC program version number proc the procedure number in this RPC call procname the procedure name in this RPC call xid current transmission id port the port number LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.clnt.clone_client 3stap probe::sunrpc.clnt.clone_client Clone an RPC client structure Synopsis sunrpc.clnt.clone_client Values progname the RPC program name prog the RPC program number port the port number servername the server machine name prot the IP protocol number vers the RPC program version number authflavor the authentication flavor LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.clnt.create_client 3stap probe::sunrpc.clnt.create_client Create an RPC client Synopsis sunrpc.clnt.create_client Values prog the RPC program number progname the RPC program name servername the server machine name port the port number prot the IP protocol number authflavor the authentication flavor vers the RPC program version number LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.clnt.restart_call 3stap probe::sunrpc.clnt.restart_call Restart an asynchronous RPC call Synopsis sunrpc.clnt.restart_call Values tk_runstate the task run status tk_flags the task flags xid the transmission id tk_priority the task priority tk_pid the debugging aid of task prog the RPC program number servername the server machine name LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.clnt.shutdown_client 3stap probe::sunrpc.clnt.shutdown_client Shutdown an RPC client Synopsis sunrpc.clnt.shutdown_client Values prot the IP protocol number om_execute the RPC execution jiffies om_ops the count of operations vers the RPC program version number om_queue the jiffies queued for xmit om_bytes_sent the count of bytes out prog the RPC program number progname the RPC program name servername the server machine name tasks the number of references om_bytes_recv the count of bytes in netreconn the count of reconnections authflavor the authentication flavor rpccnt the count of RPC calls om_rtt the RPC RTT jiffies om_ntrans the count of RPC transmissions port the port number clones the number of clones LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.sched.delay 3stap probe::sunrpc.sched.delay Delay an RPC task Synopsis sunrpc.sched.delay Values prog the program number in the RPC call tk_pid the debugging id of the task prot the IP protocol in the RPC call vers the program version in the RPC call xid the transmission id in the RPC call tk_flags the flags of the task delay the time delayed LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.sched.execute 3stap probe::sunrpc.sched.execute Execute the RPC `scheduler' Synopsis sunrpc.sched.execute Values prog the program number in the RPC call tk_pid the debugging id of the task prot the IP protocol in the RPC call vers the program version in the RPC call xid the transmission id in the RPC call tk_flags the flags of the task LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.sched.new_task 3stap probe::sunrpc.sched.new_task Create new task for the specified client Synopsis sunrpc.sched.new_task Values xid the transmission id in the RPC call tk_flags the flags of the task prog the program number in the RPC call prot the IP protocol in the RPC call vers the program version in the RPC call LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.sched.release_task 3stap probe::sunrpc.sched.release_task Release all resources associated with a task Synopsis sunrpc.sched.release_task Values tk_flags the flags of the task xid the transmission id in the RPC call prog the program number in the RPC call vers the program version in the RPC call prot the IP protocol in the RPC call Description rpc_release_task function might not be found for a particular kernel. So, if we can't find it, just return '-1' for everything. LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.svc.create 3stap probe::sunrpc.svc.create Create an RPC service Synopsis sunrpc.svc.create Values pg_nvers the number of supported versions bufsize the buffer size prog the number of the program progname the name of the program LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.svc.destroy 3stap probe::sunrpc.svc.destroy Destroy an RPC service Synopsis sunrpc.svc.destroy Values rpcbadfmt the count of requests dropped for bad formats nettcpconn the count of accepted TCP connections rpccnt the count of valid RPC requests sv_nrthreads the number of concurrent threads sv_prog the number of the program rpcbadauth the count of requests drooped for authentication failure sv_progname the name of the program sv_name the service name netcnt the count of received RPC requests LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.svc.drop 3stap probe::sunrpc.svc.drop Drop RPC request Synopsis sunrpc.svc.drop Values sv_name the service name rq_proc the procedure number in the request peer_ip the peer address where the request is from rq_vers the program version in the request rq_prog the program number in the request rq_prot the IP protocol of the reqeust rq_xid the transmission id in the request LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.svc.process 3stap probe::sunrpc.svc.process Process an RPC request Synopsis sunrpc.svc.process Values sv_name the service name rq_proc the procedure number in the request sv_nrthreads the number of concurrent threads sv_prog the number of the program peer_ip the peer address where the request is from rq_prog the program number in the request rq_vers the program version in the request rq_prot the IP protocol of the reqeust rq_xid the transmission id in the request LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.svc.recv 3stap probe::sunrpc.svc.recv Listen for the next RPC request on any socket Synopsis sunrpc.svc.recv Values timeout the timeout of waiting for data sv_name the service name sv_nrthreads the number of concurrent threads sv_prog the number of the program LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.svc.register 3stap probe::sunrpc.svc.register Register an RPC service with the local portmapper Synopsis sunrpc.svc.register Values sv_name the service name port the port number prot the IP protocol number progname the name of the program prog the number of the program Description If proto and port are both 0, then unregister a service. LINUX SystemTap Tapset Reference November 2019 probe::sunrpc.svc.send 3stap probe::sunrpc.svc.send Return reply to RPC client Synopsis sunrpc.svc.send Values peer_ip the peer address where the request is from rq_proc the procedure number in the request sv_name the service name rq_xid the transmission id in the request rq_prot the IP protocol of the reqeust rq_vers the program version in the request rq_prog the program number in the request LINUX SystemTap Tapset Reference November 2019 probe::tcp.disconnect 3stap probe::tcp.disconnect TCP socket disconnection Synopsis tcp.disconnect Values flags TCP flags (e.g. FIN, etc) sock Network socket name Name of this probe daddr A string representing the destination IP address sport TCP source port family IP address family saddr A string representing the source IP address dport TCP destination port Context The process which disconnects tcp LINUX SystemTap Tapset Reference November 2019 probe::tcp.disconnect.return 3stap probe::tcp.disconnect.return TCP socket disconnection complete Synopsis tcp.disconnect.return Values ret Error code (0: no error) name Name of this probe Context The process which disconnects tcp LINUX SystemTap Tapset Reference November 2019 probe::tcp.receive 3stap probe::tcp.receive Called when a TCP packet is received Synopsis tcp.receive Values protocol Packet protocol from driver psh TCP PSH flag family IP address family dport TCP destination port name Name of the probe point sport TCP source port syn TCP SYN flag iphdr IP header address fin TCP FIN flag ack TCP ACK flag saddr A string representing the source IP address daddr A string representing the destination IP address urg TCP URG flag rst TCP RST flag LINUX SystemTap Tapset Reference November 2019 probe::tcp.recvmsg 3stap probe::tcp.recvmsg Receiving TCP message Synopsis tcp.recvmsg Values sport TCP source port daddr A string representing the destination IP address name Name of this probe size Number of bytes to be received dport TCP destination port saddr A string representing the source IP address family IP address family sock Network socket Context The process which receives a tcp message LINUX SystemTap Tapset Reference November 2019 probe::tcp.recvmsg.return 3stap probe::tcp.recvmsg.return Receiving TCP message complete Synopsis tcp.recvmsg.return Values dport TCP destination port saddr A string representing the source IP address family IP address family sport TCP source port daddr A string representing the destination IP address name Name of this probe size Number of bytes received or error code if an error occurred. Context The process which receives a tcp message LINUX SystemTap Tapset Reference November 2019 probe::tcp.sendmsg 3stap probe::tcp.sendmsg Sending a tcp message Synopsis tcp.sendmsg Values family IP address family name Name of this probe size Number of bytes to send sock Network socket Context The process which sends a tcp message LINUX SystemTap Tapset Reference November 2019 probe::tcp.sendmsg.return 3stap probe::tcp.sendmsg.return Sending TCP message is done Synopsis tcp.sendmsg.return Values size Number of bytes sent or error code if an error occurred. name Name of this probe Context The process which sends a tcp message LINUX SystemTap Tapset Reference November 2019 probe::tcp.setsockopt 3stap probe::tcp.setsockopt Call to setsockopt Synopsis tcp.setsockopt Values name Name of this probe family IP address family optstr Resolves optname to a human-readable format sock Network socket optlen Used to access values for setsockopt optname TCP socket options (e.g. TCP_NODELAY, TCP_MAXSEG, etc) level The level at which the socket options will be manipulated Context The process which calls setsockopt LINUX SystemTap Tapset Reference November 2019 probe::tcp.setsockopt.return 3stap probe::tcp.setsockopt.return Return from setsockopt Synopsis tcp.setsockopt.return Values name Name of this probe ret Error code (0: no error) Context The process which calls setsockopt LINUX SystemTap Tapset Reference November 2019 probe::udp.disconnect 3stap probe::udp.disconnect Fires when a process requests for a UDP disconnection Synopsis udp.disconnect Values dport UDP destination port name The name of this probe sock Network socket used by the process family IP address family saddr A string representing the source IP address sport UDP source port daddr A string representing the destination IP address flags Flags (e.g. FIN, etc) Context The process which requests a UDP disconnection LINUX SystemTap Tapset Reference November 2019 probe::udp.disconnect.return 3stap probe::udp.disconnect.return UDP has been disconnected successfully Synopsis udp.disconnect.return Values sport UDP source port daddr A string representing the destination IP address ret Error code (0: no error) name The name of this probe dport UDP destination port saddr A string representing the source IP address family IP address family Context The process which requested a UDP disconnection LINUX SystemTap Tapset Reference November 2019 probe::udp.recvmsg 3stap probe::udp.recvmsg Fires whenever a UDP message is received Synopsis udp.recvmsg Values daddr A string representing the destination IP address sport UDP source port saddr A string representing the source IP address size Number of bytes received by the process family IP address family dport UDP destination port name The name of this probe sock Network socket used by the process Context The process which received a UDP message LINUX SystemTap Tapset Reference November 2019 probe::udp.recvmsg.return 3stap probe::udp.recvmsg.return Fires whenever an attempt to receive a UDP message received is completed Synopsis udp.recvmsg.return Values name The name of this probe dport UDP destination port family IP address family saddr A string representing the source IP address size Number of bytes received by the process sport UDP source port daddr A string representing the destination IP address Context The process which received a UDP message LINUX SystemTap Tapset Reference November 2019 probe::udp.sendmsg 3stap probe::udp.sendmsg Fires whenever a process sends a UDP message Synopsis udp.sendmsg Values dport UDP destination port sock Network socket used by the process name The name of this probe saddr A string representing the source IP address size Number of bytes sent by the process family IP address family sport UDP source port daddr A string representing the destination IP address Context The process which sent a UDP message LINUX SystemTap Tapset Reference November 2019 probe::udp.sendmsg.return 3stap probe::udp.sendmsg.return Fires whenever an attempt to send a UDP message is completed Synopsis udp.sendmsg.return Values name The name of this probe size Number of bytes sent by the process Context The process which sent a UDP message Socket Tapset This family of probe points is used to probe socket activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 function::inet_get_ip_source 3stap function::inet_get_ip_source Provide IP source address string for a kernel socket Synopsis inet_get_ip_source:string(sock:long) Arguments sock pointer to the kernel socket LINUX SystemTap Tapset Reference November 2019 function::inet_get_local_port 3stap function::inet_get_local_port Provide local port number for a kernel socket Synopsis inet_get_local_port:long(sock:long) Arguments sock pointer to the kernel socket LINUX SystemTap Tapset Reference November 2019 function::sock_fam_num2str 3stap function::sock_fam_num2str Given a protocol family number, return a string representation Synopsis sock_fam_num2str:string(family:long) Arguments family The family number LINUX SystemTap Tapset Reference November 2019 function::sock_fam_str2num 3stap function::sock_fam_str2num Given a protocol family name (string), return the corresponding protocol family number Synopsis sock_fam_str2num:long(family:string) Arguments family The family name LINUX SystemTap Tapset Reference November 2019 function::sock_prot_num2str 3stap function::sock_prot_num2str Given a protocol number, return a string representation Synopsis sock_prot_num2str:string(proto:long) Arguments proto The protocol number LINUX SystemTap Tapset Reference November 2019 function::sock_prot_str2num 3stap function::sock_prot_str2num Given a protocol name (string), return the corresponding protocol number Synopsis sock_prot_str2num:long(proto:string) Arguments proto The protocol name LINUX SystemTap Tapset Reference November 2019 function::sock_state_num2str 3stap function::sock_state_num2str Given a socket state number, return a string representation Synopsis sock_state_num2str:string(state:long) Arguments state The state number LINUX SystemTap Tapset Reference November 2019 function::sock_state_str2num 3stap function::sock_state_str2num Given a socket state string, return the corresponding state number Synopsis sock_state_str2num:long(state:string) Arguments state The state name LINUX SystemTap Tapset Reference November 2019 probe::socket.aio_read 3stap probe::socket.aio_read Receiving message via sock_aio_read Synopsis socket.aio_read Values family Protocol family value name Name of this probe flags Socket flags value type Socket type value size Message size in bytes state Socket state value protocol Protocol value Context The message sender Description Fires at the beginning of receiving a message on a socket via the sock_aio_read function LINUX SystemTap Tapset Reference November 2019 probe::socket.aio_read.return 3stap probe::socket.aio_read.return Conclusion of message received via sock_aio_read Synopsis socket.aio_read.return Values type Socket type value size Size of message received (in bytes) or error code if success = 0 state Socket state value success Was receive successful? (1 = yes, 0 = no) protocol Protocol value name Name of this probe family Protocol family value flags Socket flags value Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_aio_read function LINUX SystemTap Tapset Reference November 2019 probe::socket.aio_write 3stap probe::socket.aio_write Message send via sock_aio_write Synopsis socket.aio_write Values type Socket type value size Message size in bytes state Socket state value protocol Protocol value family Protocol family value name Name of this probe flags Socket flags value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_aio_write function LINUX SystemTap Tapset Reference November 2019 probe::socket.aio_write.return 3stap probe::socket.aio_write.return Conclusion of message send via sock_aio_write Synopsis socket.aio_write.return Values protocol Protocol value success Was receive successful? (1 = yes, 0 = no) state Socket state value size Size of message received (in bytes) or error code if success = 0 type Socket type value flags Socket flags value name Name of this probe family Protocol family value Context The message receiver. Description Fires at the conclusion of sending a message on a socket via the sock_aio_write function LINUX SystemTap Tapset Reference November 2019 probe::socket.close 3stap probe::socket.close Close a socket Synopsis socket.close Values state Socket state value protocol Protocol value type Socket type value flags Socket flags value family Protocol family value name Name of this probe Context The requester (user process or kernel) Description Fires at the beginning of closing a socket. LINUX SystemTap Tapset Reference November 2019 probe::socket.close.return 3stap probe::socket.close.return Return from closing a socket Synopsis socket.close.return Values name Name of this probe Context The requester (user process or kernel) Description Fires at the conclusion of closing a socket. LINUX SystemTap Tapset Reference November 2019 probe::socket.create 3stap probe::socket.create Creation of a socket Synopsis socket.create Values type Socket type value requester Requested by user process or the kernel (1 = kernel, 0 = user) protocol Protocol value name Name of this probe family Protocol family value Context The requester (see requester variable) Description Fires at the beginning of creating a socket. LINUX SystemTap Tapset Reference November 2019 probe::socket.create.return 3stap probe::socket.create.return Return from Creation of a socket Synopsis socket.create.return Values family Protocol family value name Name of this probe err Error code if success == 0 requester Requested by user process or the kernel (1 = kernel, 0 = user) type Socket type value success Was socket creation successful? (1 = yes, 0 = no) protocol Protocol value Context The requester (user process or kernel) Description Fires at the conclusion of creating a socket. LINUX SystemTap Tapset Reference November 2019 probe::socket.read_iter 3stap probe::socket.read_iter Receiving message via sock_read_iter Synopsis socket.read_iter Values flags Socket flags value name Name of this probe family Protocol family value protocol Protocol value state Socket state value size Message size in bytes type Socket type value Context The message sender Description Fires at the beginning of receiving a message on a socket via the sock_read_iter function LINUX SystemTap Tapset Reference November 2019 probe::socket.read_iter.return 3stap probe::socket.read_iter.return Conclusion of message received via sock_read_iter Synopsis socket.read_iter.return Values flags Socket flags value family Protocol family value name Name of this probe protocol Protocol value success Was receive successful? (1 = yes, 0 = no) state Socket state value type Socket type value size Size of message received (in bytes) or error code if success = 0 Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_read_iter function LINUX SystemTap Tapset Reference November 2019 probe::socket.readv 3stap probe::socket.readv Receiving a message via sock_readv Synopsis socket.readv Values type Socket type value size Message size in bytes state Socket state value protocol Protocol value family Protocol family value name Name of this probe flags Socket flags value Context The message sender Description Fires at the beginning of receiving a message on a socket via the sock_readv function LINUX SystemTap Tapset Reference November 2019 probe::socket.readv.return 3stap probe::socket.readv.return Conclusion of receiving a message via sock_readv Synopsis socket.readv.return Values protocol Protocol value success Was receive successful? (1 = yes, 0 = no) state Socket state value size Size of message received (in bytes) or error code if success = 0 type Socket type value flags Socket flags value name Name of this probe family Protocol family value Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_readv function LINUX SystemTap Tapset Reference November 2019 probe::socket.receive 3stap probe::socket.receive Message received on a socket. Synopsis socket.receive Values protocol Protocol value success Was send successful? (1 = yes, 0 = no) state Socket state value size Size of message received (in bytes) or error code if success = 0 type Socket type value flags Socket flags value family Protocol family value name Name of this probe Context The message receiver LINUX SystemTap Tapset Reference November 2019 probe::socket.recvmsg 3stap probe::socket.recvmsg Message being received on socket Synopsis socket.recvmsg Values state Socket state value protocol Protocol value type Socket type value size Message size in bytes flags Socket flags value family Protocol family value name Name of this probe Context The message receiver. Description Fires at the beginning of receiving a message on a socket via the sock_recvmsg function LINUX SystemTap Tapset Reference November 2019 probe::socket.recvmsg.return 3stap probe::socket.recvmsg.return Return from Message being received on socket Synopsis socket.recvmsg.return Values state Socket state value success Was receive successful? (1 = yes, 0 = no) protocol Protocol value size Size of message received (in bytes) or error code if success = 0 type Socket type value flags Socket flags value family Protocol family value name Name of this probe Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_recvmsg function. LINUX SystemTap Tapset Reference November 2019 probe::socket.send 3stap probe::socket.send Message sent on a socket. Synopsis socket.send Values state Socket state value success Was send successful? (1 = yes, 0 = no) protocol Protocol value type Socket type value size Size of message sent (in bytes) or error code if success = 0 flags Socket flags value family Protocol family value name Name of this probe Context The message sender LINUX SystemTap Tapset Reference November 2019 probe::socket.sendmsg 3stap probe::socket.sendmsg Message is currently being sent on a socket. Synopsis socket.sendmsg Values family Protocol family value name Name of this probe flags Socket flags value type Socket type value size Message size in bytes state Socket state value protocol Protocol value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_sendmsg function LINUX SystemTap Tapset Reference November 2019 probe::socket.sendmsg.return 3stap probe::socket.sendmsg.return Return from socket.sendmsg. Synopsis socket.sendmsg.return Values flags Socket flags value family Protocol family value name Name of this probe state Socket state value success Was send successful? (1 = yes, 0 = no) protocol Protocol value type Socket type value size Size of message sent (in bytes) or error code if success = 0 Context The message sender. Description Fires at the conclusion of sending a message on a socket via the sock_sendmsg function LINUX SystemTap Tapset Reference November 2019 probe::socket.write_iter 3stap probe::socket.write_iter Message send via sock_write_iter Synopsis socket.write_iter Values flags Socket flags value name Name of this probe family Protocol family value protocol Protocol value state Socket state value size Message size in bytes type Socket type value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_write_iter function LINUX SystemTap Tapset Reference November 2019 probe::socket.write_iter.return 3stap probe::socket.write_iter.return Conclusion of message send via sock_write_iter Synopsis socket.write_iter.return Values protocol Protocol value success Was receive successful? (1 = yes, 0 = no) state Socket state value size Size of message received (in bytes) or error code if success = 0 type Socket type value flags Socket flags value family Protocol family value name Name of this probe Context The message receiver. Description Fires at the conclusion of sending a message on a socket via the sock_write_iter function LINUX SystemTap Tapset Reference November 2019 probe::socket.writev 3stap probe::socket.writev Message sent via socket_writev Synopsis socket.writev Values type Socket type value size Message size in bytes state Socket state value protocol Protocol value family Protocol family value name Name of this probe flags Socket flags value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_writev function LINUX SystemTap Tapset Reference November 2019 probe::socket.writev.return 3stap probe::socket.writev.return Conclusion of message sent via socket_writev Synopsis socket.writev.return Values name Name of this probe family Protocol family value flags Socket flags value size Size of message sent (in bytes) or error code if success = 0 type Socket type value state Socket state value success Was send successful? (1 = yes, 0 = no) protocol Protocol value Context The message receiver. Description Fires at the conclusion of sending a message on a socket via the sock_writev function SNMP Information Tapset This family of probe points is used to probe socket activities to provide SNMP type information. It contains the following functions and probe points: LINUX SystemTap Tapset Reference November 2019 function::ipmib_filter_key 3stap function::ipmib_filter_key Default filter function for ipmib.* probes Synopsis ipmib_filter_key:long(skb:long,op:long,SourceIsLocal:long) Arguments skb pointer to the struct sk_buff op value to be counted if skb passes the filter SourceIsLocal 1 is local operation and 0 is non-local operation Description This function is a default filter function. The user can replace this function with their own. The user-supplied filter function returns an index key based on the values in skb. A return value of 0 means this particular skb should be not be counted. LINUX SystemTap Tapset Reference November 2019 function::ipmib_get_proto 3stap function::ipmib_get_proto Get the protocol value Synopsis ipmib_get_proto:long(skb:long) Arguments skb pointer to a struct sk_buff Description Returns the protocol value from skb. LINUX SystemTap Tapset Reference November 2019 function::ipmib_local_addr 3stap function::ipmib_local_addr Get the local ip address Synopsis ipmib_local_addr:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the local ip address skb. LINUX SystemTap Tapset Reference November 2019 function::ipmib_remote_addr 3stap function::ipmib_remote_addr Get the remote ip address Synopsis ipmib_remote_addr:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the remote ip address from skb. LINUX SystemTap Tapset Reference November 2019 function::ipmib_tcp_local_port 3stap function::ipmib_tcp_local_port Get the local tcp port Synopsis ipmib_tcp_local_port:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the local tcp port from skb. LINUX SystemTap Tapset Reference November 2019 function::ipmib_tcp_remote_port 3stap function::ipmib_tcp_remote_port Get the remote tcp port Synopsis ipmib_tcp_remote_port:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the remote tcp port from skb. LINUX SystemTap Tapset Reference November 2019 function::linuxmib_filter_key 3stap function::linuxmib_filter_key Default filter function for linuxmib.* probes Synopsis linuxmib_filter_key:long(sk:long,op:long) Arguments sk pointer to the struct sock op value to be counted if sk passes the filter Description This function is a default filter function. The user can replace this function with their own. The user-supplied filter function returns an index key based on the values in sk. A return value of 0 means this particular sk should be not be counted. LINUX SystemTap Tapset Reference November 2019 function::tcpmib_filter_key 3stap function::tcpmib_filter_key Default filter function for tcpmib.* probes Synopsis tcpmib_filter_key:long(sk:long,op:long) Arguments sk pointer to the struct sock being acted on op value to be counted if sk passes the filter Description This function is a default filter function. The user can replace this function with their own. The user-supplied filter function returns an index key based on the values in sk. A return value of 0 means this particular sk should be not be counted. LINUX SystemTap Tapset Reference November 2019 function::tcpmib_get_state 3stap function::tcpmib_get_state Get a socket's state Synopsis tcpmib_get_state:long(sk:long) Arguments sk pointer to a struct sock Description Returns the sk_state from a struct sock. LINUX SystemTap Tapset Reference November 2019 function::tcpmib_local_addr 3stap function::tcpmib_local_addr Get the source address Synopsis tcpmib_local_addr:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the saddr from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2019 function::tcpmib_local_port 3stap function::tcpmib_local_port Get the local port Synopsis tcpmib_local_port:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the sport from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2019 function::tcpmib_remote_addr 3stap function::tcpmib_remote_addr Get the remote address Synopsis tcpmib_remote_addr:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the daddr from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2019 function::tcpmib_remote_port 3stap function::tcpmib_remote_port Get the remote port Synopsis tcpmib_remote_port:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the dport from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2019 probe::ipmib.ForwDatagrams 3stap probe::ipmib.ForwDatagrams Count forwarded packet Synopsis ipmib.ForwDatagrams Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global ForwDatagrams (equivalent to SNMP's MIB IPSTATS_MIB_OUTFORWDATAGRAMS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.FragFails 3stap probe::ipmib.FragFails Count datagram fragmented unsuccessfully Synopsis ipmib.FragFails Values op Value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global FragFails (equivalent to SNMP's MIB IPSTATS_MIB_FRAGFAILS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.FragOKs 3stap probe::ipmib.FragOKs Count datagram fragmented successfully Synopsis ipmib.FragOKs Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global FragOKs (equivalent to SNMP's MIB IPSTATS_MIB_FRAGOKS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.InAddrErrors 3stap probe::ipmib.InAddrErrors Count arriving packets with an incorrect address Synopsis ipmib.InAddrErrors Values skb pointer to the struct sk_buff being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InAddrErrors (equivalent to SNMP's MIB IPSTATS_MIB_INADDRERRORS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.InDiscards 3stap probe::ipmib.InDiscards Count discarded inbound packets Synopsis ipmib.InDiscards Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InDiscards (equivalent to SNMP's MIB STATS_MIB_INDISCARDS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.InNoRoutes 3stap probe::ipmib.InNoRoutes Count an arriving packet with no matching socket Synopsis ipmib.InNoRoutes Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InNoRoutes (equivalent to SNMP's MIB IPSTATS_MIB_INNOROUTES) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.InReceives 3stap probe::ipmib.InReceives Count an arriving packet Synopsis ipmib.InReceives Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InReceives (equivalent to SNMP's MIB IPSTATS_MIB_INRECEIVES) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.InUnknownProtos 3stap probe::ipmib.InUnknownProtos Count arriving packets with an unbound proto Synopsis ipmib.InUnknownProtos Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InUnknownProtos (equivalent to SNMP's MIB IPSTATS_MIB_INUNKNOWNPROTOS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.OutRequests 3stap probe::ipmib.OutRequests Count a request to send a packet Synopsis ipmib.OutRequests Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global OutRequests (equivalent to SNMP's MIB IPSTATS_MIB_OUTREQUESTS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.ReasmReqds 3stap probe::ipmib.ReasmReqds Count number of packet fragments reassembly requests Synopsis ipmib.ReasmReqds Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global ReasmReqds (equivalent to SNMP's MIB IPSTATS_MIB_REASMREQDS) LINUX SystemTap Tapset Reference November 2019 probe::ipmib.ReasmTimeout 3stap probe::ipmib.ReasmTimeout Count Reassembly Timeouts Synopsis ipmib.ReasmTimeout Values skb pointer to the struct sk_buff being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global ReasmTimeout (equivalent to SNMP's MIB IPSTATS_MIB_REASMTIMEOUT) LINUX SystemTap Tapset Reference November 2019 probe::linuxmib.DelayedACKs 3stap probe::linuxmib.DelayedACKs Count of delayed acks Synopsis linuxmib.DelayedACKs Values sk Pointer to the struct sock being acted on op Value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global DelayedACKs (equivalent to SNMP's MIB LINUX_MIB_DELAYEDACKS) LINUX SystemTap Tapset Reference November 2019 probe::linuxmib.ListenDrops 3stap probe::linuxmib.ListenDrops Count of times conn request that were dropped Synopsis linuxmib.ListenDrops Values sk Pointer to the struct sock being acted on op Value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global ListenDrops (equivalent to SNMP's MIB LINUX_MIB_LISTENDROPS) LINUX SystemTap Tapset Reference November 2019 probe::linuxmib.ListenOverflows 3stap probe::linuxmib.ListenOverflows Count of times a listen queue overflowed Synopsis linuxmib.ListenOverflows Values op Value to be added to the counter (default value of 1) sk Pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global ListenOverflows (equivalent to SNMP's MIB LINUX_MIB_LISTENOVERFLOWS) LINUX SystemTap Tapset Reference November 2019 probe::linuxmib.TCPMemoryPressures 3stap probe::linuxmib.TCPMemoryPressures Count of times memory pressure was used Synopsis linuxmib.TCPMemoryPressures Values sk Pointer to the struct sock being acted on op Value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global TCPMemoryPressures (equivalent to SNMP's MIB LINUX_MIB_TCPMEMORYPRESSURES) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.ActiveOpens 3stap probe::tcpmib.ActiveOpens Count an active opening of a socket Synopsis tcpmib.ActiveOpens Values op value to be added to the counter (default value of 1) sk pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global ActiveOpens (equivalent to SNMP's MIB TCP_MIB_ACTIVEOPENS) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.AttemptFails 3stap probe::tcpmib.AttemptFails Count a failed attempt to open a socket Synopsis tcpmib.AttemptFails Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global AttemptFails (equivalent to SNMP's MIB TCP_MIB_ATTEMPTFAILS) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.CurrEstab 3stap probe::tcpmib.CurrEstab Update the count of open sockets Synopsis tcpmib.CurrEstab Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global CurrEstab (equivalent to SNMP's MIB TCP_MIB_CURRESTAB) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.EstabResets 3stap probe::tcpmib.EstabResets Count the reset of a socket Synopsis tcpmib.EstabResets Values op value to be added to the counter (default value of 1) sk pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global EstabResets (equivalent to SNMP's MIB TCP_MIB_ESTABRESETS) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.InSegs 3stap probe::tcpmib.InSegs Count an incoming tcp segment Synopsis tcpmib.InSegs Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key (or ipmib_filter_key for tcp v4). If the packet passes the filter is is counted in the global InSegs (equivalent to SNMP's MIB TCP_MIB_INSEGS) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.OutRsts 3stap probe::tcpmib.OutRsts Count the sending of a reset packet Synopsis tcpmib.OutRsts Values op value to be added to the counter (default value of 1) sk pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global OutRsts (equivalent to SNMP's MIB TCP_MIB_OUTRSTS) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.OutSegs 3stap probe::tcpmib.OutSegs Count the sending of a TCP segment Synopsis tcpmib.OutSegs Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global OutSegs (equivalent to SNMP's MIB TCP_MIB_OUTSEGS) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.PassiveOpens 3stap probe::tcpmib.PassiveOpens Count the passive creation of a socket Synopsis tcpmib.PassiveOpens Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global PassiveOpens (equivalent to SNMP's MIB TCP_MIB_PASSIVEOPENS) LINUX SystemTap Tapset Reference November 2019 probe::tcpmib.RetransSegs 3stap probe::tcpmib.RetransSegs Count the retransmission of a TCP segment Synopsis tcpmib.RetransSegs Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global RetransSegs (equivalent to SNMP's MIB TCP_MIB_RETRANSSEGS) Kernel Process Tapset This family of probe points is used to probe process-related activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 function::get_loadavg_index 3stap function::get_loadavg_index Get the load average for a specified interval Synopsis get_loadavg_index:long(indx:long) Arguments indx The load average interval to capture. Description This function returns the load average at a specified interval. The three load average values 1, 5 and 15 minute average corresponds to indexes 0, 1 and 2 of the avenrun array - see linux/sched.h. Please note that the truncated-integer portion of the load average is returned. If the specified index is out-of-bounds, then an error message and exception is thrown. LINUX SystemTap Tapset Reference November 2019 function::sprint_loadavg 3stap function::sprint_loadavg Report a pretty-printed load average Synopsis sprint_loadavg:string() Arguments None Description Returns the a string with three decimal numbers in the usual format for 1-, 5- and 15-minute load averages. LINUX SystemTap Tapset Reference November 2019 function::target_set_pid 3stap function::target_set_pid Does pid descend from target process? Synopsis target_set_pid(pid:) Arguments pid The pid of the process to query Description This function returns whether the given process-id is within the target set, that is whether it is a descendant of the top-level target process. LINUX SystemTap Tapset Reference November 2019 function::target_set_report 3stap function::target_set_report Print a report about the target set Synopsis target_set_report() Arguments None Description This function prints a report about the processes in the target set, and their ancestry. LINUX SystemTap Tapset Reference November 2019 probe::kprocess.create 3stap probe::kprocess.create Fires whenever a new process or thread is successfully created Synopsis kprocess.create Values new_pid The PID of the newly created process new_tid The TID of the newly created task Context Parent of the created process. Description Fires whenever a new process is successfully created, either as a result of fork (or one of its syscall variants), or a new kernel thread. LINUX SystemTap Tapset Reference November 2019 probe::kprocess.exec 3stap probe::kprocess.exec Attempt to exec to a new program Synopsis kprocess.exec Values args The arguments to pass to the new executable, including the 0th arg (SystemTap v2.5+) name Name of the system call (execve) (SystemTap v2.5+) filename The path to the new executable argstr A string containing the filename followed by the arguments to pass, excluding 0th arg (SystemTap v2.5+) Context The caller of exec. Description Fires whenever a process attempts to exec to a new program. Aliased to the syscall.execve probe in SystemTap v2.5+. LINUX SystemTap Tapset Reference November 2019 probe::kprocess.exec_complete 3stap probe::kprocess.exec_complete Return from exec to a new program Synopsis kprocess.exec_complete Values success A boolean indicating whether the exec was successful errno The error number resulting from the exec retstr A string representation of errno (SystemTap v2.5+) name Name of the system call (execve) (SystemTap v2.5+) Context On success, the context of the new executable. On failure, remains in the context of the caller. Description Fires at the completion of an exec call. Aliased to the syscall.execve.return probe in SystemTap v2.5+. LINUX SystemTap Tapset Reference November 2019 probe::kprocess.exit 3stap probe::kprocess.exit Exit from process Synopsis kprocess.exit Values code The exit code of the process Context The process which is terminating. Description Fires when a process terminates. This will always be followed by a kprocess.release, though the latter may be delayed if the process waits in a zombie state. LINUX SystemTap Tapset Reference November 2019 probe::kprocess.release 3stap probe::kprocess.release Process released Synopsis kprocess.release Values released_tid TID of the task being released released_pid PID of the process being released pid Same as released_pid for compatibility (deprecated) task A task handle to the process being released Context The context of the parent, if it wanted notification of this process' termination, else the context of the process itself. Description Fires when a process is released from the kernel. This always follows a kprocess.exit, though it may be delayed somewhat if the process waits in a zombie state. LINUX SystemTap Tapset Reference November 2019 probe::kprocess.start 3stap probe::kprocess.start Starting new process Synopsis kprocess.start Values None Context Newly created process. Description Fires immediately before a new process begins execution. Signal Tapset This family of probe points is used to probe signal activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 function::get_sa_flags 3stap function::get_sa_flags Returns the numeric value of sa_flags Synopsis get_sa_flags:long(act:long) Arguments act address of the sigaction to query. LINUX SystemTap Tapset Reference November 2019 function::get_sa_handler 3stap function::get_sa_handler Returns the numeric value of sa_handler Synopsis get_sa_handler:long(act:long) Arguments act address of the sigaction to query. LINUX SystemTap Tapset Reference November 2019 function::is_sig_blocked 3stap function::is_sig_blocked Returns 1 if the signal is currently blocked, or 0 if it is not Synopsis is_sig_blocked:long(task:long,sig:long) Arguments task address of the task_struct to query. sig the signal number to test. LINUX SystemTap Tapset Reference November 2019 function::sa_flags_str 3stap function::sa_flags_str Returns the string representation of sa_flags Synopsis sa_flags_str:string(sa_flags:long) Arguments sa_flags the set of flags to convert to string. LINUX SystemTap Tapset Reference November 2019 function::sa_handler_str 3stap function::sa_handler_str Returns the string representation of an sa_handler Synopsis sa_handler_str(handler:) Arguments handler the sa_handler to convert to string. Description Returns the string representation of an sa_handler. If it is not SIG_DFL, SIG_IGN or SIG_ERR, it will return the address of the handler. LINUX SystemTap Tapset Reference November 2019 function::signal_str 3stap function::signal_str Returns the string representation of a signal number Synopsis signal_str(num:) Arguments num the signal number to convert to string. LINUX SystemTap Tapset Reference November 2019 function::sigset_mask_str 3stap function::sigset_mask_str Returns the string representation of a sigset Synopsis sigset_mask_str:string(mask:long) Arguments mask the sigset to convert to string. LINUX SystemTap Tapset Reference November 2019 probe::signal.check_ignored 3stap probe::signal.check_ignored Checking to see signal is ignored Synopsis signal.check_ignored Values pid_name Name of the process receiving the signal sig_pid The PID of the process receiving the signal sig_name A string representation of the signal sig The number of the signal LINUX SystemTap Tapset Reference November 2019 probe::signal.check_ignored.return 3stap probe::signal.check_ignored.return Check to see signal is ignored completed Synopsis signal.check_ignored.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2019 probe::signal.checkperm 3stap probe::signal.checkperm Check being performed on a sent signal Synopsis signal.checkperm Values si_code Indicates the signal type sig_name A string representation of the signal sig The number of the signal sinfo The address of the siginfo structure sig_pid The PID of the process receiving the signal task A task handle to the signal recipient pid_name Name of the process receiving the signal name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.checkperm.return 3stap probe::signal.checkperm.return Check performed on a sent signal completed Synopsis signal.checkperm.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2019 probe::signal.do_action 3stap probe::signal.do_action Examining or changing a signal action Synopsis signal.do_action Values oldsigact_addr The address of the old sigaction struct associated with the signal sig The signal to be examined/changed sig_name A string representation of the signal sa_handler The new handler of the signal sa_mask The new mask of the signal sigact_addr The address of the new sigaction struct associated with the signal name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.do_action.return 3stap probe::signal.do_action.return Examining or changing a signal action completed Synopsis signal.do_action.return Values retstr Return value as a string name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.flush 3stap probe::signal.flush Flushing all pending signals for a task Synopsis signal.flush Values task The task handler of the process performing the flush sig_pid The PID of the process associated with the task performing the flush pid_name The name of the process associated with the task performing the flush name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.force_segv 3stap probe::signal.force_segv Forcing send of SIGSEGV Synopsis signal.force_segv Values sig_pid The PID of the process receiving the signal pid_name Name of the process receiving the signal name Name of the probe point sig_name A string representation of the signal sig The number of the signal LINUX SystemTap Tapset Reference November 2019 probe::signal.force_segv.return 3stap probe::signal.force_segv.return Forcing send of SIGSEGV complete Synopsis signal.force_segv.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2019 probe::signal.handle 3stap probe::signal.handle Signal handler being invoked Synopsis signal.handle Values regs The address of the kernel-mode stack area (deprecated in SystemTap 2.1) ka_addr The address of the k_sigaction table associated with the signal sig_mode Indicates whether the signal was a user-mode or kernel-mode signal oldset_addr The address of the bitmask array of blocked signals (deprecated in SystemTap 2.1) sig_name A string representation of the signal sig The signal number that invoked the signal handler sinfo The address of the siginfo table sig_code The si_code value of the siginfo signal name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.handle.return 3stap probe::signal.handle.return Signal handler invocation completed Synopsis signal.handle.return Values retstr Return value as a string name Name of the probe point Description (deprecated in SystemTap 2.1) LINUX SystemTap Tapset Reference November 2019 probe::signal.pending 3stap probe::signal.pending Examining pending signal Synopsis signal.pending Values name Name of the probe point sigset_add The address of the user-space signal set (sigset_t) sigset_size The size of the user-space signal set Description This probe is used to examine a set of signals pending for delivery to a specific thread. This normally occurs when the do_sigpending kernel function is executed. LINUX SystemTap Tapset Reference November 2019 probe::signal.pending.return 3stap probe::signal.pending.return Examination of pending signal completed Synopsis signal.pending.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2019 probe::signal.procmask 3stap probe::signal.procmask Examining or changing blocked signals Synopsis signal.procmask Values oldsigset_addr The old address of the signal set (sigset_t) how Indicates how to change the blocked signals; possible values are SIG_BLOCK=0 (for blocking signals), SIG_UNBLOCK=1 (for unblocking signals), and SIG_SETMASK=2 for setting the signal mask. sigset The actual value to be set for sigset_t (correct?) sigset_addr The address of the signal set (sigset_t) to be implemented name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.procmask.return 3stap probe::signal.procmask.return Examining or changing blocked signals completed Synopsis signal.procmask.return Values retstr Return value as a string name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.send 3stap probe::signal.send Signal being sent to a process Synopsis signal.send Values sig The number of the signal sig_name A string representation of the signal si_code Indicates the signal type send2queue Indicates whether the signal is sent to an existing sigqueue (deprecated in SystemTap 2.1) name The name of the function used to send out the signal pid_name The name of the signal recipient shared Indicates whether the signal is shared by the thread group sinfo The address of siginfo struct sig_pid The PID of the process receiving the signal task A task handle to the signal recipient Context The signal's sender. LINUX SystemTap Tapset Reference November 2019 probe::signal.send.return 3stap probe::signal.send.return Signal being sent to a process completed (deprecated in SystemTap 2.1) Synopsis signal.send.return Values shared Indicates whether the sent signal is shared by the thread group. name The name of the function used to send out the signal retstr The return value to either __group_send_sig_info, specific_send_sig_info, or send_sigqueue send2queue Indicates whether the sent signal was sent to an existing sigqueue Context The signal's sender. (correct?) Description Possible __group_send_sig_info and specific_send_sig_info return values are as follows; 0 -- The signal is successfully sent to a process, which means that, (1) the signal was ignored by the receiving process, (2) this is a non-RT signal and the system already has one queued, and (3) the signal was successfully added to the sigqueue of the receiving process. -EAGAIN -- The sigqueue of the receiving process is overflowing, the signal was RT, and the signal was sent by a user using something other than kill. Possible send_group_sigqueue and send_sigqueue return values are as follows; 0 -- The signal was either successfully added into the sigqueue of the receiving process, or a SI_TIMER entry is already queued (in which case, the overrun count will be simply incremented). 1 -- The signal was ignored by the receiving process. -1 -- (send_sigqueue only) The task was marked exiting, allowing * posix_timer_event to redirect it to the group leader. LINUX SystemTap Tapset Reference November 2019 probe::signal.send_sig_queue 3stap probe::signal.send_sig_queue Queuing a signal to a process Synopsis signal.send_sig_queue Values sigqueue_addr The address of the signal queue sig_pid The PID of the process to which the signal is queued name Name of the probe point pid_name Name of the process to which the signal is queued sig_name A string representation of the signal sig The queued signal LINUX SystemTap Tapset Reference November 2019 probe::signal.send_sig_queue.return 3stap probe::signal.send_sig_queue.return Queuing a signal to a process completed Synopsis signal.send_sig_queue.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2019 probe::signal.sys_tgkill 3stap probe::signal.sys_tgkill Sending kill signal to a thread group Synopsis signal.sys_tgkill Values sig_name A string representation of the signal sig The specific kill signal sent to the process tgid The thread group ID of the thread receiving the kill signal name Name of the probe point pid_name The name of the signal recipient task A task handle to the signal recipient sig_pid The PID of the thread receiving the kill signal Description The tgkill call is similar to tkill, except that it also allows the caller to specify the thread group ID of the thread to be signalled. This protects against TID reuse. LINUX SystemTap Tapset Reference November 2019 probe::signal.sys_tgkill.return 3stap probe::signal.sys_tgkill.return Sending kill signal to a thread group completed Synopsis signal.sys_tgkill.return Values name Name of the probe point retstr The return value to either __group_send_sig_info, LINUX SystemTap Tapset Reference November 2019 probe::signal.sys_tkill 3stap probe::signal.sys_tkill Sending a kill signal to a thread Synopsis signal.sys_tkill Values sig_name A string representation of the signal sig The specific signal sent to the process name Name of the probe point pid_name The name of the signal recipient task A task handle to the signal recipient sig_pid The PID of the process receiving the kill signal Description The tkill call is analogous to kill(2), except that it also allows a process within a specific thread group to be targeted. Such processes are targeted through their unique thread IDs (TID). LINUX SystemTap Tapset Reference November 2019 probe::signal.syskill 3stap probe::signal.syskill Sending kill signal to a process Synopsis signal.syskill Values task A task handle to the signal recipient sig_pid The PID of the process receiving the signal name Name of the probe point pid_name The name of the signal recipient sig The specific signal sent to the process sig_name A string representation of the signal LINUX SystemTap Tapset Reference November 2019 probe::signal.syskill.return 3stap probe::signal.syskill.return Sending kill signal completed Synopsis signal.syskill.return Values None LINUX SystemTap Tapset Reference November 2019 probe::signal.systkill.return 3stap probe::signal.systkill.return Sending kill signal to a thread completed Synopsis signal.systkill.return Values retstr The return value to either __group_send_sig_info, name Name of the probe point LINUX SystemTap Tapset Reference November 2019 probe::signal.wakeup 3stap probe::signal.wakeup Sleeping process being wakened for signal Synopsis signal.wakeup Values pid_name Name of the process to wake sig_pid The PID of the process to wake state_mask A string representation indicating the mask of task states to wake. Possible values are TASK_INTERRUPTIBLE, TASK_STOPPED, TASK_TRACED, TASK_WAKEKILL, and TASK_INTERRUPTIBLE. resume Indicates whether to wake up a task in a STOPPED or TRACED state Errno Tapset This set of functions is used to handle errno number values. It contains the following functions: LINUX SystemTap Tapset Reference November 2019 function::errno_str 3stap function::errno_str Symbolic string associated with error code Synopsis errno_str:string(err:long) Arguments err The error number received Description This function returns the symbolic string associated with the giver error code, such as ENOENT for the number 2, or E#3333 for an out-of-range value such as 3333. LINUX SystemTap Tapset Reference November 2019 function::return_str 3stap function::return_str Formats the return value as a string Synopsis return_str:string(format:long,ret:long) Arguments format Variable to determine return type base value ret Return value (typically $return) Description This function is used by the syscall tapset, and returns a string. Set format equal to 1 for a decimal, 2 for hex, 3 for octal. Note that this function is preferred over returnstr. LINUX SystemTap Tapset Reference November 2019 function::returnstr 3stap function::returnstr Formats the return value as a string Synopsis returnstr:string(format:long) Arguments format Variable to determine return type base value Description This function is used by the nd_syscall tapset, and returns a string. Set format equal to 1 for a decimal, 2 for hex, 3 for octal. Note that this function should only be used in dwarfless probes (i.e. 'kprobe.function(foo)'). Other probes should use return_str. LINUX SystemTap Tapset Reference November 2019 function::returnval 3stap function::returnval Possible return value of probed function Synopsis returnval:long() Arguments None Description Return the value of the register in which function values are typically returned. Can be used in probes where $return isn't available. This is only a guess of the actual return value and can be totally wrong. Normally only used in dwarfless probes. RLIMIT Tapset This set of functions is used to handle string which defines resource limits (RLIMIT_*) and returns corresponding number of resource limit. It contains the following functions: LINUX SystemTap Tapset Reference November 2019 function::rlimit_from_str 3stap function::rlimit_from_str Symbolic string associated with resource limit code Synopsis rlimit_from_str:long(lim_str:string) Arguments lim_str The string representation of limit Description This function returns the number associated with the given string, such as 0 for the string RLIMIT_CPU, or -1 for an out-of-range value. Device Tapset This set of functions is used to handle kernel and userspace device numbers. It contains the following functions: LINUX SystemTap Tapset Reference November 2019 function::MAJOR 3stap function::MAJOR Extract major device number from a kernel device number (kdev_t) Synopsis MAJOR:long(dev:long) Arguments dev Kernel device number to query. LINUX SystemTap Tapset Reference November 2019 function::MINOR 3stap function::MINOR Extract minor device number from a kernel device number (kdev_t) Synopsis MINOR:long(dev:long) Arguments dev Kernel device number to query. LINUX SystemTap Tapset Reference November 2019 function::MKDEV 3stap function::MKDEV Creates a value that can be compared to a kernel device number (kdev_t) Synopsis MKDEV:long(major:long,minor:long) Arguments major Intended major device number. minor Intended minor device number. LINUX SystemTap Tapset Reference November 2019 function::usrdev2kerndev 3stap function::usrdev2kerndev Converts a user-space device number into the format used in the kernel Synopsis usrdev2kerndev:long(dev:long) Arguments dev Device number in user-space format. Directory-entry (dentry) Tapset This family of functions is used to map kernel VFS directory entry pointers to file or full path names. LINUX SystemTap Tapset Reference November 2019 function::d_name 3stap function::d_name get the dirent name Synopsis d_name:string(dentry:long) Arguments dentry Pointer to dentry. Description Returns the dirent name (path basename). LINUX SystemTap Tapset Reference November 2019 function::d_path 3stap function::d_path get the full nameidata path Synopsis d_path:string(nd:long) Arguments nd Pointer to nameidata. Description Returns the full dirent name (full path to the root), like the kernel d_path function. LINUX SystemTap Tapset Reference November 2019 function::fullpath_struct_file 3stap function::fullpath_struct_file get the full path Synopsis fullpath_struct_file:string(task:long,file:long) Arguments task task_struct pointer. file Pointer to struct file. Description Returns the full dirent name (full path to the root), like the kernel d_path function. LINUX SystemTap Tapset Reference November 2019 function::fullpath_struct_nameidata 3stap function::fullpath_struct_nameidata get the full nameidata path Synopsis fullpath_struct_nameidata(nd:) Arguments nd Pointer to struct nameidata. Description Returns the full dirent name (full path to the root), like the kernel (and systemtap-tapset) d_path function, with a /. LINUX SystemTap Tapset Reference November 2019 function::fullpath_struct_path 3stap function::fullpath_struct_path get the full path Synopsis fullpath_struct_path:string(path:long) Arguments path Pointer to struct path. Description Returns the full dirent name (full path to the root), like the kernel d_path function. LINUX SystemTap Tapset Reference November 2019 function::inode_name 3stap function::inode_name get the inode name Synopsis inode_name:string(inode:long) Arguments inode Pointer to inode. Description Returns the first path basename associated with the given inode. LINUX SystemTap Tapset Reference November 2019 function::inode_path 3stap function::inode_path get the path to an inode Synopsis inode_path:string(inode:long) Arguments inode Pointer to inode. Description Returns the full path associated with the given inode. LINUX SystemTap Tapset Reference November 2019 function::real_mount 3stap function::real_mount get the 'struct mount' pointer Synopsis real_mount:long(vfsmnt:long) Arguments vfsmnt Pointer to 'struct vfsmount' Description Returns the 'struct mount' pointer value for a 'struct vfsmount' pointer. LINUX SystemTap Tapset Reference November 2019 function::reverse_path_walk 3stap function::reverse_path_walk get the full dirent path Synopsis reverse_path_walk:string(dentry:long) Arguments dentry Pointer to dentry. Description Returns the path name (partial path to mount point). LINUX SystemTap Tapset Reference November 2019 function::task_dentry_path 3stap function::task_dentry_path get the full dentry path Synopsis task_dentry_path:string(task:long,dentry:long,vfsmnt:long) Arguments task task_struct pointer. dentry direntry pointer. vfsmnt vfsmnt pointer. Description Returns the full dirent name (full path to the root), like the kernel d_path function. Logging Tapset This family of functions is used to send simple message strings to various destinations. LINUX SystemTap Tapset Reference November 2019 function::abort 3stap function::abort Immediately shutting down probing script. Synopsis abort() Arguments None Description This is similar to exit but immediately aborts the current probe handler instead of waiting for its completion. Probe handlers already running on *other* CPU cores, however, will still continue to their completion. Unlike error, this function call cannot be caught by 'try ... catch'. LINUX SystemTap Tapset Reference November 2019 function::assert 3stap function::assert evaluate assertion Synopsis 1) assert(expression:long) 2) assert(expression:long,msg:string) Arguments expression The expression to evaluate msg The formatted message string Description 1) This function checks the expression and aborts the current running probe if expression evaluates to zero. Useserror and may be caught by try{} catch{}. A default message will be displayed. 2) This function checks the expression and aborts the current running probe if expression evaluates to zero. Useserror and may be caught by try{} catch{}. The specified message will be displayed. LINUX SystemTap Tapset Reference November 2019 function::error 3stap function::error Send an error message Synopsis error(msg:string) Arguments msg The formatted message string Description An implicit end-of-line is added. staprun prepends the string ERROR:. Sending an error message aborts the currently running probe. Depending on the MAXERRORS parameter, it may trigger an exit. LINUX SystemTap Tapset Reference November 2019 function::exit 3stap function::exit Start shutting down probing script. Synopsis exit() Arguments None Description This only enqueues a request to start shutting down the script. New probes will not fire (except end probes), but all currently running ones may complete their work. LINUX SystemTap Tapset Reference November 2019 function::ftrace 3stap function::ftrace Send a message to the ftrace ring-buffer Synopsis ftrace(msg:string) Arguments msg The formatted message string Description If the ftrace ring-buffer is configured & available, see /debugfs/tracing/trace for the message. Otherwise, the message may be quietly dropped. An implicit end-of-line is added. LINUX SystemTap Tapset Reference November 2019 function::log 3stap function::log Send a line to the common trace buffer Synopsis log(msg:string) Arguments msg The formatted message string Description This function logs data. log sends the message immediately to staprun and to the bulk transport (relayfs) if it is being used. If the last character given is not a newline, then one is added. This function is not as efficient as printf and should be used only for urgent messages. LINUX SystemTap Tapset Reference November 2019 function::printk 3stap function::printk Send a message to the kernel trace buffer Synopsis printk(level:long,msg:string) Arguments level an integer for the severity level (0=KERN_EMERG ... 7=KERN_DEBUG) msg The formatted message string Description Print a line of text to the kernel dmesg/console with the given severity. An implicit end-of-line is added. This function may not be safely called from all kernel probe contexts, so is restricted to guru mode only. LINUX SystemTap Tapset Reference November 2019 function::warn 3stap function::warn Send a line to the warning stream Synopsis warn(msg:string) Arguments msg The formatted message string Description This function sends a warning message immediately to staprun. It is also sent over the bulk transport (relayfs) if it is being used. If the last characater is not a newline, the one is added. Queue Statistics Tapset This family of functions is used to track performance of queuing systems. LINUX SystemTap Tapset Reference November 2019 function::qs_done 3stap function::qs_done Function to record finishing request Synopsis qs_done(qname:string) Arguments qname the name of the service that finished Description This function records that a request originally from the given queue has completed being serviced. LINUX SystemTap Tapset Reference November 2019 function::qs_run 3stap function::qs_run Function to record being moved from wait queue to being serviced Synopsis qs_run(qname:string) Arguments qname the name of the service being moved and started Description This function records that the previous enqueued request was removed from the given wait queue and is now being serviced. LINUX SystemTap Tapset Reference November 2019 function::qs_wait 3stap function::qs_wait Function to record enqueue requests Synopsis qs_wait(qname:string) Arguments qname the name of the queue requesting enqueue Description This function records that a new request was enqueued for the given queue name. LINUX SystemTap Tapset Reference November 2019 function::qsq_blocked 3stap function::qsq_blocked Returns the time reqest was on the wait queue Synopsis qsq_blocked:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the fraction of elapsed time during which one or more requests were on the wait queue. LINUX SystemTap Tapset Reference November 2019 function::qsq_print 3stap function::qsq_print Prints a line of statistics for the given queue Synopsis qsq_print(qname:string) Arguments qname queue name Description This function prints a line containing the following statistics for the given queue the queue name, the average rate of requests per second, the average wait queue length, the average time on the wait queue, the average time to service a request, the percentage of time the wait queue was used, and the percentage of time request was being serviced. LINUX SystemTap Tapset Reference November 2019 function::qsq_service_time 3stap function::qsq_service_time Amount of time per request service Synopsis qsq_service_time:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average time in microseconds required to service a request once it is removed from the wait queue. LINUX SystemTap Tapset Reference November 2019 function::qsq_start 3stap function::qsq_start Function to reset the stats for a queue Synopsis qsq_start(qname:string) Arguments qname the name of the service that finished Description This function resets the statistics counters for the given queue, and restarts tracking from the moment the function was called. This function is also used to create intialize a queue. LINUX SystemTap Tapset Reference November 2019 function::qsq_throughput 3stap function::qsq_throughput Number of requests served per unit time Synopsis qsq_throughput:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average number or requests served per microsecond. LINUX SystemTap Tapset Reference November 2019 function::qsq_utilization 3stap function::qsq_utilization Fraction of time that any request was being serviced Synopsis qsq_utilization:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average time in microseconds that at least one request was being serviced. LINUX SystemTap Tapset Reference November 2019 function::qsq_wait_queue_length 3stap function::qsq_wait_queue_length length of wait queue Synopsis qsq_wait_queue_length:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average length of the wait queue LINUX SystemTap Tapset Reference November 2019 function::qsq_wait_time 3stap function::qsq_wait_time Amount of time in queue + service per request Synopsis qsq_wait_time:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average time in microseconds that it took for a request to be serviced (qs_wait to qa_done). Random functions Tapset These functions deal with random number generation. LINUX SystemTap Tapset Reference November 2019 function::randint 3stap function::randint Return a random number between [0,n) Synopsis randint:long(n:long) Arguments n Number past upper limit of range, not larger than 2**20. String and data retrieving functions Tapset Functions to retrieve strings and other primitive types from the kernel or a user space programs based on addresses. All strings are of a maximum length given by MAXSTRINGLEN. LINUX SystemTap Tapset Reference November 2019 function::atomic_long_read 3stap function::atomic_long_read Retrieves an atomic long variable from kernel memory Synopsis atomic_long_read:long(addr:long) Arguments addr pointer to atomic long variable Description Safely perform the read of an atomic long variable. This will be a NOP on kernels that do not have ATOMIC_LONG_INIT set on the kernel config. LINUX SystemTap Tapset Reference November 2019 function::atomic_read 3stap function::atomic_read Retrieves an atomic variable from kernel memory Synopsis atomic_read:long(addr:long) Arguments addr pointer to atomic variable Description Safely perform the read of an atomic variable. LINUX SystemTap Tapset Reference November 2019 function::kernel_buffer_quoted 3stap function::kernel_buffer_quoted Retrieves and quotes buffer from kernel space Synopsis 1) kernel_buffer_quoted:string(addr:long,inlen:long) 2) kernel_buffer_quoted:string(addr:long,inlen:long,outlen:long) Arguments addr the kernel space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description 1) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to MAXSTRINGLEN characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes. 2) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2019 function::kernel_buffer_quoted_error 3stap function::kernel_buffer_quoted_error Retrieves and quotes buffer from kernel space Synopsis kernel_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) Arguments addr the kernel space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when kernel space data is not accessible at the given address, an error is thrown. LINUX SystemTap Tapset Reference November 2019 function::kernel_char 3stap function::kernel_char Retrieves a char value stored in kernel memory Synopsis kernel_char:long(addr:long) Arguments addr The kernel address to retrieve the char from Description Returns the char value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2019 function::kernel_int 3stap function::kernel_int Retrieves an int value stored in kernel memory Synopsis kernel_int:long(addr:long) Arguments addr The kernel address to retrieve the int from Description Returns the int value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2019 function::kernel_long 3stap function::kernel_long Retrieves a long value stored in kernel memory Synopsis kernel_long:long(addr:long) Arguments addr The kernel address to retrieve the long from Description Returns the long value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2019 function::kernel_pointer 3stap function::kernel_pointer Retrieves a pointer value stored in kernel memory Synopsis kernel_pointer:long(addr:long) Arguments addr The kernel address to retrieve the pointer from Description Returns the pointer value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2019 function::kernel_short 3stap function::kernel_short Retrieves a short value stored in kernel memory Synopsis kernel_short:long(addr:long) Arguments addr The kernel address to retrieve the short from Description Returns the short value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2019 function::kernel_string 3stap function::kernel_string Retrieves string from kernel memory Synopsis 1) kernel_string:string(addr:long) 2) kernel_string:string(addr:long,err_msg:string) Arguments addr The kernel address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns the null terminated C string from a given kernel memory address. Reports an error on string copy fault. 2) This function returns the null terminated C string from a given kernel memory address. Reports the given error message on string copy fault. LINUX SystemTap Tapset Reference November 2019 function::kernel_string_n 3stap function::kernel_string_n Retrieves string of given length from kernel memory Synopsis kernel_string_n:string(addr:long,n:long) Arguments addr The kernel address to retrieve the string from n The maximum length of the string (if not null terminated) Description Returns the C string of a maximum given length from a given kernel memory address. Reports an error on string copy fault. LINUX SystemTap Tapset Reference November 2019 function::kernel_string_quoted 3stap function::kernel_string_quoted Retrieves and quotes string from kernel memory Synopsis kernel_string_quoted:string(addr:long) Arguments addr the kernel memory address to retrieve the string from Description Returns the null terminated C string from a given kernel memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. If the kernel memory data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2019 function::kernel_string_quoted_utf16 3stap function::kernel_string_quoted_utf16 Quote given kernel UTF-16 string. Synopsis kernel_string_quoted_utf16:string(addr:long) Arguments addr The kernel address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-16 decoding as per kernel_string_utf16. LINUX SystemTap Tapset Reference November 2019 function::kernel_string_quoted_utf32 3stap function::kernel_string_quoted_utf32 Quote given UTF-32 kernel string. Synopsis kernel_string_quoted_utf32:string(addr:long) Arguments addr The kernel address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-32 decoding as per kernel_string_utf32. LINUX SystemTap Tapset Reference November 2019 function::kernel_string_utf16 3stap function::kernel_string_utf16 Retrieves UTF-16 string from kernel memory Synopsis 1) kernel_string_utf16:string(addr:long) 2) kernel_string_utf16:string(addr:long,err_msg:string) Arguments addr The kernel address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given kernel memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given kernel memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2019 function::kernel_string_utf32 3stap function::kernel_string_utf32 Retrieves UTF-32 string from kernel memory Synopsis 1) kernel_string_utf32:string(addr:long) 2) kernel_string_utf32:string(addr:long,err_msg:string) Arguments addr The kernel address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given kernel memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given kernel memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2019 function::user_buffer_quoted 3stap function::user_buffer_quoted Retrieves and quotes buffer from user space Synopsis user_buffer_quoted:string(addr:long,inlen:long,outlen:long) Arguments addr the user space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when user space data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2019 function::user_buffer_quoted_error 3stap function::user_buffer_quoted_error Retrieves and quotes buffer from user space Synopsis user_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) Arguments addr the user space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when user space data is not accessible at the given address, an error is thrown. LINUX SystemTap Tapset Reference November 2019 function::user_char 3stap function::user_char Retrieves a char value stored in user space Synopsis user_char:long(addr:long) Arguments addr the user space address to retrieve the char from Description Returns the char value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_char_error 3stap function::user_char_error Retrieves a char value stored in user space Synopsis user_char_error:long(addr:long) Arguments addr the user space address to retrieve the char from Description Returns the char value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_char_warn 3stap function::user_char_warn Retrieves a char value stored in user space Synopsis user_char_warn:long(addr:long) Arguments addr the user space address to retrieve the char from Description Returns the char value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). LINUX SystemTap Tapset Reference November 2019 function::user_int 3stap function::user_int Retrieves an int value stored in user space Synopsis user_int:long(addr:long) Arguments addr the user space address to retrieve the int from Description Returns the int value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_int16 3stap function::user_int16 Retrieves a 16-bit integer value stored in user space Synopsis user_int16:long(addr:long) Arguments addr the user space address to retrieve the 16-bit integer from Description Returns the 16-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_int16_error 3stap function::user_int16_error Retrieves a 16-bit integer value stored in user space Synopsis user_int16_error:long(addr:long) Arguments addr the user space address to retrieve the 16-bit integer from Description Returns the 16-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_int32 3stap function::user_int32 Retrieves a 32-bit integer value stored in user space Synopsis user_int32:long(addr:long) Arguments addr the user space address to retrieve the 32-bit integer from Description Returns the 32-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_int32_error 3stap function::user_int32_error Retrieves a 32-bit integer value stored in user space Synopsis user_int32_error:long(addr:long) Arguments addr the user space address to retrieve the 32-bit integer from Description Returns the 32-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_int64 3stap function::user_int64 Retrieves a 64-bit integer value stored in user space Synopsis user_int64:long(addr:long) Arguments addr the user space address to retrieve the 64-bit integer from Description Returns the 64-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_int64_error 3stap function::user_int64_error Retrieves a 64-bit integer value stored in user space Synopsis user_int64_error:long(addr:long) Arguments addr the user space address to retrieve the 64-bit integer from Description Returns the 64-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_int8 3stap function::user_int8 Retrieves a 8-bit integer value stored in user space Synopsis user_int8:long(addr:long) Arguments addr the user space address to retrieve the 8-bit integer from Description Returns the 8-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_int8_error 3stap function::user_int8_error Retrieves a 8-bit integer value stored in user space Synopsis user_int8_error:long(addr:long) Arguments addr the user space address to retrieve the 8-bit integer from Description Returns the 8-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_int_error 3stap function::user_int_error Retrieves an int value stored in user space Synopsis user_int_error:long(addr:long) Arguments addr the user space address to retrieve the int from Description Returns the int value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_int_warn 3stap function::user_int_warn Retrieves an int value stored in user space Synopsis user_int_warn:long(addr:long) Arguments addr the user space address to retrieve the int from Description Returns the int value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). LINUX SystemTap Tapset Reference November 2019 function::user_long 3stap function::user_long Retrieves a long value stored in user space Synopsis user_long:long(addr:long) Arguments addr the user space address to retrieve the long from Description Returns the long value from a given user space address. Returns zero when user space data is not accessible. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2019 function::user_long_error 3stap function::user_long_error Retrieves a long value stored in user space Synopsis user_long_error:long(addr:long) Arguments addr the user space address to retrieve the long from Description Returns the long value from a given user space address. If the user space data is not accessible, an error will occur. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2019 function::user_long_warn 3stap function::user_long_warn Retrieves a long value stored in user space Synopsis user_long_warn:long(addr:long) Arguments addr the user space address to retrieve the long from Description Returns the long value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2019 function::user_short 3stap function::user_short Retrieves a short value stored in user space Synopsis user_short:long(addr:long) Arguments addr the user space address to retrieve the short from Description Returns the short value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_short_error 3stap function::user_short_error Retrieves a short value stored in user space Synopsis user_short_error:long(addr:long) Arguments addr the user space address to retrieve the short from Description Returns the short value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_short_warn 3stap function::user_short_warn Retrieves a short value stored in user space Synopsis user_short_warn:long(addr:long) Arguments addr the user space address to retrieve the short from Description Returns the short value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). LINUX SystemTap Tapset Reference November 2019 function::user_string 3stap function::user_string Retrieves string from user space Synopsis 1) user_string:string(addr:long) 2) user_string:string(addr:long,err_msg:string) Arguments addr the user space address to retrieve the string from err_msg the error message to return when data isn't available Description 1) Returns the null terminated C string from a given user space memory address. Reports an error on the rare cases when userspace data is not accessible. 2) Returns the null terminated C string from a given user space memory address. Reports the given error message on the rare cases when userspace data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_string_n 3stap function::user_string_n Retrieves string of given length from user space Synopsis 1) user_string_n:string(addr:long,n:long) 2) user_string_n:string(addr:long,n:long,err_msg:string) Arguments addr the user space address to retrieve the string from n the maximum length of the string (if not null terminated) err_msg the error message to return when data isn't available Description 1) Returns the C string of a maximum given length from a given user space address. Reports an error on the rare cases when userspace data is not accessible at the given address. 2) Returns the C string of a maximum given length from a given user space address. Returns the given error message string on the rare cases when userspace data is not accessible at the given address. LINUX SystemTap Tapset Reference November 2019 function::user_string_n_quoted 3stap function::user_string_n_quoted Retrieves and quotes string from user space Synopsis 1) user_string_n_quoted:string(addr:long,n:long) 2) user_string_n_quoted:string(addr:long,inlen:long,outlen:long) Arguments addr the user space address to retrieve the string from n the maximum length of the string (if not null terminated) inlen the maximum length of the string to read (if not null terminated) outlen the maximum length of the output string Description 1) Returns up to n characters of a C string from the given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes. 2) Reads up to inlen characters of a C string from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2019 function::user_string_n_warn 3stap function::user_string_n_warn Retrieves string from user space Synopsis 1) user_string_n_warn:string(addr:long,n:long) 2) user_string_n_warn:string(addr:long,n:long,warn_msg:string) Arguments addr the user space address to retrieve the string from n the maximum length of the string (if not null terminated) warn_msg the warning message to return when data isn't available Description 1) Returns up to n characters of a C string from a given user space memory address. Reports<unknown> on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. 2) Returns up to n characters of a C string from a given user space memory address. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. LINUX SystemTap Tapset Reference November 2019 function::user_string_quoted 3stap function::user_string_quoted Retrieves and quotes string from user space Synopsis user_string_quoted:string(addr:long) Arguments addr the user space address to retrieve the string from Description Returns the null terminated C string from a given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2019 function::user_string_quoted_utf16 3stap function::user_string_quoted_utf16 Quote given user UTF-16 string. Synopsis user_string_quoted_utf16:string(addr:long) Arguments addr The user address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-16 decoding as per user_string_utf16. LINUX SystemTap Tapset Reference November 2019 function::user_string_quoted_utf32 3stap function::user_string_quoted_utf32 Quote given user UTF-32 string. Synopsis user_string_quoted_utf32:string(addr:long) Arguments addr The user address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-32 decoding as per user_string_utf32. LINUX SystemTap Tapset Reference November 2019 function::user_string_utf16 3stap function::user_string_utf16 Retrieves UTF-16 string from user memory Synopsis 1) user_string_utf16:string(addr:long) 2) user_string_utf16:string(addr:long,err_msg:string) Arguments addr The user address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given user memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given user memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2019 function::user_string_utf32 3stap function::user_string_utf32 Retrieves UTF-32 string from user memory Synopsis 1) user_string_utf32:string(addr:long) 2) user_string_utf32:string(addr:long,err_msg:string) Arguments addr The user address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given user memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given user memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2019 function::user_string_warn 3stap function::user_string_warn Retrieves string from user space Synopsis 1) user_string_warn:string(addr:long) 2) user_string_warn:string(addr:long,warn_msg:string) Arguments addr the user space address to retrieve the string from warn_msg the warning message to return when data isn't available Description 1) Returns the null terminated C string from a given user space memory address. Reports "" on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. 2) Returns the null terminated C string from a given user space memory address. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. LINUX SystemTap Tapset Reference November 2019 function::user_uint16 3stap function::user_uint16 Retrieves an unsigned 16-bit integer value stored in user space Synopsis user_uint16:long(addr:long) Arguments addr the user space address to retrieve the unsigned 16-bit integer from Description Returns the unsigned 16-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_uint16_error 3stap function::user_uint16_error Retrieves an unsigned 16-bit integer value stored in user space Synopsis user_uint16_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 16-bit integer from Description Returns the unsigned 16-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_uint32 3stap function::user_uint32 Retrieves an unsigned 32-bit integer value stored in user space Synopsis user_uint32:long(addr:long) Arguments addr the user space address to retrieve the unsigned 32-bit integer from Description Returns the unsigned 32-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_uint32_error 3stap function::user_uint32_error Retrieves an unsigned 32-bit integer value stored in user space Synopsis user_uint32_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 32-bit integer from Description Returns the unsigned 32-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_uint64 3stap function::user_uint64 Retrieves an unsigned 64-bit integer value stored in user space Synopsis user_uint64:long(addr:long) Arguments addr the user space address to retrieve the unsigned 64-bit integer from Description Returns the unsigned 64-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_uint64_error 3stap function::user_uint64_error Retrieves an unsigned 64-bit integer value stored in user space Synopsis user_uint64_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 64-bit integer from Description Returns the unsigned 64-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_uint8 3stap function::user_uint8 Retrieves a unsigned 8-bit integer value stored in user space Synopsis user_uint8:long(addr:long) Arguments addr the user space address to retrieve the unsigned 8-bit integer from Description Returns the unsigned 8-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_uint8_error 3stap function::user_uint8_error Retrieves a unsigned 8-bit integer value stored in user space Synopsis user_uint8_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 8-bit integer from Description Returns the unsigned 8-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_ulong 3stap function::user_ulong Retrieves an unsigned long value stored in user space Synopsis user_ulong:long(addr:long) Arguments addr the user space address to retrieve the unsigned long from Description Returns the unsigned long value from a given user space address. Returns zero when user space data is not accessible. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2019 function::user_ulong_error 3stap function::user_ulong_error Retrieves a unsigned long value stored in user space Synopsis user_ulong_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned long from Description Returns the unsigned long value from a given user space address. If the user space data is not accessible, an error will occur. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2019 function::user_ulong_warn 3stap function::user_ulong_warn Retrieves an unsigned long value stored in user space Synopsis user_ulong_warn:long(addr:long) Arguments addr the user space address to retrieve the unsigned long from Description Returns the unsigned long value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2019 function::user_ushort 3stap function::user_ushort Retrieves an unsigned short value stored in user space Synopsis user_ushort:long(addr:long) Arguments addr the user space address to retrieve the unsigned short from Description Returns the unsigned short value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2019 function::user_ushort_error 3stap function::user_ushort_error Retrieves an unsigned short value stored in user space Synopsis user_ushort_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned short from Description Returns the unsigned short value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2019 function::user_ushort_warn 3stap function::user_ushort_warn Retrieves an unsigned short value stored in user space Synopsis user_ushort_warn:long(addr:long) Arguments addr the user space address to retrieve the unsigned short from Description Returns the unsigned short value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). String and data writing functions Tapset The SystemTap guru mode can be used to test error handling in kernel code by simulating faults. The functions in the this tapset provide standard methods of writing to primitive types in the kernel's memory. All the functions in this tapset require the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_kernel_char 3stap function::set_kernel_char Writes a char value to kernel memory Synopsis set_kernel_char(addr:long,val:long) Arguments addr The kernel address to write the char to val The char which is to be written Description Writes the char value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_kernel_int 3stap function::set_kernel_int Writes an int value to kernel memory Synopsis set_kernel_int(addr:long,val:long) Arguments addr The kernel address to write the int to val The int which is to be written Description Writes the int value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_kernel_long 3stap function::set_kernel_long Writes a long value to kernel memory Synopsis set_kernel_long(addr:long,val:long) Arguments addr The kernel address to write the long to val The long which is to be written Description Writes the long value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_kernel_pointer 3stap function::set_kernel_pointer Writes a pointer value to kernel memory. Synopsis set_kernel_pointer(addr:long,val:long) Arguments addr The kernel address to write the pointer to val The pointer which is to be written Description Writes the pointer value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_kernel_short 3stap function::set_kernel_short Writes a short value to kernel memory Synopsis set_kernel_short(addr:long,val:long) Arguments addr The kernel address to write the short to val The short which is to be written Description Writes the short value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_kernel_string 3stap function::set_kernel_string Writes a string to kernel memory Synopsis set_kernel_string(addr:long,val:string) Arguments addr The kernel address to write the string to val The string which is to be written Description Writes the given string to a given kernel memory address. Reports an error on string copy fault. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_kernel_string_n 3stap function::set_kernel_string_n Writes a string of given length to kernel memory Synopsis set_kernel_string_n(addr:long,n:long,val:string) Arguments addr The kernel address to write the string to n The maximum length of the string val The string which is to be written Description Writes the given string up to a maximum given length to a given kernel memory address. Reports an error on string copy fault. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_user_char 3stap function::set_user_char Writes a char value to user memory Synopsis set_user_char(addr:long,val:long) Arguments addr The user address to write the char to val The char which is to be written Description Writes the char value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_user_int 3stap function::set_user_int Writes an int value to user memory Synopsis set_user_int(addr:long,val:long) Arguments addr The user address to write the int to val The int which is to be written Description Writes the int value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_user_long 3stap function::set_user_long Writes a long value to user memory Synopsis set_user_long(addr:long,val:long) Arguments addr The user address to write the long to val The long which is to be written Description Writes the long value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_user_pointer 3stap function::set_user_pointer Writes a pointer value to user memory. Synopsis set_user_pointer(addr:long,val:long) Arguments addr The user address to write the pointer to val The pointer which is to be written Description Writes the pointer value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_user_short 3stap function::set_user_short Writes a short value to user memory Synopsis set_user_short(addr:long,val:long) Arguments addr The user address to write the short to val The short which is to be written Description Writes the short value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_user_string 3stap function::set_user_string Writes a string to user memory Synopsis set_user_string(addr:long,val:string) Arguments addr The user address to write the string to val The string which is to be written Description Writes the given string to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::set_user_string_n 3stap function::set_user_string_n Writes a string of given length to user memory Synopsis set_user_string_n(addr:long,n:long,val:string) Arguments addr The user address to write the string to n The maximum length of the string val The string which is to be written Description Writes the given string up to a maximum given length to a given user memory address. Reports an error on string copy fault. Requires the use of guru mode (-g). Guru tapsets Functions to deliberately interfere with the system's behavior, in order to inject faults or improve observability. All the functions in this tapset require the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2019 function::mdelay 3stap function::mdelay millisecond delay Synopsis mdelay(ms:long) Arguments ms Number of milliseconds to delay. Description This function inserts a multi-millisecond busy-delay into a probe handler. It requires guru mode. LINUX SystemTap Tapset Reference November 2019 function::panic 3stap function::panic trigger a panic Synopsis panic(msg:string) Arguments msg message to pass to kernel's panic function Description This function triggers an immediate panic of the running kernel with a user-specified panic message. It requires guru mode. LINUX SystemTap Tapset Reference November 2019 function::raise 3stap function::raise raise a signal in the current thread Synopsis raise(signo:long) Arguments signo signal number Description This function calls the kernel send_sig routine on the current thread, with the given raw unchecked signal number. It may raise an error if send_sig failed. It requires guru mode. LINUX SystemTap Tapset Reference November 2019 function::udelay 3stap function::udelay microsecond delay Synopsis udelay(us:long) Arguments us Number of microseconds to delay. Description This function inserts a multi-microsecond busy-delay into a probe handler. It requires guru mode. A collection of standard string functions Functions to get the length, a substring, getting at individual characters, string seaching, escaping, tokenizing, and converting strings to longs. LINUX SystemTap Tapset Reference November 2019 function::isdigit 3stap function::isdigit Checks for a digit Synopsis isdigit:long(str:string) Arguments str string to check Description Checks for a digit (0 through 9) as the first character of a string. Returns non-zero if true, and a zero if false. LINUX SystemTap Tapset Reference November 2019 function::isinstr 3stap function::isinstr Returns whether a string is a substring of another string Synopsis isinstr:long(s1:string,s2:string) Arguments s1 string to search in s2 substring to find Description This function returns 1 if string s1 contains s2, otherwise zero. LINUX SystemTap Tapset Reference November 2019 function::matched 3stap function::matched Return a given matched subexpression. Synopsis matched:string(n:long) Arguments n index to the subexpression to return. 0 corresponds to the entire regular expression. Description returns the content of the n'th subexpression of the last successful use of the =~ regex matching operator. Returns an empty string if the n'th subexpression was not matched (e.g. due to alternation). Throws an error if the last use of =~ was a failed match, or if fewer than n subexpressions are present in the original regexp. LINUX SystemTap Tapset Reference November 2019 function::matched_str 3stap function::matched_str Return the last matched string. Synopsis matched_str:string() Arguments None Description returns the string matched by the last successful use of the =~ regexp matching operator. Returns an error if the last use of =~ led to a failed match. LINUX SystemTap Tapset Reference November 2019 function::ngroups 3stap function::ngroups Number of subexpressions in the last match. Synopsis ngroups:long() Arguments None Description returns the number of subexpressions from the last successful use of the =~ regex matching operator. Note that this number includes subexpressions which are present in the regex but did not match any string; for example, given the regex a|(b), the subexpressions will count the group for (b) regardless of whether it matched a string or not. Throws an error if the last use of =~ was a failed match. LINUX SystemTap Tapset Reference November 2019 function::str_replace 3stap function::str_replace str_replace Replaces all instances of a substring with another Synopsis str_replace:string(prnt_str:string,srch_str:string,rplc_str:string) Arguments prnt_str the string to search and replace in srch_str the substring which is used to search in prnt_str string rplc_str the substring which is used to replace srch_str Description This function returns the given string with substrings replaced. LINUX SystemTap Tapset Reference November 2019 function::string_quoted 3stap function::string_quoted Quotes a given string Synopsis string_quoted:string(str:string) Arguments str The kernel address to retrieve the string from Description Returns the quoted string version of the given string, with characters where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. LINUX SystemTap Tapset Reference November 2019 function::stringat 3stap function::stringat Returns the char at a given position in the string Synopsis stringat:long(str:string,pos:long) Arguments str the string to fetch the character from pos the position to get the character from (first character is 0) Description This function returns the character at a given position in the string or zero if the string doesn't have as many characters. Reports an error if pos is out of bounds. LINUX SystemTap Tapset Reference November 2019 function::strlen 3stap function::strlen Returns the length of a string Synopsis strlen:long(s:string) Arguments s the string Description This function returns the length of the string, which can be zero up to MAXSTRINGLEN. LINUX SystemTap Tapset Reference November 2019 function::strpos 3stap function::strpos Returns location of a substring within another string Synopsis strpos:long(s1:string,s2:string) Arguments s1 string to search in s2 substring to find Description This function returns location of the first occurence of string s2 within s1, namely the return value is 0 in case s2 is a prefix of s1. If s2 is not a substring of s1, then the return value is -1. LINUX SystemTap Tapset Reference November 2019 function::strtol 3stap function::strtol strtol - Convert a string to a long Synopsis strtol:long(str:string,base:long) Arguments str string to convert base the base to use Description This function converts the string representation of a number to an integer. The base parameter indicates the number base to assume for the string (eg. 16 for hex, 8 for octal, 2 for binary). LINUX SystemTap Tapset Reference November 2019 function::substr 3stap function::substr Returns a substring Synopsis substr:string(str:string,start:long,length:long) Arguments str the string to take a substring from start starting position of the extracted string (first character is 0) length length of string to return Description Returns the substring of the given string at the given start position with the given length (or smaller if the length of the original string is less than start + length, or length is bigger than MAXSTRINGLEN). LINUX SystemTap Tapset Reference November 2019 function::text_str 3stap function::text_str Escape any non-printable chars in a string Synopsis text_str:string(input:string) Arguments input the string to escape Description This function accepts a string argument, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. LINUX SystemTap Tapset Reference November 2019 function::text_strn 3stap function::text_strn Escape any non-printable chars in a string Synopsis text_strn:string(input:string,len:long,quoted:long) Arguments input the string to escape len maximum length of string to return (0 implies MAXSTRINGLEN) quoted put double quotes around the string. If input string is truncated it will have ... after the second quote Description This function accepts a string of designated length, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. LINUX SystemTap Tapset Reference November 2019 function::tokenize 3stap function::tokenize Return the next non-empty token in a string Synopsis 1) tokenize:string(delim:string) 2) tokenize:string(input:string,delim:string) Arguments delim set of characters that delimit the tokens input string to tokenize. If empty, returns the next non-empty token in the string passed in the previous call to tokenize. Description 1) This function returns the next token in the string passed in the previous call to tokenize. If no delimiter is found, the entire remaining input string is * returned. It returns empty when no more tokens are available. 2) This function returns the next non-empty token in the given input string, where the tokens are delimited by characters in the delim string. If the input string is non-empty, it returns the first token. If the input string is empty, it returns the next token in the string passed in the previous call to tokenize. If no delimiter is found, the entire remaining input string is returned. It returns empty when no more tokens are available. Utility functions for using ansi control chars in logs Utility functions for logging using ansi control characters. This lets you manipulate the cursor position and character color output and attributes of log messages. LINUX SystemTap Tapset Reference November 2019 function::ansi_clear_screen 3stap function::ansi_clear_screen Move cursor to top left and clear screen. Synopsis ansi_clear_screen() Arguments None Description Sends ansi code for moving cursor to top left and then the ansi code for clearing the screen from the cursor position to the end. LINUX SystemTap Tapset Reference November 2019 function::ansi_cursor_hide 3stap function::ansi_cursor_hide Hides the cursor. Synopsis ansi_cursor_hide() Arguments None Description Sends ansi code for hiding the cursor. LINUX SystemTap Tapset Reference November 2019 function::ansi_cursor_move 3stap function::ansi_cursor_move Move cursor to new coordinates. Synopsis ansi_cursor_move(x:long,y:long) Arguments x Row to move the cursor to. y Colomn to move the cursor to. Description Sends ansi code for positioning the cursor at row x and column y. Coordinates start at one, (1,1) is the top-left corner. LINUX SystemTap Tapset Reference November 2019 function::ansi_cursor_restore 3stap function::ansi_cursor_restore Restores a previously saved cursor position. Synopsis ansi_cursor_restore() Arguments None Description Sends ansi code for restoring the current cursor position previously saved with ansi_cursor_save. LINUX SystemTap Tapset Reference November 2019 function::ansi_cursor_save 3stap function::ansi_cursor_save Saves the cursor position. Synopsis ansi_cursor_save() Arguments None Description Sends ansi code for saving the current cursor position. LINUX SystemTap Tapset Reference November 2019 function::ansi_cursor_show 3stap function::ansi_cursor_show Shows the cursor. Synopsis ansi_cursor_show() Arguments None Description Sends ansi code for showing the cursor. LINUX SystemTap Tapset Reference November 2019 function::ansi_new_line 3stap function::ansi_new_line Move cursor to new line. Synopsis ansi_new_line() Arguments None Description Sends ansi code new line. LINUX SystemTap Tapset Reference November 2019 function::ansi_reset_color 3stap function::ansi_reset_color Resets Select Graphic Rendition mode. Synopsis ansi_reset_color() Arguments None Description Sends ansi code to reset foreground, background and color attribute to default values. LINUX SystemTap Tapset Reference November 2019 function::ansi_set_color 3stap function::ansi_set_color Set the ansi Select Graphic Rendition mode. Synopsis 1) ansi_set_color(fg:long) 2) ansi_set_color(fg:long,bg:long) 3) ansi_set_color(fg:long,bg:long,attr:long) Arguments fg Foreground color to set. bg Background color to set. attr Color attribute to set. Description 1) Sends ansi code for Select Graphic Rendition mode for the given forground color. Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37). 2) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37) and the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47). 3) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37), the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47) and the color attribute All attributes off (0), Intensity Bold (1), Underline Single (4), Blink Slow (5), Blink Rapid (6), Image Negative (7). LINUX SystemTap Tapset Reference November 2019 function::indent 3stap function::indent returns an amount of space to indent Synopsis indent:string(delta:long) Arguments delta the amount of space added/removed for each call Description This function returns a string with appropriate indentation. Call it with a small positive or matching negative delta. Unlike the thread_indent function, the indent does not track individual indent values on a per thread basis. LINUX SystemTap Tapset Reference November 2019 function::indent_depth 3stap function::indent_depth returns the global nested-depth Synopsis indent_depth:long(delta:long) Arguments delta the amount of depth added/removed for each call Description This function returns a number for appropriate indentation, similar to indent. Call it with a small positive or matching negative delta. Unlike the thread_indent_depth function, the indent does not track individual indent values on a per thread basis. LINUX SystemTap Tapset Reference November 2019 function::thread_indent 3stap function::thread_indent returns an amount of space with the current task information Synopsis thread_indent:string(delta:long) Arguments delta the amount of space added/removed for each call Description This function returns a string with appropriate indentation for a thread. Call it with a small positive or matching negative delta. If this is the real outermost, initial level of indentation, then the function resets the relative timestamp base to zero. The timestamp is as per provided by the __indent_timestamp function, which by default measures microseconds. LINUX SystemTap Tapset Reference November 2019 function::thread_indent_depth 3stap function::thread_indent_depth returns the nested-depth of the current task Synopsis thread_indent_depth:long(delta:long) Arguments delta the amount of depth added/removed for each call Description This function returns an integer equal to the nested function-call depth starting from the outermost initial level. This function is useful for saving space (consumed by whitespace) in traces with long nested function calls. Use this function in a similar fashion to thread_indent, i.e., in call-probe, use thread_indent_depth(1) and in return-probe, use thread_indent_depth(-1) SystemTap Translator Tapset This family of user-space probe points is used to probe the operation of the SystemTap translator (stap) and run command (staprun). The tapset includes probes to watch the various phases of SystemTap and SystemTap's management of instrumentation cache. It contains the following probe points: LINUX SystemTap Tapset Reference November 2019 probe::stap.cache_add_mod 3stap probe::stap.cache_add_mod Adding kernel instrumentation module to cache Synopsis stap.cache_add_mod Values source_path the path the .ko file is coming from (incl filename) dest_path the path the .ko file is going to (incl filename) Description Fires just before the file is actually moved. Note: if moving fails, cache_add_src and cache_add_nss will not fire. LINUX SystemTap Tapset Reference November 2019 probe::stap.cache_add_nss 3stap probe::stap.cache_add_nss Add NSS (Network Security Services) information to cache Synopsis stap.cache_add_nss Values dest_path the path the .sgn file is coming from (incl filename) source_path the path the .sgn file is coming from (incl filename) Description Fires just before the file is actually moved. Note: stap must compiled with NSS support; if moving the kernel module fails, this probe will not fire. LINUX SystemTap Tapset Reference November 2019 probe::stap.cache_add_src 3stap probe::stap.cache_add_src Adding C code translation to cache Synopsis stap.cache_add_src Values dest_path the path the .c file is going to (incl filename) source_path the path the .c file is coming from (incl filename) Description Fires just before the file is actually moved. Note: if moving the kernel module fails, this probe will not fire. LINUX SystemTap Tapset Reference November 2019 probe::stap.cache_clean 3stap probe::stap.cache_clean Removing file from stap cache Synopsis stap.cache_clean Values path the path to the .ko/.c file being removed Description Fires just before the call to unlink the module/source file. LINUX SystemTap Tapset Reference November 2019 probe::stap.cache_get 3stap probe::stap.cache_get Found item in stap cache Synopsis stap.cache_get Values module_path the path of the .ko kernel module file source_path the path of the .c source file Description Fires just before the return of get_from_cache, when the cache grab is successful. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass0 3stap probe::stap.pass0 Starting stap pass0 (parsing command line arguments) Synopsis stap.pass0 Values session the systemtap_session variable s Description pass0 fires after command line arguments have been parsed. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass0.end 3stap probe::stap.pass0.end Finished stap pass0 (parsing command line arguments) Synopsis stap.pass0.end Values session the systemtap_session variable s Description pass0.end fires just before the gettimeofday call for pass1. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass1.end 3stap probe::stap.pass1.end Finished stap pass1 (parsing scripts) Synopsis stap.pass1.end Values session the systemtap_session variable s Description pass1.end fires just before the jump to cleanup if s.last_pass = 1. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass1a 3stap probe::stap.pass1a Starting stap pass1 (parsing user script) Synopsis stap.pass1a Values session the systemtap_session variable s Description pass1a fires just after the call to gettimeofday, before the user script is parsed. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass1b 3stap probe::stap.pass1b Starting stap pass1 (parsing library scripts) Synopsis stap.pass1b Values session the systemtap_session variable s Description pass1b fires just before the library scripts are parsed. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass2 3stap probe::stap.pass2 Starting stap pass2 (elaboration) Synopsis stap.pass2 Values session the systemtap_session variable s Description pass2 fires just after the call to gettimeofday, just before the call to semantic_pass. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass2.end 3stap probe::stap.pass2.end Finished stap pass2 (elaboration) Synopsis stap.pass2.end Values session the systemtap_session variable s Description pass2.end fires just before the jump to cleanup if s.last_pass = 2 LINUX SystemTap Tapset Reference November 2019 probe::stap.pass3 3stap probe::stap.pass3 Starting stap pass3 (translation to C) Synopsis stap.pass3 Values session the systemtap_session variable s Description pass3 fires just after the call to gettimeofday, just before the call to translate_pass. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass3.end 3stap probe::stap.pass3.end Finished stap pass3 (translation to C) Synopsis stap.pass3.end Values session the systemtap_session variable s Description pass3.end fires just before the jump to cleanup if s.last_pass = 3 LINUX SystemTap Tapset Reference November 2019 probe::stap.pass4 3stap probe::stap.pass4 Starting stap pass4 (compile C code into kernel module) Synopsis stap.pass4 Values session the systemtap_session variable s Description pass4 fires just after the call to gettimeofday, just before the call to compile_pass. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass4.end 3stap probe::stap.pass4.end Finished stap pass4 (compile C code into kernel module) Synopsis stap.pass4.end Values session the systemtap_session variable s Description pass4.end fires just before the jump to cleanup if s.last_pass = 4 LINUX SystemTap Tapset Reference November 2019 probe::stap.pass5 3stap probe::stap.pass5 Starting stap pass5 (running the instrumentation) Synopsis stap.pass5 Values session the systemtap_session variable s Description pass5 fires just after the call to gettimeofday, just before the call to run_pass. LINUX SystemTap Tapset Reference November 2019 probe::stap.pass5.end 3stap probe::stap.pass5.end Finished stap pass5 (running the instrumentation) Synopsis stap.pass5.end Values session the systemtap_session variable s Description pass5.end fires just before the cleanup label LINUX SystemTap Tapset Reference November 2019 probe::stap.pass6 3stap probe::stap.pass6 Starting stap pass6 (cleanup) Synopsis stap.pass6 Values session the systemtap_session variable s Description pass6 fires just after the cleanup label, essentially the same spot as pass5.end LINUX SystemTap Tapset Reference November 2019 probe::stap.pass6.end 3stap probe::stap.pass6.end Finished stap pass6 (cleanup) Synopsis stap.pass6.end Values session the systemtap_session variable s Description pass6.end fires just before main's return. LINUX SystemTap Tapset Reference November 2019 probe::stap.system 3stap probe::stap.system Starting a command from stap Synopsis stap.system Values command the command string to be run by posix_spawn (as sh -c <str>) Description Fires at the entry of the stap_system command. LINUX SystemTap Tapset Reference November 2019 probe::stap.system.return 3stap probe::stap.system.return Finished a command from stap Synopsis stap.system.return Values ret a return code associated with running waitpid on the spawned process; a non-zero value indicates error Description Fires just before the return of the stap_system function, after waitpid. LINUX SystemTap Tapset Reference November 2019 probe::stap.system.spawn 3stap probe::stap.system.spawn stap spawned new process Synopsis stap.system.spawn Values ret the return value from posix_spawn pid the pid of the spawned process Description Fires just after the call to posix_spawn. LINUX SystemTap Tapset Reference November 2019 probe::stapio.receive_control_message 3stap probe::stapio.receive_control_message Received a control message Synopsis stapio.receive_control_message Values data a ptr to a binary blob of data sent as the control message len the length (in bytes) of the data blob type type of message being send; defined in runtime/transport/transport_msgs.h Description Fires just after a message was receieved and before it's processed. LINUX SystemTap Tapset Reference November 2019 probe::staprun.insert_module 3stap probe::staprun.insert_module Inserting SystemTap instrumentation module Synopsis staprun.insert_module Values path the full path to the .ko kernel module about to be inserted Description Fires just before the call to insert the module. LINUX SystemTap Tapset Reference November 2019 probe::staprun.remove_module 3stap probe::staprun.remove_module Removing SystemTap instrumentation module Synopsis staprun.remove_module Values name the stap module name to be removed (without the .ko extension) Description Fires just before the call to remove the module. LINUX SystemTap Tapset Reference November 2019 probe::staprun.send_control_message 3stap probe::staprun.send_control_message Sending a control message Synopsis staprun.send_control_message Values type type of message being send; defined in runtime/transport/transport_msgs.h len the length (in bytes) of the data blob data a ptr to a binary blob of data sent as the control message Description Fires at the beginning of the send_request function. Network File Storage Tapsets This family of probe points is used to probe network file storage functions and operations. LINUX SystemTap Tapset Reference November 2019 function::nfsderror 3stap function::nfsderror Convert nfsd error number into string Synopsis nfsderror:string(err:long) Arguments err errnum Description This function returns a string for the error number passed into the function. LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.readpage 3stap probe::nfs.aop.readpage NFS client synchronously reading a page Synopsis nfs.aop.readpage Values __page the address of page i_flag file flags size number of pages to be read in this execution i_size file length in bytes dev device identifier file file argument rsize read size (in bytes) ino inode number sb_flag super block flags page_index offset within mapping, can used a page identifier and position identifier in the page frame Description Read the page over, only fires when a previous async read operation failed LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.readpages 3stap probe::nfs.aop.readpages NFS client reading multiple pages Synopsis nfs.aop.readpages Values dev device identifier nr_pages number of pages attempted to read in this execution size number of pages attempted to read in this execution rpages read size (in pages) rsize read size (in bytes) ino inode number file filp argument Description Fires when in readahead way, read several pages once LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.release_page 3stap probe::nfs.aop.release_page NFS client releasing page Synopsis nfs.aop.release_page Values ino inode number page_index offset within mapping, can used a page identifier and position identifier in the page frame size release pages __page the address of page dev device identifier Description Fires when do a release operation on NFS. LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.set_page_dirty 3stap probe::nfs.aop.set_page_dirty NFS client marking page as dirty Synopsis nfs.aop.set_page_dirty Values __page the address of page page_flag page flags Description This probe attaches to the generic __set_page_dirty_nobuffers function. Thus, this probe is going to fire on many other file systems in addition to the NFS client. LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.write_begin 3stap probe::nfs.aop.write_begin NFS client begin to write data Synopsis nfs.aop.write_begin Values page_index offset within mapping, can used a page identifier and position identifier in the page frame ino inode number dev device identifier offset start address of this write operation __page the address of page size write bytes to end address of this write operation Description Occurs when write operation occurs on nfs. It prepare a page for writing, look for a request corresponding to the page. If there is one, and it belongs to another file, it flush it out before it tries to copy anything into the page. Also do the same if it finds a request from an existing dropped page LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.write_end 3stap probe::nfs.aop.write_end NFS client complete writing data Synopsis nfs.aop.write_end Values dev device identifier offset start address of this write operation i_size file length in bytes __page the address of page size write bytes to end address of this write operation i_flag file flags sb_flag super block flags page_index offset within mapping, can used a page identifier and position identifier in the page frame ino inode number Description Fires when do a write operation on nfs, often after prepare_write Update and possibly write a cached page of an NFS file. LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.writepage 3stap probe::nfs.aop.writepage NFS client writing a mapped page to the NFS server Synopsis nfs.aop.writepage Values i_size file length in bytes dev device identifier i_flag file flags size number of pages to be written in this execution __page the address of page page_index offset within mapping, can used a page identifier and position identifier in the page frame sb_flag super block flags i_state inode state flags ino inode number wsize write size for_reclaim a flag of writeback_control, indicates if it's invoked from the page allocator for_kupdate a flag of writeback_control, indicates if it's a kupdate writeback Description The priority of wb is decided by the flags for_reclaim and for_kupdate. LINUX SystemTap Tapset Reference November 2019 probe::nfs.aop.writepages 3stap probe::nfs.aop.writepages NFS client writing several dirty pages to the NFS server Synopsis nfs.aop.writepages Values for_kupdate a flag of writeback_control, indicates if it's a kupdate writeback ino inode number for_reclaim a flag of writeback_control, indicates if it's invoked from the page allocator wsize write size wpages write size (in pages) size number of pages attempted to be written in this execution nr_to_write number of pages attempted to be written in this execution dev device identifier Description The priority of wb is decided by the flags for_reclaim and for_kupdate. LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.aio_read 3stap probe::nfs.fop.aio_read NFS client aio_read file operation Synopsis nfs.fop.aio_read Values ino inode number cache_valid cache related bit mask flag pos current position of file cache_time when we started read-caching this inode attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. file_name file name count read bytes dev device identifier buf the address of buf in user space parent_name parent dir name LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.aio_write 3stap probe::nfs.fop.aio_write NFS client aio_write file operation Synopsis nfs.fop.aio_write Values ino inode number pos offset of the file count read bytes file_name file name dev device identifier buf the address of buf in user space parent_name parent dir name LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.check_flags 3stap probe::nfs.fop.check_flags NFS client checking flag operation Synopsis nfs.fop.check_flags Values flag file flag LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.flush 3stap probe::nfs.fop.flush NFS client flush file operation Synopsis nfs.fop.flush Values mode file mode ino inode number ndirty number of dirty page dev device identifier LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.fsync 3stap probe::nfs.fop.fsync NFS client fsync operation Synopsis nfs.fop.fsync Values ino inode number dev device identifier ndirty number of dirty pages LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.llseek 3stap probe::nfs.fop.llseek NFS client llseek operation Synopsis nfs.fop.llseek Values whence the position to seek from whence_str symbolic string representation of the position to seek from ino inode number offset the offset of the file will be repositioned dev device identifier LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.lock 3stap probe::nfs.fop.lock NFS client file lock operation Synopsis nfs.fop.lock Values fl_type lock type cmd cmd arguments fl_end ending offset of locked region fl_start starting offset of locked region ino inode number fl_flag lock flags dev device identifier i_mode file type and access rights LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.mmap 3stap probe::nfs.fop.mmap NFS client mmap operation Synopsis nfs.fop.mmap Values vm_start start address within vm_mm ino inode number vm_end the first byte after end address within vm_mm attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. cache_valid cache related bit mask flag dev device identifier file_name file name parent_name parent dir name buf the address of buf in user space vm_flag vm flags cache_time when we started read-caching this inode LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.open 3stap probe::nfs.fop.open NFS client file open operation Synopsis nfs.fop.open Values flag file flag file_name file name i_size file length in bytes dev device identifier ino inode number LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.read 3stap probe::nfs.fop.read NFS client read operation Synopsis nfs.fop.read Values devname block device name Description SystemTap uses the vfs.do_sync_read probe to implement this probe and as a result will get operations other than the NFS client read operations. LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.read_iter 3stap probe::nfs.fop.read_iter NFS client read_iter file operation Synopsis nfs.fop.read_iter Values ino inode number attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. cache_time when we started read-caching this inode cache_valid cache related bit mask flag pos current position of file dev device identifier file_name file name count read bytes parent_name parent dir name LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.release 3stap probe::nfs.fop.release NFS client release page operation Synopsis nfs.fop.release Values mode file mode ino inode number dev device identifier LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.sendfile 3stap probe::nfs.fop.sendfile NFS client send file operation Synopsis nfs.fop.sendfile Values cache_valid cache related bit mask flag attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. ino inode number ppos current position of file cache_time when we started read-caching this inode count read bytes dev device identifier LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.write 3stap probe::nfs.fop.write NFS client write operation Synopsis nfs.fop.write Values devname block device name Description SystemTap uses the vfs.do_sync_write probe to implement this probe and as a result will get operations other than the NFS client write operations. LINUX SystemTap Tapset Reference November 2019 probe::nfs.fop.write_iter 3stap probe::nfs.fop.write_iter NFS client write_iter file operation Synopsis nfs.fop.write_iter Values parent_name parent dir name dev device identifier count read bytes file_name file name pos offset of the file ino inode number LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.commit 3stap probe::nfs.proc.commit NFS client committing data on server Synopsis nfs.proc.commit Values size read bytes in this execution bitmask0 V4 bitmask representing the set of attributes supported on this filesystem bitmask1 V4 bitmask representing the set of attributes supported on this filesystem offset the file offset server_ip IP address of server prot transfer protocol version NFS version Description All the nfs.proc.commit kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2.6.21 and newer kernels. Fires when client writes the buffered data to disk. The buffered data is asynchronously written by client earlier. The commit function works in sync way. This probe point does not exist in NFSv2. LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.commit_done 3stap probe::nfs.proc.commit_done NFS client response to a commit RPC task Synopsis nfs.proc.commit_done Values prot transfer protocol server_ip IP address of server timestamp V4 timestamp, which is used for lease renewal version NFS version valid fattr->valid, indicates which fields are valid status result of last operation count number of bytes committed Description Fires when a reply to a commit RPC task is received or some commit operation error occur (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.commit_setup 3stap probe::nfs.proc.commit_setup NFS client setting up a commit RPC task Synopsis nfs.proc.commit_setup Values offset the file offset version NFS version prot transfer protocol server_ip IP address of server bitmask0 V4 bitmask representing the set of attributes supported on this filesystem size bytes in this commit count bytes in this commit bitmask1 V4 bitmask representing the set of attributes supported on this filesystem Description The commit_setup function is used to setup a commit RPC task. Is is not doing the actual commit operation. It does not exist in NFSv2. LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.create 3stap probe::nfs.proc.create NFS client creating file on server Synopsis nfs.proc.create Values flag indicates create mode (only for NFSv3 and NFSv4) version NFS version (the function is used for all NFS version) server_ip IP address of server prot transfer protocol filename file name filelen length of file name fh file handle of parent dir LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.handle_exception 3stap probe::nfs.proc.handle_exception NFS client handling an NFSv4 exception Synopsis nfs.proc.handle_exception Values errorcode indicates the type of error Description This is the error handling routine for processes for NFSv4. LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.lookup 3stap probe::nfs.proc.lookup NFS client opens/searches a file on server Synopsis nfs.proc.lookup Values filename the name of file which client opens/searches on server version NFS version name_len the length of file name server_ip IP address of server prot transfer protocol bitmask0 V4 bitmask representing the set of attributes supported on this filesystem bitmask1 V4 bitmask representing the set of attributes supported on this filesystem LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.open 3stap probe::nfs.proc.open NFS client allocates file read/write context information Synopsis nfs.proc.open Values filename file name server_ip IP address of server prot transfer protocol version NFS version (the function is used for all NFS version) flag file flag mode file mode Description Allocate file read/write context information LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.read 3stap probe::nfs.proc.read NFS client synchronously reads file from server Synopsis nfs.proc.read Values offset the file offset prot transfer protocol server_ip IP address of server version NFS version flags used to set task->tk_flags in rpc_init_task function count read bytes in this execution Description All the nfs.proc.read kernel functions were removed in kernel commit 8e0969 in December 2006, so these probes do not exist on Linux 2.6.21 and newer kernels. LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.read_done 3stap probe::nfs.proc.read_done NFS client response to a read RPC task Synopsis nfs.proc.read_done Values status result of last operation prot transfer protocol server_ip IP address of server timestamp V4 timestamp, which is used for lease renewal version NFS version count number of bytes read Description Fires when a reply to a read RPC task is received or some read error occurs (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.read_setup 3stap probe::nfs.proc.read_setup NFS client setting up a read RPC task Synopsis nfs.proc.read_setup Values prot transfer protocol server_ip IP address of server version NFS version offset the file offset count read bytes in this execution size read bytes in this execution Description The read_setup function is used to setup a read RPC task. It is not doing the actual read operation. LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.release 3stap probe::nfs.proc.release NFS client releases file read/write context information Synopsis nfs.proc.release Values mode file mode prot transfer protocol server_ip IP address of server flag file flag version NFS version (the function is used for all NFS version) filename file name Description Release file read/write context information LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.remove 3stap probe::nfs.proc.remove NFS client removes a file on server Synopsis nfs.proc.remove Values filename file name version NFS version (the function is used for all NFS version) server_ip IP address of server prot transfer protocol fh file handle of parent dir filelen length of file name LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.rename 3stap probe::nfs.proc.rename NFS client renames a file on server Synopsis nfs.proc.rename Values prot transfer protocol old_filelen length of old file name server_ip IP address of server version NFS version (the function is used for all NFS version) new_filelen length of new file name new_name new file name new_fh file handle of new parent dir old_name old file name old_fh file handle of old parent dir LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.rename_done 3stap probe::nfs.proc.rename_done NFS client response to a rename RPC task Synopsis nfs.proc.rename_done Values status result of last operation timestamp V4 timestamp, which is used for lease renewal server_ip IP address of server prot transfer protocol version NFS version old_fh file handle of old parent dir new_fh file handle of new parent dir Description Fires when a reply to a rename RPC task is received or some rename error occurs (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.rename_setup 3stap probe::nfs.proc.rename_setup NFS client setting up a rename RPC task Synopsis nfs.proc.rename_setup Values version NFS version server_ip IP address of server prot transfer protocol fh file handle of parent dir Description The rename_setup function is used to setup a rename RPC task. Is is not doing the actual rename operation. LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.write 3stap probe::nfs.proc.write NFS client synchronously writes file to server Synopsis nfs.proc.write Values server_ip IP address of server prot transfer protocol version NFS version offset the file offset bitmask1 V4 bitmask representing the set of attributes supported on this filesystem bitmask0 V4 bitmask representing the set of attributes supported on this filesystem size read bytes in this execution flags used to set task->tk_flags in rpc_init_task function Description All the nfs.proc.write kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2.6.21 and newer kernels. LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.write_done 3stap probe::nfs.proc.write_done NFS client response to a write RPC task Synopsis nfs.proc.write_done Values count number of bytes written version NFS version timestamp V4 timestamp, which is used for lease renewal server_ip IP address of server prot transfer protocol status result of last operation valid fattr->valid, indicates which fields are valid Description Fires when a reply to a write RPC task is received or some write error occurs (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2019 probe::nfs.proc.write_setup 3stap probe::nfs.proc.write_setup NFS client setting up a write RPC task Synopsis nfs.proc.write_setup Values offset the file offset prot transfer protocol server_ip IP address of server how used to set args.stable. The stable value could be: NFS_UNSTABLE,NFS_DATA_SYNC,NFS_FILE_SYNC (in nfs.proc3.write_setup and nfs.proc4.write_setup) version NFS version size bytes written in this execution bitmask0 V4 bitmask representing the set of attributes supported on this filesystem bitmask1 V4 bitmask representing the set of attributes supported on this filesystem count bytes written in this execution Description The write_setup function is used to setup a write RPC task. It is not doing the actual write operation. LINUX SystemTap Tapset Reference November 2019 probe::nfsd.close 3stap probe::nfsd.close NFS server closing a file for client Synopsis nfsd.close Values filename file name Description This probe point does not exist in kernels starting with 4.2. LINUX SystemTap Tapset Reference November 2019 probe::nfsd.commit 3stap probe::nfsd.commit NFS server committing all pending writes to stable storage Synopsis nfsd.commit Values flag indicates whether this execution is a sync operation fh file handle (the first part is the length of the file handle) size read bytes client_ip the ip address of client count read bytes offset the offset of file LINUX SystemTap Tapset Reference November 2019 probe::nfsd.create 3stap probe::nfsd.create NFS server creating a file(regular,dir,device,fifo) for client Synopsis nfsd.create Values iap_valid Attribute flags fh file handle (the first part is the length of the file handle) iap_mode file access mode client_ip the ip address of client filename file name filelen the length of file name type file type(regular,dir,device,fifo ...) Description Sometimes nfsd will call nfsd_create_v3 instead of this this probe point. LINUX SystemTap Tapset Reference November 2019 probe::nfsd.createv3 3stap probe::nfsd.createv3 NFS server creating a regular file or set file attributes for client Synopsis nfsd.createv3 Values createmode create mode .The possible values could be: NFS3_CREATE_EXCLUSIVE, NFS3_CREATE_UNCHECKED, or NFS3_CREATE_GUARDED verifier file attributes (atime,mtime,mode). It's used to reset file attributes for CREATE_EXCLUSIVE client_ip the ip address of client filename file name truncp trunp arguments, indicates if the file shouldbe truncate filelen the length of file name iap_valid Attribute flags fh file handle (the first part is the length of the file handle) iap_mode file access mode Description This probepoints is only called by nfsd3_proc_create and nfsd4_open when op_claim_type is NFS4_OPEN_CLAIM_NULL. LINUX SystemTap Tapset Reference November 2019 probe::nfsd.dispatch 3stap probe::nfsd.dispatch NFS server receives an operation from client Synopsis nfsd.dispatch Values proto transfer protocol xid transmission id proc procedure number prog program number client_ip the ip address of client version nfs version LINUX SystemTap Tapset Reference November 2019 probe::nfsd.lookup 3stap probe::nfsd.lookup NFS server opening or searching file for a file for client Synopsis nfsd.lookup Values filelen the length of file name client_ip the ip address of client filename file name fh file handle of parent dir(the first part is the length of the file handle) LINUX SystemTap Tapset Reference November 2019 probe::nfsd.open 3stap probe::nfsd.open NFS server opening a file for client Synopsis nfsd.open Values fh file handle (the first part is the length of the file handle) client_ip the ip address of client type type of file (regular file or dir) access indicates the type of open (read/write/commit/readdir...) LINUX SystemTap Tapset Reference November 2019 probe::nfsd.proc.commit 3stap probe::nfsd.proc.commit NFS server performing a commit operation for client Synopsis nfsd.proc.commit Values client_ip the ip address of client gid requester's group id fh file handle (the first part is the length of the file handle) size read bytes version nfs version offset the offset of file uid requester's user id count read bytes proto transfer protocol LINUX SystemTap Tapset Reference November 2019 probe::nfsd.proc.create 3stap probe::nfsd.proc.create NFS server creating a file for client Synopsis nfsd.proc.create Values proto transfer protocol uid requester's user id version nfs version fh file handle (the first part is the length of the file handle) gid requester's group id filename file name client_ip the ip address of client filelen length of file name LINUX SystemTap Tapset Reference November 2019 probe::nfsd.proc.lookup 3stap probe::nfsd.proc.lookup NFS server opening or searching for a file for client Synopsis nfsd.proc.lookup Values gid requester's group id client_ip the ip address of client fh file handle of parent dir (the first part is the length of the file handle) filename file name version nfs version proto transfer protocol uid requester's user id filelen the length of file name LINUX SystemTap Tapset Reference November 2019 probe::nfsd.proc.read 3stap probe::nfsd.proc.read NFS server reading file for client Synopsis nfsd.proc.read Values vec struct kvec, includes buf address in kernel address and length of each buffer fh file handle (the first part is the length of the file handle) size read bytes vlen read blocks uid requester's user id count read bytes proto transfer protocol version nfs version offset the offset of file client_ip the ip address of client gid requester's group id LINUX SystemTap Tapset Reference November 2019 probe::nfsd.proc.remove 3stap probe::nfsd.proc.remove NFS server removing a file for client Synopsis nfsd.proc.remove Values version nfs version proto transfer protocol uid requester's user id filelen length of file name gid requester's group id filename file name client_ip the ip address of client fh file handle (the first part is the length of the file handle) LINUX SystemTap Tapset Reference November 2019 probe::nfsd.proc.rename 3stap probe::nfsd.proc.rename NFS Server renaming a file for client Synopsis nfsd.proc.rename Values tfh file handler of new path uid requester's user id tname new file name tlen length of new file name flen length of old file name fh file handler of old path gid requester's group id filename old file name client_ip the ip address of client LINUX SystemTap Tapset Reference November 2019 probe::nfsd.proc.write 3stap probe::nfsd.proc.write NFS server writing data to file for client Synopsis nfsd.proc.write Values vec struct kvec, includes buf address in kernel address and length of each buffer fh file handle (the first part is the length of the file handle) size read bytes vlen read blocks client_ip the ip address of client gid requester's group id count read bytes uid requester's user id proto transfer protocol version nfs version offset the offset of file stable argp->stable LINUX SystemTap Tapset Reference November 2019 probe::nfsd.read 3stap probe::nfsd.read NFS server reading data from a file for client Synopsis nfsd.read Values client_ip the ip address of client size read bytes fh file handle (the first part is the length of the file handle) vec struct kvec, includes buf address in kernel address and length of each buffer file argument file, indicates if the file has been opened. vlen read blocks offset the offset of file count read bytes LINUX SystemTap Tapset Reference November 2019 probe::nfsd.rename 3stap probe::nfsd.rename NFS server renaming a file for client Synopsis nfsd.rename Values fh file handler of old path flen length of old file name client_ip the ip address of client filename old file name tfh file handler of new path tlen length of new file name tname new file name LINUX SystemTap Tapset Reference November 2019 probe::nfsd.unlink 3stap probe::nfsd.unlink NFS server removing a file or a directory for client Synopsis nfsd.unlink Values filename file name client_ip the ip address of client filelen the length of file name fh file handle (the first part is the length of the file handle) type file type (file or dir) LINUX SystemTap Tapset Reference November 2019 probe::nfsd.write 3stap probe::nfsd.write NFS server writing data to a file for client Synopsis nfsd.write Values client_ip the ip address of client file argument file, indicates if the file has been opened. vlen read blocks size read bytes vec struct kvec, includes buf address in kernel address and length of each buffer fh file handle (the first part is the length of the file handle) offset the offset of file count read bytes Speculation This family of functions provides the ability to speculative record information and then at a later point in the SystemTap script either commit the information or discard it. LINUX SystemTap Tapset Reference November 2019 function::commit 3stap function::commit Write out all output related to a speculation buffer Synopsis commit(id:long) Arguments id of the buffer to store the information in Description Output all the output for id in the order that it was entered into the speculative buffer by speculative. LINUX SystemTap Tapset Reference November 2019 function::discard 3stap function::discard Discard all output related to a speculation buffer Synopsis discard(id:long) Arguments id of the buffer to store the information in LINUX SystemTap Tapset Reference November 2019 function::speculate 3stap function::speculate Store a string for possible output later Synopsis speculate(id:long,output:string) Arguments id buffer id to store the information in output string to write out when commit occurs Description Add a string to the speculaive buffer for id. LINUX SystemTap Tapset Reference November 2019 function::speculation 3stap function::speculation Allocate a new id for speculative output Synopsis speculation:long() Arguments None Description The speculation function is called when a new speculation buffer is needed. It returns an id for the speculative output. There can be multiple threads being speculated on concurrently. This id is used by other speculation functions to keep the threads separate. JSON Tapset This family of probe points, functions, and macros is used to output data in JSON format. It contains the following probe points, functions, and macros: LINUX SystemTap Tapset Reference November 2019 function::json_add_array 3stap function::json_add_array Add an array Synopsis json_add_array:long(name:string,description:string) Arguments name The name of the array. description Array description. An empty string can be used. Description This function adds a array, setting up everything needed. Arrays contain other metrics, added with json_add_array_numeric_metric or json_add_array_string_metric. LINUX SystemTap Tapset Reference November 2019 function::json_add_array_numeric_metric 3stap function::json_add_array_numeric_metric Add a numeric metric to an array Synopsis json_add_array_numeric_metric:long(array_name:string,metric_name:string,metric_description:string,metric_units:string) Arguments array_name The name of the array the numeric metric should be added to. metric_name The name of the numeric metric. metric_description Metric description. An empty string can be used. metric_units Metic units. An empty string can be used. Description This function adds a numeric metric to an array, setting up everything needed. LINUX SystemTap Tapset Reference November 2019 function::json_add_array_string_metric 3stap function::json_add_array_string_metric Add a string metric to an array Synopsis json_add_array_string_metric:long(array_name:string,metric_name:string,metric_description:string) Arguments array_name The name of the array the string metric should be added to. metric_name The name of the string metric. metric_description Metric description. An empty string can be used. Description This function adds a string metric to an array, setting up everything needed. LINUX SystemTap Tapset Reference November 2019 function::json_add_numeric_metric 3stap function::json_add_numeric_metric Add a numeric metric Synopsis json_add_numeric_metric:long(name:string,description:string,units:string) Arguments name The name of the numeric metric. description Metric description. An empty string can be used. units Metic units. An empty string can be used. Description This function adds a numeric metric, setting up everything needed. LINUX SystemTap Tapset Reference November 2019 function::json_add_string_metric 3stap function::json_add_string_metric Add a string metric Synopsis json_add_string_metric:long(name:string,description:string) Arguments name The name of the string metric. description Metric description. An empty string can be used. Description This function adds a string metric, setting up everything needed. LINUX SystemTap Tapset Reference November 2019 function::json_set_prefix 3stap function::json_set_prefix Set the metric prefix. Synopsis json_set_prefix:long(prefix:string) Arguments prefix The prefix name to be used. Description This function sets the prefix, which is the name of the base of the metric hierarchy. Calling this function is optional, by default the name of the systemtap module is used. LINUX SystemTap Tapset Reference November 2019 macro::json_output_array_numeric_value 3stap macro::json_output_array_numeric_value Output a numeric value for metric in an array. Synopsis @json_output_array_numeric_value(array_name,array_index,metric_name,value) Arguments array_name The name of the array. array_index The array index (as a string) indicating where to store the numeric value. metric_name The name of the numeric metric. value The numeric value to output. Description The json_output_array_numeric_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's numeric value that is in an array. This metric should have been added with json_add_array_numeric_metric. LINUX SystemTap Tapset Reference November 2019 macro::json_output_array_string_value 3stap macro::json_output_array_string_value Output a string value for metric in an array. Synopsis @json_output_array_string_value(array_name,array_index,metric_name,value) Arguments array_name The name of the array. array_index The array index (as a string) indicating where to store the string value. metric_name The name of the string metric. value The string value to output. Description The json_output_array_string_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's string value that is in an array. This metric should have been added with json_add_array_string_metric. LINUX SystemTap Tapset Reference November 2019 macro::json_output_data_end 3stap macro::json_output_data_end End the json output. Synopsis @json_output_data_end() Arguments None Description The json_output_data_end macro is designed to be called from the 'json_data' probe from the user's script. It marks the end of the JSON output. LINUX SystemTap Tapset Reference November 2019 macro::json_output_data_start 3stap macro::json_output_data_start Start the json output. Synopsis @json_output_data_start() Arguments None Description The json_output_data_start macro is designed to be called from the 'json_data' probe from the user's script. It marks the start of the JSON output. LINUX SystemTap Tapset Reference November 2019 macro::json_output_numeric_value 3stap macro::json_output_numeric_value Output a numeric value. Synopsis @json_output_numeric_value(name,value) Arguments name The name of the numeric metric. value The numeric value to output. Description The json_output_numeric_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's numeric value. This metric should have been added with json_add_numeric_metric. LINUX SystemTap Tapset Reference November 2019 macro::json_output_string_value 3stap macro::json_output_string_value Output a string value. Synopsis @json_output_string_value(name,value) Arguments name The name of the string metric. value The string value to output. Description The json_output_string_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's string value. This metric should have been added with json_add_string_metric. LINUX SystemTap Tapset Reference November 2019 probe::json_data 3stap probe::json_data Fires whenever JSON data is wanted by a reader. Synopsis json_data Values None Context This probe fires when the JSON data is about to be read. This probe must gather up data and then call the following macros to output the data in JSON format. First, @json_output_data_start must be called. That call is followed by one or more of the following (one call for each data item): @json_output_string_value, @json_output_numeric_value, @json_output_array_string_value, and @json_output_array_numeric_value. Finally @json_output_data_end must be called. Output file switching Tapset Utility function to allow switching of output files. LINUX SystemTap Tapset Reference November 2019 function::switch_file 3stap function::switch_file switch to the next output file Synopsis switch_file() Arguments None Description This function sends a signal to the stapio process, commanding it to rotate to the next output file when output is sent to file(s). Syscall Any Tapset This family of probe points is designed to provide low cost instrumentation for cases where only the syscall name (or number) and return value are required and there is no need for the detailed syscall argument values. They are restricted versions of syscall.* and syscall.*.return. LINUX SystemTap Tapset Reference November 2019 probe::syscall_any 3stap probe::syscall_any Record entry into a syscall Synopsis syscall_any Values syscall_nr number of the syscall name name of the syscall Context The process performing the syscall Description The syscall_any probe point is designed to be a low overhead that monitors all the syscalls entered via a kernel tracepoint. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments or argstr string representation of those arguments. This requires kernel 3.5+ and newer which have the kernel.trace(sys_enter) probe point. LINUX SystemTap Tapset Reference November 2019 probe::syscall_any.return 3stap probe::syscall_any.return Record exit from a syscall Synopsis syscall_any.return Values name name of the syscall syscall_nr number of the syscall retval return value of the syscall Context The process performing the syscall Description The syscall_any.return probe point is designed to be a low overhead that monitors all the syscalls returns via a kernel tracepoint. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments, argstr string representation of those arguments, or a string interpretation of the return value (retval). This requires kernel 3.5+ and newer which have the kernel.trace(sys_exit) probe point. systemtap-4.2/doc/Tapset_Reference_Guide/en-US/images/000077500000000000000000000000001356460210500227065ustar00rootroot00000000000000systemtap-4.2/doc/Tapset_Reference_Guide/en-US/images/icon.svg000066400000000000000000003301271356460210500243650ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-4.2/doc/Tapset_Reference_Guide/manpager.sh000077500000000000000000000100621356460210500226420ustar00rootroot00000000000000#!/bin/bash # This script builds the man pages from comments in tapsets. As such, the man page content # generated herein should be in sync with Tapset Reference Guide # NOTE: proposed newer version is being developed in doc/Systemtap_Tapset_Reference/manpager.sh # cleanup rm -rf man_pages # create working directory mkdir workingdir ; # create list of man pages to generate cat ../SystemTap_Tapset_Reference/tapsets.tmpl | grep ^\!Itapset > manpageus ; sed -i -e 's/\!Itapset\///g' manpageus ; # copy list of man pages into working directory for i in `cat manpageus` ; do cp ../../tapset/$i workingdir ; done ; # enter workdir cd workingdir ; # copy tapsetdescriptions, then clean for i in `cat ../manpageus`; do sed -n '/\/\/ /,/\/\/ <\/tapsetdescription>/ s/.*/&/w temp' < $i ; mv temp $i.tapsetdescription ; sed -i -e 's/\/\/ //g' $i.tapsetdescription ; sed -i -e 's/\/\/ <\/tapsetdescription>//g' $i.tapsetdescription ; sed -i -e 's/\/\///g' $i.tapsetdescription ; done # strip all tapset files to just comments; but all comments must be exactly 1 space before and after "*" for i in `cat ../manpageus` ; do sed -i -e 's/^ \*/ \*/g' $i; sed -i -e 's/^ \* / \* /g' $i; # mark the start of each probe entry (sub "/**") perl -p -i -e 's|^/\*\*| *probestart|g' $i; sed -i -e '/^ \*/!d' $i; # rename all tapsets (remove .stp filename suffix), create templates echo $i > tempname ; sed -i -e 's/.stp//g' tempname ; mv $i `cat tempname` ; mv tempname $i ; done ; # create man page headers for i in `ls | grep -v .stp | grep -v tapsetdescription` ; do #echo ".\" -*- nroff -*-" >> $i.template ; echo ".TH STAPPROBES."$i" 5" >> $i.template ; echo ".SH NAME" >> $i.template ; echo "stapprobes."`cat $i.stp`" \- systemtap "`cat $i.stp`" probe points" >> $i.template ; echo " " >> $i.template ; echo ".SH DESCRIPTION" >> $i.template ; cat $i.stp.tapsetdescription >> $i.template ; echo " " >> $i.template ; echo ".SH PROBES" >> $i.template ; echo ".br" >> $i.template ; echo ".P" >> $i.template ; echo ".TP" >> $i.template ; done # MOST IMPORTANT: clean man page body! sed -i -e 's/\.stp$//g' ../manpageus ; for i in `cat ../manpageus` ; do mv $i $i.tmp ; perl -p -i -e 's| \* sfunction|.BR|g' $i.tmp ; perl -p -i -e 's| \* probe|.BR|g' $i.tmp ; perl -p -i -e 's| -|\ninitlinehere|g' $i.tmp ; perl -p -i -e 's|^initlinehere([^\n]*)\n|$1\n |g' $i.tmp ; perl -p -i -e 's| \* @([^:]*):|\n.I $1:\n|g' $i.tmp ; perl -p -i -e 's| \* ([^:]*):|\n.BR $1:\n|g' $i.tmp ; perl -p -i -e 's| \* ||g' $i.tmp perl -p -i -e 's|\*probestart|\n.P\n.TP|g' $i.tmp ; perl -p -i -e 's|\.I|\n.I|g' $i.tmp ; # remove empty lines sed -i -e '/^$/d' $i.tmp ; sed -i -e '/^$/d' $i.tmp ; sed -i -e 's/^[ \t]*//g' $i.tmp ; # process Description headers perl -p -i -e 's|^\*[^/]|\n.BR Description:\n|g' $i.tmp ; perl -p -i -e 'undef $/;s|\.BR Description:\n\.BR|.BR|g' $i.tmp ; perl -p -i -e 'undef $/;s|\.BR Description:\n\*\/||g' $i.tmp ; # process Argument headers perl -p -i -e 'undef $/;s|\n\n.I|\n.br\n.BR Arguments:\n.I|g' $i.tmp ; # clean up formatting of arguments perl -p -i -e 's|^.I([^:]*:)|\n.br\n.br\n.IR$1\n.br\n\t|g' $i.tmp ; done # make tags work for i in `cat ../manpageus` ; do perl -p -i -e 's|]*>([^.])|$1\n|g' $i.tmp ; perl -p -i -e 's|<[^>]*>|\n.B |g' $i.tmp ; # the previous two statements create excess empty lines, remove some of them sed -i -e '/^$/d' $i.tmp ; # increase whitespace between some headers perl -p -i -e 's|^\.BR ([^:]*:)|\n.br\n.BR $1\n.br\n|g' $i.tmp done # generate footer template echo ".SH SEE ALSO" >> footer echo ".IR stap (1)," >> footer echo ".IR stapprobes (5)," >> footer for i in `cat ../manpageus`; do echo ".IR stapprobes."$i" (5)," >> footer ; done # assemble parts for i in `cat ../manpageus`; do cat $i.template >> stapprobes.$i.5 ; cat $i.tmp >> stapprobes.$i.5 ; cat footer >> stapprobes.$i.5 ; # final polish sed -i -e 's/\*\/$//g' stapprobes.$i.5 ; done # cleanup for i in `ls | grep -v 'stapprobes.*.5'` ; do rm $i ; done rm ../manpageus ; cd .. mv workingdir man_pages echo " " echo "Finished! man pages generated in ./man_pages." echo " " systemtap-4.2/doc/Tapset_Reference_Guide/publicanize.sh000077500000000000000000000117231356460210500233620ustar00rootroot00000000000000#!/bin/bash BASE=$(dirname $(readlink -f $0)) INFILE="$BASE/../SystemTap_Tapset_Reference/tapsets.xml" OUTFILE="$BASE/en-US/Tapset_Reference_Guide.xml" TMPFILE=`mktemp` || exit 1 TMPFILE2=`mktemp` || exit 1 do_help() { echo "publicanize.sh: usage: -?/--help this message -i/--input=file input file name -o/--output=file output file name " >&2 } #process optional arguments -i -o while [ "$#" -ne 0 ] do arg=`printf %s $1 | awk -F= '{print $1}'` val=`printf %s $1 | awk -F= '{print $2}'` shift if test -z "$val"; then local possibleval=$1 printf %s $1 "$possibleval" | grep ^- >/dev/null 2>&1 if test "$?" != "0"; then val=$possibleval if [ "$#" -ge 1 ]; then shift fi fi fi case "$arg" in -i|--input) INFILE=$val ;; -o|--output) OUTFILE=$val ;; -\?|--help) do_help exit 0 ;; *) echo "Unknown option \"$arg\". See opcontrol --help" >&2 exit 1 ;; esac done #copy the generated tapsets.xml cp $INFILE $TMPFILE || exit 1 #remove all excess whitespace sed -i -e 's/^\s*//g' $TMPFILE #remove marked Intro (starthere to endhere) sed -i -e '/starthere/,/endhere/d' $TMPFILE #re-convert programlisting tags sed -i -e 's/<programlisting>//g' $TMPFILE sed -i -e 's/<\/programlisting>/<\/programlisting>/g' $TMPFILE #replace header cat $TMPFILE | perl -p -e 'undef $/;s|\nSystemTap Tapset Reference Manual|\n|msg' | #perl -p -e 'undef $/;s|\n\nSystemTap\nHackers\n\n||msg' | #perl -p -e 'undef $/;s|\n2008-2009\nRed Hat, Inc. and others\n||msg' | #perl -p -e 'undef $/;s|\n\nThis documentation is free software\; you can redistribute\nit and/or modify it under the terms of the GNU General Public\nLicense version 2 as published by the Free Software Foundation.\n||msg' | #perl -p -e 'undef $/;s|\nThis program is distributed in the hope that it will be\nuseful, but WITHOUT ANY WARRANTY; without even the implied\nwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\nSee the GNU General Public License for more details.\n||msg' | #perl -p -e 'undef $/;s|\nYou should have received a copy of the GNU General Public\nLicense along with this program; if not, write to the Free\nSoftware Foundation, Inc., 51 Franklin Street, Fifth Floor,\nBoston, MA 02110-1301 USA.\n||msg' | #perl -p -e 'undef $/;s|\nFor more details see the file COPYING in the source\ndistribution of Linux.\n\n\n||msg' | #perl -p -e 'undef $/;s|||msg' | perl -p -e 'undef $/;s|\n\n\n\n\n\n\n\n\n\n\n\n\n\n||msg' | perl -p -e 'undef $/;s|\n\n\n\n\n\n\n\n\n\n\n||msg' | perl -p -e 'undef $/;s|\n|\nfunction <\/emphasis>|msg' | perl -p -e 'undef $/;s|\n||msg' | perl -p -e 'undef $/;s|\n\n||msg' | perl -p -e 'undef $/;s|\n||msg' | perl -p -e 'undef $/;s|\n||msg' > $TMPFILE2 #replace Intro with my own perl -p -i -e 's||\n|g' $TMPFILE2 #for tapset name format section #perl -p -i -e 'undef $/;s|\nname:return \(parameters\)\ndefinition\n|\nfunction/probe tapset_name:return \(parameters\)\n|msg' $TMPFILE2 #perl -p -i -e 's|In this guide, tapset definitions appear in the following format:|In this guide, the synopsis of each tapset appears in the following format:|g' $TMPFILE2 #perl -p -i -e 's||\n|g' $TMPFILE2 # statements change synopsis tags, as they are still currently unfixed in publican-redhat sed -i -e 's/refsynopsisdiv>/refsect1>/g' $TMPFILE2 sed -i -e 's/refsect1>/refsection>/g' $TMPFILE2 sed -i -e 's/synopsis>/programlisting>\n/g' $TMPFILE2 # re-convert tags sed -i -e 's/<emphasis>//g' $TMPFILE2 sed -i -e 's/<\/emphasis>/<\/emphasis>/g' $TMPFILE2 sed -i -e 's/<remark>//g' $TMPFILE2 sed -i -e 's/<\/remark>/<\/remark>/g' $TMPFILE2 sed -i -e 's/<command>//g' $TMPFILE2 sed -i -e 's/<\/command>/<\/command>/g' $TMPFILE2 #useful marker script; moves content between starthere and endhere to file target #sed -n '/starthere/,/endhere/ s/.*/&/w target' $TMPFILE2 mv $TMPFILE2 $OUTFILE systemtap-4.2/doc/beginners/000077500000000000000000000000001356460210500161335ustar00rootroot00000000000000systemtap-4.2/doc/beginners/Makefile.am000066400000000000000000000043201356460210500201660ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap beginner's guide ## process this file with automake to produce Makefile.in DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SBG = SystemTap_Beginners_Guide BEGIN_INSTALL_DIR = $(DOC_INSTALL_DIR)/$(SBG) # INSTALL_PREBUILT_DOCS is automatically enabled by BUILD_DOCS if INSTALL_PREBUILT_DOCS all: $(SBG)/index.html # The beginner documents are now pre generated in the source tree # move all the relevant files into the build directory $(SBG).pdf: mkdir -p build/en-US/xml cp en-US/*.xml build/en-US/xml/ cp en-US/*.ent build/en-US/xml/ cp -R en-US/xsl build/en-US/ cp -R en-US/extras build/en-US/xml/ cp -R en-US/images build/en-US/xml/ cp -R en-US/Common_Content build/en-US/xml cp en-US/$(SBG).pdf $(builddir)/ # rely on the pdf generation to move all the necessary files into the right dirs $(SBG)/index.html: $(SBG).pdf if BUILD_DOCS if BUILD_HTMLDOCS xmlto --skip-validation \ -x build/en-US/xsl/html.xsl -o $(SBG) html build/en-US/xml/$(SBG).xml cp -R build/en-US/xml/images $(SBG) mkdir -p $(SBG)/Common_Content cp -R build/en-US/xml/Common_Content/images $(SBG)/Common_Content cp -R build/en-US/xml/Common_Content/css $(SBG)/Common_Content endif endif clean-local: rm -rf build/en-US/xml rm -rf build/en-US/xsl rm -f $(SBG).pdf rm -rf $(SBG) install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) $(INSTALL_DATA) $(SBG).pdf $(DOC_INSTALL_DIR) if BUILD_HTMLDOCS $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG) $(INSTALL_DATA) $(SBG)/*.html $(DOC_INSTALL_DIR)/$(SBG) $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/images $(INSTALL_DATA) $(SBG)/images/*.png $(SBG)/images/*.svg \ $(DOC_INSTALL_DIR)/$(SBG)/images $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images $(INSTALL_DATA) $(SBG)/Common_Content/css/*.css \ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css $(INSTALL_DATA) $(SBG)/Common_Content/images/*.png \ $(SBG)/Common_Content/images/*.svg \ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/xsl $(INSTALL_DATA) en-US/xsl/*.xsl \ $(DOC_INSTALL_DIR)/$(SBG)/xsl endif uninstall-local: rm -f $(DOC_INSTALL_DIR)/$(SBG).pdf rm -rf $(DOC_INSTALL_DIR)/$(SBG) endif systemtap-4.2/doc/beginners/Makefile.in000066400000000000000000000414711356460210500202070ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap beginner's guide VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc/beginners ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ elfutils_abs_srcdir = @elfutils_abs_srcdir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = @oldincludedir@ openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SBG = SystemTap_Beginners_Guide BEGIN_INSTALL_DIR = $(DOC_INSTALL_DIR)/$(SBG) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/beginners/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/beginners/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @INSTALL_PREBUILT_DOCS_FALSE@clean-local: @INSTALL_PREBUILT_DOCS_FALSE@uninstall-local: @INSTALL_PREBUILT_DOCS_FALSE@install-data-hook: clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ cscopelist-am ctags-am distclean distclean-generic dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-data-hook install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile # INSTALL_PREBUILT_DOCS is automatically enabled by BUILD_DOCS @INSTALL_PREBUILT_DOCS_TRUE@all: $(SBG)/index.html # The beginner documents are now pre generated in the source tree # move all the relevant files into the build directory @INSTALL_PREBUILT_DOCS_TRUE@$(SBG).pdf: @INSTALL_PREBUILT_DOCS_TRUE@ mkdir -p build/en-US/xml @INSTALL_PREBUILT_DOCS_TRUE@ cp en-US/*.xml build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp en-US/*.ent build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/xsl build/en-US/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/extras build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/images build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/Common_Content build/en-US/xml @INSTALL_PREBUILT_DOCS_TRUE@ cp en-US/$(SBG).pdf $(builddir)/ # rely on the pdf generation to move all the necessary files into the right dirs @INSTALL_PREBUILT_DOCS_TRUE@$(SBG)/index.html: $(SBG).pdf @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ xmlto --skip-validation \ @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ -x build/en-US/xsl/html.xsl -o $(SBG) html build/en-US/xml/$(SBG).xml @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R build/en-US/xml/images $(SBG) @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ mkdir -p $(SBG)/Common_Content @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R build/en-US/xml/Common_Content/images $(SBG)/Common_Content @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R build/en-US/xml/Common_Content/css $(SBG)/Common_Content @INSTALL_PREBUILT_DOCS_TRUE@clean-local: @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf build/en-US/xml @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf build/en-US/xsl @INSTALL_PREBUILT_DOCS_TRUE@ rm -f $(SBG).pdf @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf $(SBG) @INSTALL_PREBUILT_DOCS_TRUE@install-data-hook: @INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG).pdf $(DOC_INSTALL_DIR) @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG) @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/*.html $(DOC_INSTALL_DIR)/$(SBG) @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/images/*.png $(SBG)/images/*.svg \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/Common_Content/css/*.css \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/Common_Content/images/*.png \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(SBG)/Common_Content/images/*.svg \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/xsl @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) en-US/xsl/*.xsl \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/xsl @INSTALL_PREBUILT_DOCS_TRUE@uninstall-local: @INSTALL_PREBUILT_DOCS_TRUE@ rm -f $(DOC_INSTALL_DIR)/$(SBG).pdf @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf $(DOC_INSTALL_DIR)/$(SBG) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.2/doc/langref.tex000066400000000000000000003314401356460210500163240ustar00rootroot00000000000000% SystemTap Language Reference \documentclass[twoside,english]{article} \usepackage{geometry} \geometry{verbose,letterpaper,tmargin=1.5in,bmargin=1.5in,lmargin=1in,rmargin=1in} \usepackage{fancyhdr} \pagestyle{fancy} \usepackage{array} \usepackage{varioref} \usepackage{float} \usepackage{makeidx} \usepackage{verbatim} \usepackage{url} \makeindex \makeatletter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. \newcommand{\noun}[1]{\textsc{#1}} %% Bold symbol macro for standard LaTeX users %\providecommand{\boldsymbol}[1]{\mbox{\boldmath $#1$}} %% Because html converters don't know tabularnewline \providecommand{\tabularnewline}{\\} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands. \setlength{\parindent}{0pt} %\setlength{\parskip}{3pt plus 2pt minus 1pt} \setlength{\parskip}{5pt} % % this makes list spacing much better. % \newenvironment{my_itemize}{ \begin{itemize} \setlength{\itemsep}{1pt} \setlength{\parskip}{0pt} \setlength{\parsep}{0pt}}{\end{itemize} } \newenvironment{vindent} {\begin{list}{}{\setlength{\listparindent}{6pt}} \item[]} {\end{list}} \usepackage[english]{babel} \makeatother \begin{document} \title{SystemTap Language Reference} \maketitle \newpage{} This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel.\newline Copyright \copyright\space 2007-2013 Red Hat Inc.\newline Copyright \copyright\space 2007-2009 IBM Corp.\newline Copyright \copyright\space 2007 Intel Corporation.\newline Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.\newline The GNU Free Documentation License is available from \url{http://www.gnu.org/licenses/fdl.html} or by writing to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. \newpage{} \tableofcontents{} % \listoftables \newpage{} \section{SystemTap overview\label{sec:SystemTap-Overview}} \subsection{About this guide} This guide is a comprehensive reference of SystemTap's language constructs and syntax. The contents borrow heavily from existing SystemTap documentation found in manual pages and the tutorial. The presentation of information here provides the reader with a single place to find language syntax and recommended usage. In order to successfully use this guide, you should be familiar with the general theory and operation of SystemTap. If you are new to SystemTap, you will find the tutorial to be an excellent place to start learning. For detailed information about tapsets, see the manual pages provided with the distribution. For information about the entire collection of SystemTap reference material, see Section~\ref{sec:For-Further-Reference} \subsection{Reasons to use SystemTap} SystemTap provides infrastructure to simplify the gathering of information about a running Linux kernel so that it may be further analyzed. This analysis assists in identifying the underlying cause of a performance or functional problem. SystemTap was designed to eliminate the need for a developer to go through the tedious instrument, recompile, install, and reboot sequence normally required to collect this kind of data. To do this, it provides a simple command-line interface and scripting language for writing instrumentation for both kernel and user space. With SystemTap, developers, system administrators, and users can easily write scripts that gather and manipulate system data that is otherwise unavailable from standard Linux tools. Users of SystemTap will find it to be a significant improvement over older methods. \subsection{Event-action language} \index{language} SystemTap's language is strictly typed, declaration free, procedural, and inspired by dtrace and awk. Source code points or events in the kernel are associated with handlers, which are subroutines that are executed synchronously. These probes are conceptually similar to \char`\"{}breakpoint command lists\char`\"{} in the GDB debugger. There are two main outermost constructs: probes and functions. Within these, statements and expressions use C-like operator syntax and precedence. \subsection{Sample SystemTap scripts} \index{example scripts} Following are some example scripts that illustrate the basic operation of SystemTap. For more examples, see the examples/small\_demos/ directory in the source directory, the SystemTap wiki at \url{http://sourceware.org/systemtap/wiki/HomePage}, or the SystemTap War Stories at \url{http://sourceware.org/systemtap/wiki/WarStories} page. \subsubsection{Basic SystemTap syntax and control structures} The following code examples demonstrate SystemTap syntax and control structures. \begin{vindent} \begin{verbatim} global odds, evens probe begin { # "no" and "ne" are local integers for (i = 0; i < 10; i++) { if (i % 2) odds [no++] = i else evens [ne++] = i } delete odds[2] delete evens[3] exit() } probe end { foreach (x+ in odds) printf ("odds[%d] = %d", x, odds[x]) foreach (x in evens-) printf ("evens[%d] = %d", x, evens[x]) } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} odds[0] = 1 odds[1] = 3 odds[3] = 7 odds[4] = 9 evens[4] = 8 evens[2] = 4 evens[1] = 2 evens[0] = 0 \end{verbatim} \end{vindent} Note that all variable types are inferred, and that all locals and globals are initialized. Integers are set to 0 and strings are set to the empty string. \subsubsection{Primes between 0 and 49} \begin{vindent} \begin{verbatim} function isprime (x) { if (x < 2) return 0 for (i = 2; i < x; i++) { if (x % i == 0) return 0 if (i * i > x) break } return 1 } probe begin { for (i = 0; i < 50; i++) if (isprime (i)) printf("%d\n", i) exit() } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 \end{verbatim} \end{vindent} \subsubsection{Recursive functions} \index{recursion} \begin{vindent} \begin{verbatim} function fibonacci(i) { if (i < 1) error ("bad number") if (i == 1) return 1 if (i == 2) return 2 return fibonacci (i-1) + fibonacci (i-2) } probe begin { printf ("11th fibonacci number: %d", fibonacci (11)) exit () } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 11th fibonacci number: 118 \end{verbatim} \end{vindent} Any larger number input to the function may exceed the MAXACTION or MAXNESTING limits, which will be caught at run time and result in an error. For more about limits see Section~\ref{sub:SystemTap-safety}. \newpage{} \subsection{The stap command} \index{stap} The stap program is the front-end to the SystemTap tool. It accepts probing instructions written in its scripting language, translates those instructions into C code, compiles this C code, and loads the resulting kernel module into a running Linux kernel to perform the requested system trace or probe functions. You can supply the script in a named file, from standard input, or from the command line. The SystemTap script runs until one of the following conditions occurs: \begin{itemize} \item The user interrupts the script with a CTRL-C. \item The script executes the exit() function. \item The script encounters a sufficient number of soft errors. \item The monitored command started with the stap program's \texttt{\textbf{-c}} option exits. \end{itemize} The stap command does the following: \begin{itemize} \item Translates the script \item Generates and compiles a kernel module \item Inserts the module; output to stap's stdout \item CTRL-C unloads the module and terminates stap \end{itemize} For a full list of options to the stap command, see the stap(1) manual page. \subsection{Safety and security\label{sub:SystemTap-safety}} \index{limits} SystemTap is an administrative tool. It exposes kernel internal data structures and potentially private user information. It requires root privileges to actually run the kernel objects it builds using the \textbf{sudo} command, applied to the \textbf{staprun} program. staprun is a part of the SystemTap package, dedicated to module loading and unloading and kernel-to-user data transfer. Since staprun does not perform any additional security checks on the kernel objects it is given, do not give elevated privileges via sudo to untrusted users. The translator asserts certain safety constraints. \index{constraints}It ensures that no handler routine can run for too long, allocate memory, perform unsafe operations, or unintentionally interfere with the kernel. Use of script global variables is locked to protect against manipulation by concurrent probe handlers. Use of \emph{guru mode} constructs such as embedded C (see Section~\ref{sub:Embedded-C}) can violate these constraints, leading to a kernel crash or data corruption. The resource use limits are set by macros in the generated C code. These may be overridden with the -D flag. The following list describes a selection of these macros: \textbf{MAXNESTING} -- The maximum number of recursive function call levels. The default is 10. \textbf{MAXSTRINGLEN} -- The maximum length of strings. The default is 256 bytes for 32 bit machines and 512 bytes for all other machines. \textbf{MAXTRYLOCK} -- The maximum number of iterations to wait for locks on global variables before declaring possible deadlock and skipping the probe. The default is 1000. \textbf{MAXACTION} -- The maximum number of statements to execute during any single probe hit. The default is 1000. \textbf{MAXMAPENTRIES} -- The maximum number of rows in an array if the array size is not specified explicitly when declared. The default is 2048. \textbf{MAXERRORS} -- The maximum number of soft errors before an exit is triggered. The default is 0. \textbf{MAXSKIPPED} -- The maximum number of skipped reentrant probes before an exit is triggered. The default is 100. \textbf{MINSTACKSPACE} -- The minimum number of free kernel stack bytes required in order to run a probe handler. This number should be large enough for the probe handler's own needs, plus a safety margin. The default is 1024. If something goes wrong with stap or staprun after a probe has started running, you may safely kill both user processes, and remove the active probe kernel module with the rmmod command. Any pending trace messages may be lost. \section{Types of SystemTap scripts\label{sec:Types-of-SystemTap}} \subsection{Probe scripts} Probe scripts are analogous to programs; these scripts identify probe points and associated handlers. \subsection{Tapset scripts} Tapset scripts are libraries of probe aliases and auxiliary functions. The /usr/share/systemtap/tapset directory contains tapset scripts. While these scripts look like regular SystemTap scripts, they cannot be run directly. \section{Components of a SystemTap script} The main construct in the scripting language identifies probes. Probes associate abstract events with a statement block, or probe handler, that is to be executed when any of those events occur. The following example shows how to trace entry and exit from a function using two probes. \begin{vindent} \begin{verbatim} probe kernel.function("sys_mkdir").call { log ("enter") } probe kernel.function("sys_mkdir").return { log ("exit") } \end{verbatim} \end{vindent} To list the probe-able functions in the kernel, use the listing option (\texttt{\textbf{-l}}). For example: \begin{vindent} \begin{verbatim} $ stap -l 'kernel.function("*")' | sort \end{verbatim} \end{vindent} \subsection{Probe definitions} The general syntax is as follows. \begin{vindent} \begin{verbatim} probe PROBEPOINT [, PROBEPOINT] { [STMT ...] } \end{verbatim} \end{vindent} Events are specified in a special syntax called \emph{probe points}. There are several varieties of probe points defined by the translator, and tapset scripts may define others using aliases. The provided probe points are listed in the \texttt{stapprobes(3)}, \texttt{tapset::*(3stap)}, and \texttt{probe::*(3stap)} man pages. The STMT statement block is executed whenever {\i any} of the named PROBEPOINT events occurs. The probe handler is interpreted relative to the context of each event. For events associated with kernel code, this context may include variables defined in the source code at that location. These \emph{target variables}\index{target variables} (or ``context variables'') are presented to the script as variables whose names are prefixed with a dollar sign (\$). They may be accessed only if the compiler used to compile the kernel preserved them, despite optimization. This is the same constraint imposed by a debugger when working with optimized code. Other events may have very little context. \subsection{Probe aliases\label{sub:Probe-aliases}} \index{probe aliases} The general syntax is as follows. \begin{vindent} \begin{verbatim} probe = { } probe += { } \end{verbatim} \end{vindent} New probe points may be defined using \emph{aliases}. A probe point alias looks similar to probe definitions, but instead of activating a probe at the given point, it defines a new probe point name as an alias to an existing one. New probe aliases may refer to one or more existing probe aliases. Multiple aliases may share the same underlying probe points. The following is an example. \begin{vindent} \begin{verbatim} probe socket.sendmsg = kernel.function ("sock_sendmsg") { ... } probe socket.do_write = kernel.function ("do_sock_write") { ... } probe socket.send = socket.sendmsg, socket.do_write { ... } \end{verbatim} \end{vindent} There are two types of aliases, the prologue style and the epilogue style which are identified by the equal sign (\texttt{\textbf{=}}) and \char`\"{}\texttt{\textbf{+=}}\char`\"{} respectively. A probe that uses a probe point alias will create an actual probe, with the handler of the alias \emph{pre-pended}. This pre-pending behavior serves several purposes. It allows the alias definition to pre-process the context of the probe before passing control to the handler specified by the user. This has several possible uses, demonstrated as follows. \begin{vindent} \begin{verbatim} # Skip probe unless given condition is met: if ($flag1 != $flag2) next # Supply values describing probes: name = "foo" # Extract the target variable to a plain local variable: var = $var \end{verbatim} \end{vindent} \subsubsection{Prologue-style aliases (=)} \index{prologue-style aliases} \index{=} For a prologue style alias, the statement block that follows an alias definition is implicitly added as a prologue to any probe that refers to the alias. The following is an example. \begin{vindent} \begin{verbatim} # Defines a new probe point syscall.read, which expands to # kernel.function("sys_read"), with the given statement as # a prologue. # probe syscall.read = kernel.function("sys_read") { fildes = $fd } \end{verbatim} \end{vindent} \subsubsection{Epilogue-style aliases (+=)} \index{epilogue-style aliases} \index{+=} The statement block that follows an alias definition is implicitly added as an epilogue to any probe that refers to the alias. It is not useful to define new variables there (since no subsequent code will see them), but rather the code can take action based upon variables set by the prologue or by the user code. The following is an example: \begin{vindent} \begin{verbatim} # Defines a new probe point with the given statement as an # epilogue. # probe syscall.read += kernel.function("sys_read") { if (traceme) println ("tracing me") } \end{verbatim} \end{vindent} \subsubsection{Probe alias usage} A probe alias is used the same way as any built-in probe type, by naming it: \begin{vindent} \begin{verbatim} probe syscall.read { printf("reading fd=%d\n", fildes) } \end{verbatim} \end{vindent} \subsubsection{Alias suffixes} It is possible to include a suffix with a probe alias invocation. If only the initial part of a probe point matches an alias, the remainder is treated as a suffix and attached to the underlying probe point(s) when the alias is expanded. For example: \begin{vindent} \begin{verbatim} /* Define an alias: */ probe sendrecv = tcp.sendmsg, tcp.recvmsg { ... } /* Use the alias in its basic form: */ probe sendrecv { ... } /* Use the alias with an additional suffix: */ probe sendrecv.return { ... } \end{verbatim} \end{vindent} Here, the second use of the probe alias is equivalent to writing \verb+probe tcp.sendmsg.return, tcp.recvmsg.return+. As another example, the probe points \verb+tcp.sendmsg.return+ and \verb+tcp.recvmsg.return+ are actually defined as aliases in the tapset \verb+tcp.stp+. They expand to a probe point of the form \verb+kernel.function("...").return+, so they can also be suffixed: \begin{vindent} \begin{verbatim} probe tcp.sendmsg.return.maxactive(10) { printf("returning from sending %d bytes\n", size) } \end{verbatim} \end{vindent} Here, the probe point expands to \verb+kernel.function("tcp_sendmsg").return.maxactive(10)+. \subsubsection{Alias suffixes and wildcards} When expanding wildcards, SystemTap generally avoids considering alias suffixes in the expansion. The exception is when a wildcard element is encountered that does not have any ordinary expansions. Consider the following example: \begin{vindent} \begin{verbatim} probe some_unrelated_probe = ... { ... } probe myprobe = syscall.read { ... } probe myprobe.test = some_unrelated_probe { ... } probe myprobe.* { ... } probe myprobe.ret* { ... } \end{verbatim} \end{vindent} Here, \verb+return+ would be a valid suffix for \verb+myprobe+. The wildcard \verb+myprobe.*+ matches the ordinary alias \verb+myprobe.test+, and hence the suffix expansion \verb+myprobe.return+ is not included. Conversely, \verb+myprobe.ret*+ does not match any ordinary aliases, so the suffix \verb+myprobe.return+ is included as an expansion. \subsection{Variables\label{sub:Variables}} \index{variables} Identifiers for variables and functions are alphanumeric sequences, and may include the underscore (\_) and the dollar sign (\$) characters. They may not start with a plain digit. Each variable is by default local to the probe or function statement block where it is mentioned, and therefore its scope and lifetime is limited to a particular probe or function invocation. Scalar variables are implicitly typed as either string or integer. Associative arrays also have a string or integer value, and a tuple of strings or integers serves as a key. Arrays must be declared as global. Local arrays\index{local arrays} are not allowed. The translator performs \emph{type inference} on all identifiers, including array indexes and function parameters. Inconsistent type-related use of identifiers results in an error. Variables may be declared global. Global variables are shared among all probes and remain instantiated as long as the SystemTap session. There is one namespace for all global variables, regardless of the script file in which they are found. Because of possible concurrency limits, such as multiple probe handlers, each global variable used by a probe is automatically read- or write-locked while the handler is running. A global declaration may be written at the outermost level anywhere in a script file, not just within a block of code. Global variables which are written but never read will be displayed automatically at session shutdown. The following declaration marks \texttt{var1} and \texttt{var2} as global. The translator will infer a value type for each, and if the variable is used as an array, its key types. \begin{vindent} \begin{verbatim} global var1[=], var2[=] \end{verbatim} \end{vindent} The scope of a global variable may be limited to a tapset or user script file using private keyword. The global keyword is optional when defining a private global variable. Following declaration marks var1 and var2 private globals. \begin{vindent} \begin{verbatim} private global var1[=] private var2[=] \end{verbatim} \end{vindent} \subsubsection{Unused variables} \index{unused variables} The SystemTap translator removes unused variables. Global variable that are never written or read are discarded. Every local variables where the variable is only written but never read are also discarded. This optimization prunes unused variables defined in the probe aliases, but never used in the probe handler. If desired, this optimization can disabled with the \texttt{-u} option. \subsection{Auxiliary functions\label{sub:Auxiliary-functions}} \index{auxiliary functions} General syntax: \begin{vindent} \begin{verbatim} function [:] ( [:], ... )[:] { } \end{verbatim} \end{vindent} SystemTap scripts may define subroutines to factor out common work. Functions may take any number of scalar arguments, and must return a single scalar value. Scalars in this context are integers or strings. For more information on scalars, see Section~\ref{sub:Variables} and Section~\ref{sub:Data-types}\texttt{.} The following is an example function declaration. \begin{vindent} \begin{verbatim} function thisfn (arg1, arg2) { return arg1 + arg2 } \end{verbatim} \end{vindent} Note the general absence of type declarations, which are inferred by the translator. If desired, a function definition may include explicit type declarations for its return value, its arguments, or both. This is helpful for embedded-C functions. In the following example, the type inference engine need only infer the type of arg2, a string. \begin{vindent} \begin{verbatim} function thatfn:string(arg1:long, arg2) { return sprintf("%d%s", arg1, arg2) } \end{verbatim} \end{vindent} Functions may call others or themselves recursively, up to a fixed nesting limit. See Section~\ref{sub:SystemTap-safety}. Functions may be marked private using the private keyword to limit their scope to the tapset or user script file they are defined in. An example definition of a private function follows: \begin{vindent} \begin{verbatim} private function three:long () { return 3 } \end{verbatim} \end{vindent} Functions terminating without reaching an explicit return statement will return an implicit 0 or \verb+""+, determined by type inference. Functions may be overloaded during both runtime and compile time. Runtime overloading allows the executed function to be selected while the module is running based on runtime conditions and is achieved using the "next" statement in script functions and \texttt{STAP\_NEXT} macro for embedded-C functions. For example, \begin{vindent} \begin{verbatim} function f() { if (condition) next; print("first function") } function f() %{ STAP_NEXT; print("second function") %} function f() { print("third function") } \end{verbatim} \end{vindent} During a functioncall f(), the execution will transfer to the third function if condition evaluates to true and print "third function". Note that the second function is unconditionally nexted. Parameter overloading allows the function to be executed to be selected at compile time based on the number of arguments provided to the functioncall. For example, \begin{vindent} \begin{verbatim} function g() { print("first function") } function g(x) { print("second function") } g() -> "first function" g(1) -> "second function" \end{verbatim} \end{vindent} Note that runtime overloading does not occur in the above example, as exactly one function will be resolved for the functioncall. The use of a next statement inside a function while no more overloads remain will trigger a runtime exception Runtime overloading will only occur if the functions have the same arity, functions with the same name but different number of parameters are completely unrelated. Execution order is determined by a priority value which may be specified. If no explicit priority is specified, user script functions are given a higher priority than library functions. User script functions and library functions are assigned a default priority value of 0 and 1 respectively. Functions with the same priority are executed in declaration order. For example, \begin{vindent} \begin{verbatim} function f():3 { if (condition) next; print("first function") } function f():1 { if (condition) next; print("second function") } function f():2 { print("third function") } \end{verbatim} \end{vindent} \subsection{Embedded C\label{sub:Embedded-C}} \index{embedded C} SystemTap supports a \emph{guru\index{guru mode} mode} where script safety features such as code and data memory reference protection are removed. Guru mode is set by passing the \textbf{-g} option to the stap command. When in guru mode, the translator accepts C code enclosed between {}``\%\{'' and {}``\%\}'' markers in the top level of the script file. The embedded C code is transcribed verbatim, without analysis, in sequence, into the top level of the generated C code. Thus, guru mode may be useful for adding \#include instructions at the top level of the generated module, or providing auxiliary definitions for use by other embedded code. When in guru mode, embedded C code blocks are also allowed as the body of a SystemTap function (as described in Section~\ref{sub:Embedded-C-Functions}), and in place of any SystemTap expression. In the latter case, the code block must contain a valid expression according to C syntax. Here is an example of the various permitted methods of embedded C code inclusion: \begin{vindent} \begin{verbatim} %{ #include #include %} /* <-- top level */ /* Reads the char value stored at a given address: */ function __read_char:long(addr:long) %{ /* pure */ STAP_RETURN(kderef(sizeof(char), STAP_ARG_addr)); CATCH_DEREF_FAULT (); %} /* <-- function body */ /* Determines whether an IP packet is TCP, based on the iphdr: */ function is_tcp_packet:long(iphdr) { protocol = @cast(iphdr, "iphdr")->protocol return (protocol == %{ IPPROTO_TCP %}) /* <-- expression */ } \end{verbatim} \end{vindent} \subsection{Embedded C functions\label{sub:Embedded-C-Functions}} General syntax: \begin{vindent} \begin{verbatim} function : ( :, ... )[:] %{ %} \end{verbatim} \end{vindent} Embedded C code is permitted in a function body. In that case, the script language body is replaced entirely by a piece of C code enclosed between {}``\%\{'' and {}``\%\}'' markers. The enclosed code may do anything reasonable and safe as allowed by the C parser. There are a number of undocumented but complex safety constraints on concurrency, resource consumption and runtime limits that are applied to code written in the SystemTap language. These constraints are not applied to embedded C code, so use embedded C code with extreme caution. Be especially careful when dereferencing pointers. Use the kread() macro to dereference any pointers that could potentially be invalid or dangerous. If you are unsure, err on the side of caution and use kread(). The kread() macro is one of the safety mechanisms used in code generated by embedded C. It protects against pointer accesses that could crash the system. For example, to access the pointer chain \texttt{name = skb->dev->name} in embedded C, use the following code. \begin{vindent} \begin{verbatim} struct net_device *dev; char *name; dev = kread(&(skb->dev)); name = kread(&(dev->name)); \end{verbatim} \end{vindent} The memory locations reserved for input and output values are provided to a function using macros named \texttt{STAP\_ARG\_foo}\index{STAP_ARG_} (for arguments named \texttt{foo}) and \texttt{STAP\_RETVALUE}\index{STAP_RETVALUE}. Errors may be signalled with \texttt{STAP\_ERROR}. Output may be written with \texttt{STAP\_PRINTF}. The function may return early with \texttt{STAP\_RETURN}. Here are some examples: \begin{vindent} \begin{verbatim} function integer_ops:long (val) %{ STAP_PRINTF("%d\n", STAP_ARG_val); STAP_RETVALUE = STAP_ARG_val + 1; if (STAP_RETVALUE == 4) STAP_ERROR("wrong guess: %d", (int) STAP_RETVALUE); if (STAP_RETVALUE == 3) STAP_RETURN(0); STAP_RETVALUE ++; %} function string_ops:string (val) %{ strlcpy (STAP_RETVALUE, STAP_ARG_val, MAXSTRINGLEN); strlcat (STAP_RETVALUE, "one", MAXSTRINGLEN); if (strcmp (STAP_RETVALUE, "three-two-one")) STAP_RETURN("parameter should be three-two-"); %} function no_ops () %{ STAP_RETURN(); /* function inferred with no return value */ %} \end{verbatim} \end{vindent} The function argument and return value types should be stated if the translator cannot infer them from usage. The translator does not analyze the embedded C code within the function. You should examine C code generated for ordinary script language functions to write compatible embedded-C. Usually, all SystemTap functions and probes run with interrupts disabled, thus you cannot call functions that might sleep within the embedded C. \subsection{Embedded C pragma comments} Embedded C blocks may contain various markers to assert optimization and safety properties. \begin{itemize} \item \verb+/* pure */+ means that the C code has no side effects and may be elided entirely if its value is not used by script code. \item \verb+/* stable */+ means that the C code always has the same value (in any given probe handler invocation), so repeated calls may be automatically replaced by memoized values. Such functions must take no parameters, and also be \verb+/* pure */+. \item \verb+/* unprivileged */+ means that the C code is so safe that even unprivileged users are permitted to use it. (This is useful, in particular, to define an embedded-C function inside a tapset that may be used by unprivileged code.) \item \verb+/* myproc-unprivileged */+ means that the C code is so safe that even unprivileged users are permitted to use it, provided that the target of the current probe is within the user's own process. \item \verb+/* guru */+ means that the C code is so unsafe that a systemtap user must specify \verb+-g+ (guru mode) to use this, even if the C code is being exported from a tapset. \item \verb+/* unmangled */+, used in an embedded-C function, means that the legacy (pre-1.8) argument access syntax should be made available inside the function. Hence, in addition to \verb+STAP_ARG_foo+ and \verb+STAP_RETVALUE+ one can use \verb+THIS->foo+ and \verb+THIS->__retvalue+ respectively inside the function. This is useful for quickly migrating code written for SystemTap version 1.7 and earlier. \item \verb+/* unmodified-fnargs */+ in an embedded-C function, means that the function arguments are not modified inside the function body. \item \verb+/* string */+ in embedded-C expressions only, means that the expression has \verb+const char *+ type and should be treated as a string value, instead of the default long numeric. \end{itemize} \subsection{Accessing script level global variables} Script level global variables may be accessed in embedded-C functions and blocks. To read or write the global variable \textbf{var}, the \verb+/* pragma:read:var */+ or \verb+/* pragma:write:var */+ marker must be first placed in the embedded-C function or block. This provides the macros \verb+STAP_GLOBAL_GET_*+ and \verb+STAP_GLOBAL_SET_*+ macros to allow reading and writing, respectively. For example: \begin{vindent} \begin{verbatim} global var global var2[100] function increment() %{ /* pragma:read:var */ /* pragma:write:var */ /* pragma:read:var2 */ /* pragma:write:var2 */ STAP_GLOBAL_SET_var(STAP_GLOBAL_GET_var()+1); //var++ STAP_GLOBAL_SET_var2(1, 1, STAP_GLOBAL_GET_var2(1, 1)+1); //var2[1,1]++ %} \end{verbatim} \end{vindent} Variables may be read and set in both embedded-C functions and expressions. Strings returned from embedded-C code are decayed to pointers. Variables must also be assigned at script level to allow for type inference. Map assignment does not return the value written, so chaining does not work. \section{Probe points\label{sec:Probe-Points}} \index{probe points} \subsection{General syntax} \index{probe syntax} The general probe point syntax is a dotted-symbol sequence. This divides the event namespace into parts, analogous to the style of the Domain Name System. Each component identifier is parameterized by a string or number literal, with a syntax analogous to a function call. The following are all syntactically valid probe points. \begin{vindent} \begin{verbatim} kernel.function("foo") kernel.function("foo").return module{"ext3"}.function("ext3_*") kernel.function("no_such_function") ? syscall.* end timer.ms(5000) \end{verbatim} \end{vindent} Probes may be broadly classified into \emph{synchronous}\index{synchronous} or \emph{asynchronous}.\index{asynchronous} A synchronous event occurs when any processor executes an instruction matched by the specification. This gives these probes a reference point (instruction address) from which more contextual data may be available. Other families of probe points refer to asynchronous events such as timers, where no fixed reference point is related. Each probe point specification may match multiple locations, such as by using wildcards or aliases, and all are probed. A probe declaration may contain several specifications separated by commas, which are all probed. \subsubsection{Prefixes} \index{prefixes} Prefixes specify the probe target, such as \textbf{kernel}, \textbf{module}, \textbf{timer}, and so on. \subsubsection{Suffixes} \index{suffixes} Suffixes further qualify the point to probe, such as \textbf{.return} for the exit point of a probed function. The absence of a suffix implies the function entry point. \subsubsection{Wildcarded file names, function names} \index{wildcards} A component may include an asterisk ({*}) character, which expands to other matching probe points. An example follows. \begin{vindent} \begin{verbatim} kernel.syscall.* kernel.function("sys_*) \end{verbatim} \end{vindent} \subsubsection{Optional probe points\label{sub:Optional-probe-points}} \index{?} A probe point may be followed by a question mark (?) character, to indicate that it is optional, and that no error should result if it fails to expand. This effect passes down through all levels of alias or wildcard expansion. The following is the general syntax. \begin{vindent} \begin{verbatim} kernel.function("no_such_function") ? \end{verbatim} \end{vindent} \subsubsection{Brace expansion} \index{braceexpansion} Brace expansion is a mechanism which allows a list of probe points to be generated. It is very similar to shell expansion. A component may be surrounded by a pair of curly braces to indicate that the comma-separated sequence of one or more subcomponents will each constitute a new probe point. The braces may be arbitrarily nested. The ordering of expanded results is based on product order. The question mark (?), exclamation mark (!) indicators and probe point conditions may not be placed in any expansions that are before the last component. The following is an example of brace expansion. \begin{vindent} \begin{verbatim} syscall.{write,read} # Expands to syscall.write, syscall.read {kernel,module("nfs")}.function("nfs*")! # Expands to kernel.function("nfs*")!, module("nfs").function("nfs*")! \end{verbatim} \end{vindent} \subsection{Built-in probe point types (DWARF probes)} \index{built-in probes} \index{dwarf probes} \label{dwarfprobes} This family of probe points uses symbolic debugging information for the target kernel or module, as may be found in executables that have not been stripped, or in the separate \textbf{debuginfo} packages. They allow logical placement of probes into the execution path of the target by specifying a set of points in the source or object code. When a matching statement executes on any processor, the probe handler is run in that context. Points in a kernel are identified by module, source file, line number, function name or some combination of these. Here is a list of probe point specifications currently supported: \begin{vindent} \begin{verbatim} kernel.function(PATTERN) kernel.function(PATTERN).call kernel.function(PATTERN).return kernel.function(PATTERN).return.maxactive(VALUE) kernel.function(PATTERN).inline kernel.function(PATTERN).label(LPATTERN) module(MPATTERN).function(PATTERN) module(MPATTERN).function(PATTERN).call module(MPATTERN).function(PATTERN).return.maxactive(VALUE) module(MPATTERN).function(PATTERN).inline kernel.statement(PATTERN) kernel.statement(ADDRESS).absolute module(MPATTERN).statement(PATTERN) \end{verbatim} \end{vindent} The \textbf{.function} variant places a probe near the beginning of the named function, so that parameters are available as context variables. The \textbf{.return} variant places a probe at the moment of return from the named function, so the return value is available as the \$return context variable. The entry parameters are also available, though the function may have changed their values. Return probes may be further qualified with \textbf{.maxactive}, which specifies how many instances of the specified function can be probed simultaneously. You can leave off \textbf{.maxactive} in most cases, as the default (\textbf{KRETACTIVE}) should be sufficient. However, if you notice an excessive number of skipped probes, try setting \textbf{.maxactive} to incrementally higher values to see if the number of skipped probes decreases. The \textbf{.inline} modifier for \textbf{.function} filters the results to include only instances of inlined functions. The \textbf{.call} modifier selects the opposite subset. The \textbf{.exported} modifier filters the results to include only exported functions. Inline functions do not have an identifiable return point, so \textbf{.return} is not supported on \textbf{.inline} probes. The \textbf{.statement} variant places a probe at the exact spot, exposing those local variables that are visible there. In the above probe descriptions, MPATTERN stands for a string literal that identifies the loaded kernel module of interest and LPATTERN stands for a source program label. Both MPATTERN and LPATTERN may include asterisk ({*}), square brackets \char`\"{}{[}]\char`\"{}, and question mark (?) wildcards. PATTERN stands for a string literal that identifies a point in the program. It is composed of three parts: \begin{enumerate} \item The first part is the name of a function, as would appear in the nm program's output. This part may use the asterisk and question mark wildcard operators to match multiple names. \item The second part is optional, and begins with the ampersand (@) character. It is followed by the path to the source file containing the function, which may include a wildcard pattern, such as mm/slab{*}. In most cases, the path should be relative to the top of the linux source directory, although an absolute path may be necessary for some kernels. If a relative pathname doesn't work, try absolute. \item The third part is optional if the file name part was given. It identifies the line number in the source file, preceded by a ``:'' or ``+''. The line number is assumed to be an absolute line number if preceded by a ``:'', or relative to the entry of the function if preceded by a ``+''. All the lines in the function can be matched with ``:*''. A range of lines x through y can be matched with ``:x-y''. \end{enumerate} Alternately, specify PATTERN as a numeric constant to indicate a relative module address or an absolute kernel address. Some of the source-level variables, such as function parameters, locals, or globals visible in the compilation unit, are visible to probe handlers. Refer to these variables by prefixing their name with a dollar sign within the scripts. In addition, a special syntax allows limited traversal of structures, pointers, arrays, taking the address of a variable or pretty printing a whole structure. \texttt{\$var} refers to an in-scope variable var. If it is a type similar to an integer, it will be cast to a 64-bit integer for script use. Pointers similar to a string (char {*}) are copied to SystemTap string values by the \texttt{kernel\_string()} or \texttt{user\_string()} functions. \texttt{@var("varname")} is an alternative syntax for \texttt{\$varname}. It can also be used to access global variables in a particular compile unit (CU). \texttt{@var("varname@src/file.c")} refers to the global (either file local or external) variable varname defined when the file src/file.c was compiled. The CU in which the variable is resolved is the first CU in the module of the probe point which matches the given file name at the end and has the shortest file name path (e.g. given \texttt{@var("foo@bar/baz.c")} and CUs with file name paths \texttt{src/sub/module/bar/baz.c} and \texttt{src/bar/baz.c} the second CU will be chosen to resolve \texttt{foo}). \texttt{\$var->field} or \texttt{@var("var@file.c")->field} traverses a structure's field. The indirection operator may be repeated to follow additional levels of pointers. \texttt{\$var{[}N]} or \texttt{@var("var@file.c"){[}N]} indexes into an array. The index is given with a literal number. \texttt{\&\$var} or \texttt{\&@var("var@file.c")} provides the address of a variable as a long. It can also be used in combination with field access or array indexing to provide the address of a particular field or an element in an array with \texttt{\&var->field}, \texttt{\&@var("var@file.c"){[}N]} or a combination of those accessors. Using a single \texttt{\$} or a double \texttt{\$\$} suffix provides a swallow or deep string representation of the variable data type. Using a single \texttt{\$}, as in \texttt{\$var\$}, will provide a string that only includes the values of all basic type values of fields of the variable structure type but not any nested complex type values (which will be represented with \texttt{\{...\}}). Using a double \texttt{\$\$}, as in \texttt{@var("var")\$\$} will provide a string that also includes all values of nested data types. \texttt{\$\$vars} expands to a character string that is equivalent to \texttt{sprintf("parm1=\%x ... parmN=\%x var1=\%x ... varN=\%x", \$parm1, ..., \$parmN, \$var1, ..., \$varN)} \texttt{\$\$locals} expands to a character string that is equivalent to \texttt{sprintf("var1=\%x ... varN=\%x", \$var1, ..., \$varN)} \texttt{\$\$parms} expands to a character string that is equivalent to \texttt{sprintf("parm1=\%x ... parmN=\%x", \$parm1, ..., \$parmN)} \subsubsection{kernel.function, module().function} \index{kernel.function} \index{module().function} The \textbf{.function} variant places a probe near the beginning of the named function, so that parameters are available as context variables. General syntax: \begin{vindent} \begin{verbatim} kernel.function("func[@file]") module("modname").function("func[@file]") \end{verbatim} \end{vindent} Examples: \begin{vindent} \begin{verbatim} # Refers to all kernel functions with "init" or "exit" # in the name: kernel.function("*init*"), kernel.function("*exit*") # Refers to any functions within the "kernel/time.c" # file that span line 240: kernel.function("*@kernel/time.c:240") # Refers to all functions in the ext3 module: module("ext3").function("*") \end{verbatim} \end{vindent} \subsubsection{kernel.statement, module().statement} \index{kernel.statement} \index{module().statement} The \textbf{.statement} variant places a probe at the exact spot, exposing those local variables that are visible there. General syntax: \begin{vindent} \begin{verbatim} kernel.statement("func@file:linenumber") module("modname").statement("func@file:linenumber") \end{verbatim} \end{vindent} Example: \begin{vindent} \begin{verbatim} # Refers to the statement at line 296 within the # kernel/time.c file: kernel.statement("*@kernel/time.c:296") # Refers to the statement at line bio_init+3 within the fs/bio.c file: kernel.statement("bio_init@fs/bio.c+3") \end{verbatim} \end{vindent} \subsection{Function return probes} \index{return probes} The \texttt{.return} variant places a probe at the moment of return from the named function, so that the return value is available as the \$return context variable. The entry parameters are also accessible in the context of the return probe, though their values may have been changed by the function. Inline functions do not have an identifiable return point, so \texttt{.return} is not supported on \texttt{.inline} probes. \subsection{DWARF-less probing} \index{DWARF-less probing} In the absence of debugging information, you can still use the \emph{kprobe} family of probes to examine the entry and exit points of kernel and module functions. You cannot look up the arguments or local variables of a function using these probes. However, you can access the parameters by following this procedure: When you're stopped at the entry to a function, you can refer to the function's arguments by number. For example, when probing the function declared: \begin{vindent} \begin{verbatim} asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) \end{verbatim} \end{vindent} You can obtain the values of \texttt{fd}, \texttt{buf}, and \texttt{count}, respectively, as \texttt{uint\_arg(1)}, \texttt{pointer\_arg(2)}, and \texttt{ulong\_arg(3)}. In this case, your probe code must first call \texttt{asmlinkage()}, because on some architectures the asmlinkage attribute affects how the function's arguments are passed. When you're in a return probe, \texttt{\$return} isn't supported without DWARF, but you can call \texttt{returnval()} to get the value of the register in which the function value is typically returned, or call \texttt{returnstr()} to get a string version of that value. And at any code probepoint, you can call \texttt{{register("regname")}} to get the value of the specified CPU register when the probe point was hit. \texttt{u\_register("regname")} is like \texttt{register("regname")}, but interprets the value as an unsigned integer. SystemTap supports the following constructs: \begin{vindent} \begin{verbatim} kprobe.function(FUNCTION) kprobe.function(FUNCTION).return kprobe.module(NAME).function(FUNCTION) kprobe.module(NAME).function(FUNCTION).return kprobe.statement(ADDRESS).absolute \end{verbatim} \end{vindent} Use \textbf{.function} probes for kernel functions and \textbf{.module} probes for probing functions of a specified module. If you do not know the absolute address of a kernel or module function, use \textbf{.statement} probes. Do not use wildcards in \textit{FUNCTION} and \textit{MODULE} names. Wildcards cause the probe to not register. Also, statement probes are available only in guru mode. \subsection{Userspace probing} \index{userspace probing} \index{process} Support for userspace probing is supported on kernels that are configured to include the utrace or uprobes extensions. \subsubsection{Begin/end variants} \label{sec:beginendvariants} Constructs: \begin{vindent} \begin{verbatim} process.begin process("PATH").begin process(PID).begin process.thread.begin process("PATH").thread.begin process(PID).thread.begin process.end process("PATH").end process(PID).end process.thread.end process("PATH").thread.end process(PID).thread.end \end{verbatim} \end{vindent} The \texttt{.begin} variant is called when a new process described by \texttt{PID} or \texttt{PATH} is created. If no \texttt{PID} or \texttt{PATH} argument is specified (for example \texttt{process.begin}), the probe flags any new process being spawned. The \texttt{.thread.begin} variant is called when a new thread described by \texttt{PID} or \texttt{PATH} is created. The \texttt{.end} variant is called when a process described by \texttt{PID} or \texttt{PATH} dies. The \texttt{.thread.end} variant is called when a thread described by \texttt{PID} or \texttt{PATH} dies. \subsubsection{Syscall variants} \label{sec:syscallvariants} Constructs: \begin{vindent} \begin{verbatim} process.syscall process("PATH").syscall process(PID).syscall process.syscall.return process("PATH").syscall.return process(PID).syscall.return \end{verbatim} \end{vindent} The \texttt{.syscall} variant is called when a thread described by \texttt{PID} or \texttt{PATH} makes a system call. The system call number is available in the \texttt{\$syscall} context variable. The first six arguments of the system call are available in the \texttt{\$argN} parameter, for example \texttt{\$arg1}, \texttt{\$arg2}, and so on. The \texttt{.syscall.return} variant is called when a thread described by \texttt{PID} or \texttt{PATH} returns from a system call. The system call number is available in the \texttt{\$syscall} context variable. The return value of the system call is available in the \texttt{\$return} context variable. \subsubsection{Function/statement variants} \label{sec:function-statement} Constructs: \begin{vindent} \begin{verbatim} process("PATH").function("NAME") process("PATH").statement("*@FILE.c:123") process("PATH").function("*").return process("PATH").function("myfun").label("foo") \end{verbatim} \end{vindent} Full symbolic source-level probes in userspace programs and shared libraries are supported. These are exactly analogous to the symbolic DWARF-based kernel or module probes described previously and expose similar contextual \texttt{\$-variables}. See Section~\ref{dwarfprobes} for more information Here is an example of prototype symbolic userspace probing support: \begin{vindent} \begin{verbatim} # stap -e 'probe process("ls").function("*").call { log (probefunc()." ".$$parms) }' \ -c 'ls -l' \end{verbatim} \end{vindent} To run, this script requires debugging information for the named program and utrace support in the kernel. If you see a "pass 4a-time" build failure, check that your kernel supports utrace. \subsubsection{Absolute variant} \label{sec:absolutevariant} A non-symbolic probe point such as \texttt{process(PID).statement(ADDRESS).absolute} is analogous to \newline\texttt{kernel.statement(ADDRESS).absolute} in that both use raw, unverified virtual addresses and provide no \texttt{\$variables}. The target \texttt{PID} parameter must identify a running process and \texttt{ADDRESS} must identify a valid instruction address. All threads of the listed process will be probed. This is a guru mode probe. \subsubsection{Process probe paths} \label{sec:paths} For all process probes, \texttt{PATH} names refer to executables that are searched the same way that shells do: the explicit path specified if the path name begins with a slash (/) character sequence; otherwise \texttt{\$PATH} is searched. For example, the following probe syntax: \begin{vindent} \begin{verbatim} probe process("ls").syscall {} probe process("./a.out").syscall {} \end{verbatim} \end{vindent} works the same as: \begin{vindent} \begin{verbatim} probe process("/bin/ls").syscall {} probe process("/my/directory/a.out").syscall {} \end{verbatim} \end{vindent} If a process probe is specified without a \texttt{PID} or \texttt{PATH} parameter, all user threads are probed. However, if systemtap is invoked in target process mode, process probes are restricted to the process hierarchy associated with the target process. If stap is running in \texttt{--unprivileged} mode, only processes owned by the current user are selected. \subsubsection{Target process mode} \label{sec:targetprocessmode} Target process mode (invoked with \texttt{stap -c CMD} or \texttt{-x PID}) implicitly restricts all \texttt{process.*} probes to the given child process. It does not affect \texttt{kernel.*} or other probe types. The \texttt{CMD} string is normally run directly, rather than from a ``\texttt{/bin/sh -c}'' sub-shell, since utrace and uprobe probes receive a fairly "clean" event stream. If meta-characters such as redirection operators are present in \texttt{CMD}, ``\texttt{/bin/sh -c CMD}'' is still used, and utrace and uprobe probes will receive events from the shell. For example: \begin{vindent} \begin{verbatim} % stap -e 'probe process.syscall, process.end { printf("%s %d %s\n", execname(), pid(), pp())}' \ -c ls \end{verbatim} \end{vindent} Here is the output from this command: \begin{vindent} \begin{verbatim} ls 2323 process.syscall ls 2323 process.syscall ls 2323 process.end \end{verbatim} \end{vindent} If \texttt{PATH} names a shared library, all processes that map that shared library can be probed. If dwarf debugging information is installed, try using a command with this syntax: \begin{vindent} \begin{verbatim} probe process("/lib64/libc-2.8.so").function("....") { ... } \end{verbatim} \end{vindent} This command probes all threads that call into that library. Typing ``\texttt{stap -c CMD}'' or ``\texttt{stap -x PID}'' restricts this to the target command and descendants only. You can use \texttt{\$\$vars} and others. You can provide the location of debug information to the stap command with the \texttt{-d DIRECTORY} option. To qualify a probe point to a location in a library required by a particular process try using a command with this syntax: \begin{vindent} \begin{verbatim} probe process("...").library("...").function("....") { ... } \end{verbatim} \end{vindent} The library name may use wildcards. The first syntax in the following will probe the functions in the program linkage table of a particular process. The second syntax will also add the program linkage tables of libraries required by that process. .plt("...") can be specified to match particular plt entries. \begin{vindent} \begin{verbatim} probe process("...").plt { ... } probe process("...").plt process("...").library("...").plt { ... } \end{verbatim} \end{vindent} \subsubsection{Instruction probes} \label{sec:insnprobes} Constructs: \begin{vindent} \begin{verbatim} process("PATH").insn process(PID).insn process("PATH").insn.block process(PID).insn.block \end{verbatim} \end{vindent} The \texttt{process().insn} and \texttt{process().insn.block} probes inspect the process after each instruction or block of instructions is executed. These probes are not implemented on all architectures. If they are not implemented on your system, you will receive an error message when the script starts. The \texttt{.insn} probe is called for every single-stepped instruction of the process described by \texttt{PID} or \texttt{PATH}. The \texttt{.insn.block} probe is called for every block-stepped instruction of the process described by \texttt{PID} or \texttt{PATH}. To count the total number of instructions that a process executes, type a command similar to: \begin{vindent} \begin{verbatim} $ stap -e 'global steps; probe process("/bin/ls").insn {steps++} probe end {printf("Total instructions: %d\n", steps);}' \ -c /bin/ls \end{verbatim} \end{vindent} Using this feature will significantly slow process execution. \subsubsection{Static userspace probing} \label{sec:staticuserspace} You can probe symbolic static instrumentation compiled into programs and shared libraries with the following syntax: \begin{vindent} \begin{verbatim} process("PATH").mark("LABEL") \end{verbatim} \end{vindent} The \texttt{.mark} variant is called from a static probe defined in the application by \texttt{STAP\_PROBE1(handle,LABEL,arg1)}. \texttt{STAP\_PROBE1} is defined in the sdt.h file. The parameters are: \begin{tabular}{|l|r|c|} Parameter & Definition \\ \hline \texttt{handle} & the application handle \\ \hline \texttt{LABEL} & corresponds to the \texttt{.mark} argument \\ \hline \texttt{arg1} & the argument \\ \hline \end{tabular} Use \texttt{STAP\_PROBE1} for probes with one argument. Use \texttt{STAP\_PROBE2} for probes with 2 arguments, and so on. The arguments of the probe are available in the context variables \texttt{\$arg1}, \texttt{\$arg2}, and so on. As an alternative to the \texttt{STAP\_PROBE} macros, you can use the dtrace script to create custom macros. The sdt.h file also provides dtrace compatible markers through \texttt{DTRACE\_PROBE} and an associated python \texttt{dtrace} script. You can use these in builds based on dtrace that need dtrace -h or -G functionality. \subsection{Java probes} \index{Java probes} Support for probing Java methods is available using Byteman as a backend. Byteman is an instrumentation tool from the JBoss project which systemtap can use to monitor invocations for a specific method or line in a Java program. Systemtap does so by generating a Byteman script listing the probes to instrument and then invoking the Byteman \texttt{bminstall} utility. A custom option \texttt{-D OPTION} (see the Byteman documentation for more details) can be passed to bminstall by invoking systemtap with option \texttt{-J OPTION}. The systemtap option \texttt{-j} is also provided as a shorthand for \texttt{-J org.jboss.byteman.compile.to.bytecode}. This Java instrumentation support is currently a prototype feature with major limitations: Java probes attach only to one Java process at a time; other Java processes beyond the first one to be observed are ignored. Moreover, Java probing currently does not work across users; the stap script must run (with appropriate permissions) under the same user as the Java process being probed. (Thus a stap script under root currently cannot probe Java methods in a non-root-user Java process.) There are four probe point variants supported by the translator: \begin{vindent} \begin{verbatim} java("PNAME").class("CLASSNAME").method("PATTERN") java("PNAME").class("CLASSNAME").method("PATTERN").return java(PID).class("CLASSNAME").method("PATTERN") java(PID).class("CLASSNAME").method("PATTERN").return \end{verbatim} \end{vindent} The first two probe points refer to Java processes by the name of the Java process. The PATTERN parameter specifies the signature of the Java method to probe. The signature must consist of the exact name of the method, followed by a bracketed list of the types of the arguments, for instance \texttt{myMethod(int,double,Foo)}. Wildcards are not supported. The probe can be set to trigger at a specific line within the method by appending a line number with colon, just as in other types of probes: \texttt{myMethod(int,double,Foo):245}. The CLASSNAME parameter identifies the Java class the method belongs to, either with or without the package qualification. By default, the probe only triggers on descendants of the class that do not override the method definition of the original class. However, CLASSNAME can take an optional caret prefix, as in \verb+class("^org.my.MyClass")+, which specifies that the probe should also trigger on all descendants of MyClass that override the original method. For instance, every method with signature foo(int) in program org.my.MyApp can be probed at once using \begin{vindent} \begin{verbatim} java("org.my.MyApp").class("^java.lang.Object").method("foo(int)") \end{verbatim} \end{vindent} The last two probe points work analogously, but refer to Java processes by PID. (PIDs for already running processes can be obtained using the \texttt{jps} utility.) Context variables defined within java probes include \verb+$provider+ (which identifies the class providing the definition of the triggered method) and \verb+$name+ (which gives the signature of the method). Arguments to the method can be accessed using context variables \verb+$arg1$+ through \verb+$arg10+, for up to the first 10 arguments of a method. \subsection{PROCFS probes} \index{PROCFS probes} These probe points allow procfs pseudo-files in \texttt{/proc/systemtap/\textit{MODNAME}} to be created, read and written. Specify the name of the systemtap module as \texttt{\textit{MODNAME}}. There are four probe point variants supported by the translator: \begin{vindent} \begin{verbatim} procfs("PATH").read procfs("PATH").write procfs.read procfs.write \end{verbatim} \end{vindent} \texttt{PATH} is the file name to be created, relative to \texttt{/proc/systemtap/MODNAME}. If no \texttt{PATH} is specified (as in the last two variants in the previous list), \texttt{PATH} defaults to "command". When a user reads \texttt{/proc/systemtap/MODNAME/PATH}, the corresponding procfs read probe is triggered. Assign the string data to be read to a variable named \texttt{\$value}, as follows: \begin{vindent} \begin{verbatim} procfs("PATH").read { $value = "100\n" } \end{verbatim} \end{vindent} When a user writes into \texttt{/proc/systemtap/MODNAME/PATH}, the corresponding procfs write probe is triggered. The data the user wrote is available in the string variable named \texttt{\$value}, as follows: \begin{vindent} \begin{verbatim} procfs("PATH").write { printf("User wrote: %s", $value) } \end{verbatim} \end{vindent} \subsection{Marker probes} \index{marker probes} This family of probe points connects to static probe markers inserted into the kernel or a module. These markers are special macro calls in the kernel that make probing faster and more reliable than with DWARF-based probes. DWARF debugging information is not required to use probe markers. Marker probe points begin with a \texttt{kernel} prefix which identifies the source of the symbol table used for finding markers. The suffix names the marker itself: \texttt{mark.("MARK")}. The marker name string, which can contain wildcard characters, is matched against the names given to the marker macros when the kernel or module is compiled. Optionally, you can specify \texttt{format("FORMAT")}. Specifying the marker format string allows differentiation between two markers with the same name but different marker format strings. The handler associated with a marker probe reads any optional parameters specified at the macro call site named \texttt{\$arg1} through \texttt{\$argNN}, where \texttt{NN} is the number of parameters supplied by the macro. Number and string parameters are passed in a type-safe manner. The marker format string associated with a marker is available in \texttt{\$format}. The marker name string is available in \texttt{\$name}. Here are the marker probe constructs: \begin{vindent} \begin{verbatim} kernel.mark("MARK") kernel.mark("MARK").format("FORMAT") \end{verbatim} \end{vindent} For more information about marker probes, see \url{http://sourceware.org/systemtap/wiki/UsingMarkers}. \subsection{Tracepoints} \label{sec:tracepoints} \index{tracepoints} This family of probe points hooks to static probing tracepoints inserted into the kernel or kernel modules. As with marker probes, these tracepoints are special macro calls inserted by kernel developers to make probing faster and more reliable than with DWARF-based probes. DWARF debugging information is not required to probe tracepoints. Tracepoints have more strongly-typed parameters than marker probes. Tracepoint probes begin with \texttt{kernel}. The next part names the tracepoint itself: \texttt{trace("name")}. The tracepoint \texttt{name} string, which can contain wildcard characters, is matched against the names defined by the kernel developers in the tracepoint header files. The handler associated with a tracepoint-based probe can read the optional parameters specified at the macro call site. These parameters are named according to the declaration by the tracepoint author. For example, the tracepoint probe \texttt{kernel.trace("sched\_switch")} provides the parameters \texttt{\$rq}, \texttt{\$prev}, and \texttt{\$next}. If the parameter is a complex type such as a struct pointer, then a script can access fields with the same syntax as DWARF \texttt{\$target} variables. Tracepoint parameters cannot be modified; however, in guru mode a script can modify fields of parameters. The name of the tracepoint is available in \texttt{\$\$name}, and a string of \texttt{name=value} pairs for all parameters of the tracepoint is available in \texttt{\$\$vars} or \texttt{\$\$parms}. \subsection{Syscall probes} \label{sec:syscall} \index{syscall probes} The \texttt{syscall.*} aliases define several hundred probes. They use the following syntax: \begin{vindent} \begin{verbatim} syscall.NAME syscall.NAME.return \end{verbatim} \end{vindent} Generally, two probes are defined for each normal system call as listed in the syscalls(2) manual page: one for entry and one for return. System calls that never return do not have a corresponding \texttt{.return} probe. Each probe alias defines a variety of variables. Look at the tapset source code to find the most reliable source of variable definitions. Generally, each variable listed in the standard manual page is available as a script-level variable. For example, \texttt{syscall.open} exposes file name, flags, and mode. In addition, a standard suite of variables is available at most aliases, as follows: \begin{itemize} \item \texttt{argstr}: A pretty-printed form of the entire argument list, without parentheses. \item \texttt{name}: The name of the system call. \item \texttt{retstr}: For return probes, a pretty-printed form of the system call result. \end{itemize} Not all probe aliases obey all of these general guidelines. Please report exceptions that you encounter as a bug. \subsection{Timer probes} \index{timer probes} You can use intervals defined by the standard kernel jiffies\index{jiffies} timer to trigger probe handlers asynchronously. A \emph{jiffy} is a kernel-defined unit of time typically between 1 and 60 msec. Two probe point variants are supported by the translator: \begin{vindent} \begin{verbatim} timer.jiffies(N) timer.jiffies(N).randomize(M) \end{verbatim} \end{vindent} The probe handler runs every N jiffies. If the \texttt{randomize}\index{randomize} component is given, a linearly distributed random value in the range {[}-M \ldots{} +M] is added to N every time the handler executes. N is restricted to a reasonable range (1 to approximately 1,000,000), and M is restricted to be less than N. There are no target variables provided in either context. Probes can be run concurrently on multiple processors. Intervals may be specified in units of time. There are two probe point variants similar to the jiffies timer: \begin{vindent} \begin{verbatim} timer.ms(N) timer.ms(N).randomize(M) \end{verbatim} \end{vindent} Here, N and M are specified in milliseconds\index{milliseconds}, but the full options for units are seconds (s or sec), milliseconds (ms or msec), microseconds (us or usec), nanoseconds (ns or nsec), and hertz (hz). Randomization is not supported for hertz timers. The resolution of the timers depends on the target kernel. For kernels prior to 2.6.17, timers are limited to jiffies resolution, so intervals are rounded up to the nearest jiffies interval. After 2.6.17, the implementation uses hrtimers for greater precision, though the resulting resolution will be dependent upon architecture. In either case, if the randomize component is given, then the random value will be added to the interval before any rounding occurs. Profiling timers are available to provide probes that execute on all CPUs at each system tick. This probe takes no parameters, as follows. \begin{vindent} \begin{verbatim} timer.profile.tick \end{verbatim} \end{vindent} Full context information of the interrupted process is available, making this probe suitable for implementing a time-based sampling profiler. It is recommended to use the tapset probe \verb+timer.profile+ rather than \verb+timer.profile.tick+. This probe point behaves identically to \verb+timer.profile.tick+ when the underlying functionality is available, and falls back to using \verb+perf.sw.cpu_clock+ on some recent kernels which lack the corresponding profile timer facility. The following is an example of timer usage. \begin{vindent} \begin{verbatim} # Refers to a periodic interrupt, every 1000 jiffies: timer.jiffies(1000) # Fires every 5 seconds: timer.sec(5) # Refers to a periodic interrupt, every 1000 +/- 200 jiffies: timer.jiffies(1000).randomize(200) \end{verbatim} \end{vindent} \subsection{Special probe points} The probe points \texttt{begin} and \texttt{end} are defined by the translator to refer to the time of session startup and shutdown. There are no target variables available in either context. \subsubsection{begin} \index{begin} The \texttt{begin} probe is the start of the SystemTap session. All \texttt{begin} probe handlers are run during the startup of the session. \subsubsection{end} \index{end} The \texttt{end} probe is the end of the SystemTap session. All \texttt{end} probes are run during the normal shutdown of a session, such as in the aftermath of a SystemTap \texttt{exit} function call, or an interruption from the user. In the case of an shutdown triggered by error, \texttt{end} probes are not run. \subsubsection{error} \index{error} The \emph{error} probe point is similar to the end probe, except the probe handler runs when the session ends if an error occurred. In this case, an \texttt{end} probe is skipped, but each \texttt{error} probe is still attempted. You can use an \texttt{error} probe to clean up or perform a final action on script termination. Here is a simple example: \begin{vindent} \begin{verbatim} probe error { println ("Oops, errors occurred. Here's a report anyway.") foreach (coin in mint) { println (coin) } } \end{verbatim} \end{vindent} \subsubsection{begin, end, and error probe sequence} \index{probe sequence} \texttt{begin}, \texttt{end}, and \texttt{error} probes can be specified with an optional sequence number that controls the order in which they are run. If no sequence number is provided, the sequence number defaults to zero and probes are run in the order that they occur in the script file. Sequence numbers may be either positive or negative, and are especially useful for tapset writers who want to do initialization in a \texttt{begin} probe. The following are examples. \begin{vindent} \begin{verbatim} # In a tapset file: probe begin(-1000) { ... } # In a user script: probe begin { ... } \end{verbatim} \end{vindent} The user script \texttt{begin} probe defaults to sequence number zero, so the tapset \texttt{begin} probe will run first. \subsubsection{never} \index{never} The \texttt{never} probe point is defined by the translator to mean \emph{never}. Its statements are analyzed for symbol and type correctness, but its probe handler is never run. This probe point may be useful in conjunction with optional probes. See Section~\ref{sub:Optional-probe-points}. \section{Language elements\label{sec:Language-Elements}} \subsection{Identifiers} \index{identifiers} \emph{Identifiers} are used to name variables and functions. They are an alphanumeric sequence that may include the underscore (\_) and dollar sign (\$) characters. They have the same syntax as C identifiers, except that the dollar sign is also a legal character. Identifiers that begin with a dollar sign are interpreted as references to variables in the target software, rather than to SystemTap script variables. Identifiers may not start with a plain digit. \subsection{Data types\label{sub:Data-types}} \index{data types} The SystemTap language includes a small number of data types, but no type declarations. A variable's type is inferred\index{inference} from its use. To support this inference, the translator enforces consistent typing of function arguments and return values, array indices and values. There are no implicit type conversions between strings and numbers. Inconsistent type-related use of an identifier signals an error. \subsubsection{Literals} \index{literals} Literals are either strings or integers. Literal integers can be expressed as decimal, octal, or hexadecimal, using C notation. Type suffixes (e.g., \emph{L} or \emph{U}) are not used. \subsubsection{Integers\label{sub:Integers}} \index{integers} \index{numbers} Integers are decimal, hexadecimal, or octal, and use the same notation as in C. Integers are 64-bit signed quantities, although the parser also accepts (and wraps around) values above positive $2^{63}$ but below $2^{64}$. \subsubsection{Strings\label{sub:Strings}} \index{strings} Strings are enclosed in quotation marks ({}``string''), and pass through standard C escape codes with backslashes. A string literal may be split into several pieces, which are glued together, as follows. \begin{vindent} \begin{verbatim} str1 = "foo" "bar" /* --> becomes "foobar" */ str2 = "a good way to do a multi-line\n" "string literal" /* --> becomes "a good way to do a multi-line\nstring literal" */ str3 = "also a good way to " @1 " splice command line args" /* --> becomes "also a good way to foo splice command line args", assuming @1 is given as foo on the command line */ \end{verbatim} \end{vindent} Observe that script arguments can also be glued into a string literal. Strings are limited in length to MAXSTRINGLEN. For more information about this and other limits, see Section~\ref{sub:SystemTap-safety}. \subsubsection{Associative arrays} See Section~\ref{sec:Associative-Arrays} \subsubsection{Statistics} See Section~\ref{sec:Statistics} \subsection{Semicolons} \index{;} The semicolon is the null statement, or do nothing statement. It is optional, and useful as a separator between statements to improve detection of syntax errors and to reduce ambiguities in grammar. \subsection{Comments} \index{comments} Three forms of comments are supported, as follows. \begin{vindent} \begin{verbatim} # ... shell style, to the end of line // ... C++ style, to the end of line /* ... C style ... */ \end{verbatim} \end{vindent} \subsection{Whitespace} \index{whitespace} As in C, spaces, tabs, returns, newlines, and comments are treated as whitespace. Whitespace is ignored by the parser. \subsection{Expressions} \index{expressions} SystemTap supports a number of operators that use the same general syntax, semantics, and precedence as in C and awk. Arithmetic is performed per C rules for signed integers. If the parser detects division by zero or an overflow, it generates an error. The following subsections list these operators. \subsubsection{Binary numeric operators} \index{binary} \texttt{{*} / \% + - >\,{}> >\,{}>\,{}> <\,{}< \& \textasciicircum{} | \&\& ||} \subsubsection{Binary string operators} \index{binary} \texttt{\textbf{.}} (string concatenation) \subsubsection{Numeric assignment operators} \index{numeric} \texttt{= {*}= /= \%= += -= >\,{}>= <\,{}<= \&= \textasciicircum{}= |=} \subsubsection{String assignment operators} \texttt{= .=} \subsubsection{Unary numeric operators} \index{unary} \texttt{+ - ! \textasciitilde{} ++ -{}-} \subsubsection{Numeric \& string comparison, regular expression matching operators} \index{comparison} \texttt{< > <= >= == !=} \verb+=~+ \verb+!~+ The \verb+=~+ and \verb+!~+ operators perform regular expression matching. The second operand must be a string literal containing a syntactically valid regular expression. The \verb+=~+ operator returns {\tt 1} on a successful match and \texttt{0} on a failed match. The \verb+!~+ operator returns {\tt 1} on a failed match. The regular expression syntax supports most of the features of POSIX Extended Regular Expressions, except for subexpression reuse (\verb+\1+) functionality. After a successful match, the matched substring and subexpressions can be extracted using the \texttt{matched} tapset function. The \texttt{ngroups} tapset function returns the number of subexpressions in the last successfully matched regular expression. \subsubsection{Ternary operator\label{sub:Ternary-operator}} \index{?} \texttt{cond ? exp1 : exp2} \subsubsection{Grouping operator} \index{grouping} \texttt{( exp )} \subsubsection{Function call} \index{fn} General syntax: \texttt{fn ({[} arg1, arg2, ... ])} \subsubsection{\$ptr-\textgreater member} \index{pointer} \texttt{ptr} is a kernel pointer available in a probed context. \subsubsection{Pointer typecasting} \index{Pointer typecasting} \emph{Typecasting} is supported using the \texttt{@cast()} operator. A script can define a pointer type for a \emph{long} value, then access type members using the same syntax as with \texttt{\$target} variables. After a pointer is saved into a script integer variable, the translator loses the necessary type information to access members from that pointer. The \texttt{@cast()} operator tells the translator how to read a pointer. The following statement interprets \texttt{p} as a pointer to a struct or union named \texttt{type\_name} and dereferences the \texttt{member} value: \begin{vindent} \begin{verbatim} @cast(p, "type_name"[, "module"])->member \end{verbatim} \end{vindent} The optional \texttt{module} parameter tells the translator where to look for information about that type. You can specify multiple modules as a list with colon (\texttt{:}) separators. If you do not specify the module parameter, the translator defaults to either the probe module for dwarf probes or to \textit{kernel} for functions and all other probe types. The following statement retrieves the parent PID from a kernel task\_struct: \begin{vindent} \begin{verbatim} @cast(pointer, "task_struct", "kernel")->parent->tgid \end{verbatim} \end{vindent} The translator can create its own module with type information from a header surrounded by angle brackets (\texttt{< >}) if normal debugging information is not available. For kernel headers, prefix it with \texttt{kernel} to use the appropriate build system. All other headers are built with default GCC parameters into a user module. The following statements are examples. \begin{vindent} \begin{verbatim} @cast(tv, "timeval", "")->tv_sec @cast(task, "task_struct", "kernel")->tgid \end{verbatim} \end{vindent} In guru mode, the translator allows scripts to assign new values to members of typecasted pointers. Typecasting is also useful in the case of \texttt{void*} members whose type might be determinable at run time. \begin{vindent} \begin{verbatim} probe foo { if ($var->type == 1) { value = @cast($var->data, "type1")->bar } else { value = @cast($var->data, "type2")->baz } print(value) } \end{verbatim} \end{vindent} \subsubsection{\textless value\textgreater\ in \textless array\_name\textgreater} \index{index} This expression evaluates to true if the array contains an element with the specified index. \subsubsection{{[} \textless value\textgreater, ... ] in \textless array\_name\textgreater} The number of index values must match the number of indexes previously specified. \subsection{Literals passed in from the stap command line\label{sub:Literals-passed-in}} \index{literals} \emph{Literals} are either strings enclosed in double quotes ('' '') or integers. For information about integers, see Section~\ref{sub:Integers}. For information about strings, see Section~\ref{sub:Strings}. Script arguments at the end of a command line are expanded as literals. You can use these in all contexts where literals are accepted. A reference to a nonexistent argument number is an error. \subsubsection{\$1 \ldots{} \$\textless NN\textgreater\ for literal pasting} \index{\$} Use \texttt{\$1 \ldots{} \$} for pasting the entire argument string into the input stream, which will be further lexically tokenized. \subsubsection{@1 \ldots{} @\textless NN\textgreater\ for strings} Use \texttt{@1 \ldots{} @} for casting an entire argument as a string literal. \subsubsection{Examples} For example, if the following script named example.stp \begin{vindent} \begin{verbatim} probe begin { printf("%d, %s\n", $1, @2) } \end{verbatim} \end{vindent} is invoked as follows \begin{vindent} \begin{verbatim} # stap example.stp '5+5' mystring \end{verbatim} \end{vindent} then 5+5 is substituted for \$1 and \char`\"{}mystring\char`\"{} for @2. The output will be \begin{vindent} \begin{verbatim} 10, mystring \end{verbatim} \end{vindent} \subsection{Conditional compilation} \subsubsection{Conditions} \index{conditions} One of the steps of parsing is a simple preprocessing stage. The preprocessor supports conditionals with a general form similar to the ternary operator (Section~\ref{sub:Ternary-operator}). \begin{vindent} \begin{verbatim} %( CONDITION %? TRUE-TOKENS %) %( CONDITION %? TRUE-TOKENS %: FALSE-TOKENS %) \end{verbatim} \end{vindent} The CONDITION is a limited expression whose format is determined by its first keyword. The following is the general syntax. \begin{vindent} \begin{verbatim} %( %? [ %: ] %) \end{verbatim} \end{vindent} \subsubsection{Conditions based on available target variables} \index{defined target variable} The predicate @defined() is available for testing whether a particular \$variable/expression is resolvable at translation time. The following is an example of its use: \begin{vindent} \begin{verbatim} probe foo { if (@defined($bar)) log ("$bar is available here") } \end{verbatim} \end{vindent} \subsubsection{Conditions based on kernel version: kernel\_v, kernel\_vr} \index{kernel version} \index{kernel\_vr} \index{kernel\_v} If the first part of a conditional expression is the identifier \texttt{kernel\_v} or \texttt{kernel\_vr}, the second part must be one of six standard numeric comparison operators {}``\textless'', {}``\textless ='', {}``=='', {}``!='', {}``\textgreater'', or {}``\textgreater ='', and the third part must be a string literal that contains an RPM-style version-release value. The condition returns true if the version of the target kernel (as optionally overridden by the \textbf{-r} option) matches the given version string. The comparison is performed by the glibc function strverscmp. \texttt{kernel\_v} refers to the kernel version number only, such as {}``2.6.13\char`\"{}. \texttt{kernel\_vr} refers to the kernel version number including the release code suffix, such as {}``2.6.13-1.322FC3smp''. \subsubsection{Conditions based on architecture: arch} \index{arch} If the first part of the conditional expression is the identifier \texttt{arch} which refers to the processor architecture, then the second part is a string comparison operator ''=='' or ''!='', and the third part is a string literal for matching it. This comparison is a simple string equality or inequality. The currently supported architecture strings are i386, i686, x86\_64, ia64, s390, and powerpc. \subsubsection{Conditions based on privilege level: systemtap\_privilege} \index{systemtap\_privilege} If the first part of the conditional expression is the identifier \texttt{systemtap\_privilege} which refers to the privilege level the systemtap script is being compiled with, then the second part is a string comparison operator ''=='' or ''!='', and the third part is a string literal for matching it. This comparison is a simple string equality or inequality. The possible privilege strings to consider are \verb+"stapusr"+ for unprivileged scripts, and \verb+"stapsys"+ or \verb+"stapdev"+ for privileged scripts. (In general, to test for a privileged script it is best to use \verb+!= "stapusr"+.) This condition can be used to write scripts that can be run in both privileged and unprivileged modes, with additional functionality made available in the privileged case. \subsubsection{True and False Tokens} \index{tokens} TRUE-TOKENS and FALSE-TOKENS are zero or more general parser tokens, possibly including nested preprocessor conditionals, that are pasted into the input stream if the condition is true or false. For example, the following code induces a parse error unless the target kernel version is newer than 2.6.5. \begin{vindent} \begin{verbatim} %( kernel_v <= "2.6.5" %? **ERROR** %) # invalid token sequence \end{verbatim} \end{vindent} The following code adapts to hypothetical kernel version drift. \begin{vindent} \begin{verbatim} probe kernel.function ( %( kernel_v <= "2.6.12" %? "__mm_do_fault" %: %( kernel_vr == "2.6.13-1.8273FC3smp" %? "do_page_fault" %: UNSUPPORTED %) %)) { /* ... */ } %( arch == "ia64" %? probe syscall.vliw = kernel.function("vliw_widget") {} %) \end{verbatim} \end{vindent} The following code adapts to the presence of a kernel CONFIG option. \begin{vindent} \begin{verbatim} %( CONFIG_UTRACE == "y" %? probe process.syscall {} %) \end{verbatim} \end{vindent} \subsection{Preprocessor macros} This feature lets scripts eliminate some types of repetition. \subsubsection{Local macros} The preprocessor also supports a simple macro facility. Macros taking zero or more arguments are defined using the following construct: \begin{vindent} \begin{verbatim} @define NAME %( BODY %) @define NAME(PARAM_1, PARAM_2, ...) %( BODY %) \end{verbatim} \end{vindent} Macro arguments are referred to in the body by prefixing the argument name with an \texttt{@} symbol. Likewise, once defined, macros are invoked by prefixing the macro name with an \texttt{@} symbol: \begin{vindent} \begin{verbatim} @define foo %( x %) @define add(a,b) %( ((@a)+(@b)) %) @foo = @add(2,2) \end{verbatim} \end{vindent} Macro expansion is currently performed in a separate pass before conditional compilation. Therefore, both TRUE- and FALSE-tokens in conditional expressions will be macroexpanded regardless of how the condition is evaluated. This can sometimes lead to errors: \begin{vindent} \begin{verbatim} // The following results in a conflict: %( CONFIG_UTRACE == "y" %? @define foo %( process.syscall %) %: @define foo %( **ERROR** %) %) // The following works properly as expected: @define foo %( %( CONFIG_UTRACE == "y" %? process.syscall %: **ERROR** %) %) \end{verbatim} \end{vindent} The first example is incorrect because both \texttt{@define}s are evaluated in a pass prior to the conditional being evaluated. \subsubsection{Library macros} Normally, a macro definition is local to the file it occurs in. Thus, defining a macro in a tapset does not make it available to the user of the tapset. Publically available library macros can be defined by including \texttt{.stpm} files on the tapset search path. These files may only contain \texttt{@define} constructs, which become visible across all tapsets and user scripts. \section{Statement types\label{sec:Statement-Types}} Statements enable procedural control flow within functions and probe handlers. The total number of statements executed in response to any single probe event is limited to MAXACTION, which defaults to 1000. See Section~\ref{sub:SystemTap-safety}. \subsection{break and continue} \index{break} \index{continue} Use \texttt{break} or \texttt{continue} to exit or iterate the innermost nesting loop statement, such as within a \texttt{while, for,} or \texttt{foreach} statement. The syntax and semantics are the same as those used in C. \subsection{try/catch} \index{try} \index{catch} Use \texttt{try}/\texttt{catch} to handle most kinds of run-time errors within the script instead of aborting the probe handler in progress. The semantics are similar to C++ in that try/catch blocks may be nested. The error string may be captured by optionally naming a variable which is to receive it. \begin{vindent} \begin{verbatim} try { /* do something */ /* trigger error like kread(0), or divide by zero, or error("foo") */ } catch (msg) { /* omit (msg) entirely if not interested */ /* println("caught error ", msg) */ /* handle error */ } /* execution continues */ \end{verbatim} \end{vindent} \subsection{delete\label{sub:delete}} \index{delete} \texttt{delete} removes an element. The following statement removes from ARRAY the element specified by the index tuple. The value will no longer be available, and subsequent iterations will not report the element. It is not an error to delete an element that does not exist. \begin{vindent} \begin{verbatim} delete ARRAY[INDEX1, INDEX2, ...] \end{verbatim} \end{vindent} The following syntax removes all elements from ARRAY: \begin{vindent} \begin{verbatim} delete ARRAY \end{verbatim} \end{vindent} The following statement removes the value of SCALAR. Integers and strings are cleared to zero and null (\char`\"{}\char`\"{}) respectively, while statistics are reset to their initial empty state. \begin{vindent} \begin{verbatim} delete SCALAR \end{verbatim} \end{vindent} \subsection{EXP (expression)} \index{expression} An \texttt{expression} executes a string- or integer-valued expression and discards the value. \subsection{for} \index{for} General syntax: \begin{vindent} \begin{verbatim} for (EXP1; EXP2; EXP3) STMT \end{verbatim} \end{vindent} The \texttt{for} statement is similar to the \texttt{for} statement in C. The \texttt{for} expression executes EXP1 as initialization. While EXP2 is non-zero, it executes STMT, then the iteration expression EXP3. \subsection{foreach\label{sub:foreach}} \index{foreach} General syntax: \begin{vindent} \begin{verbatim} foreach (VAR in ARRAY) STMT \end{verbatim} \end{vindent} The \texttt{foreach} statement loops over each element of a named global array, assigning the current key to VAR. The array must not be modified within the statement. If you add a single plus (+) or minus (-) operator after the VAR or the ARRAY identifier, the iteration order will be sorted by the ascending or descending index or value. The following statement behaves the same as the first example, except it is used when an array is indexed with a tuple of keys. Use a sorting suffix on at most one VAR or ARRAY identifier. \begin{vindent} \begin{verbatim} foreach ([VAR1, VAR2, ...] in ARRAY) STMT \end{verbatim} \end{vindent} You can combine the first and second syntax to capture both the full tuple and the keys at the same time as follows. \begin{vindent} \begin{verbatim} foreach (VAR = [VAR1, VAR2, ...] in ARRAY) STMT \end{verbatim} \end{vindent} The following statement is the same as the first example, except that the \texttt{limit} keyword limits the number of loop iterations to EXP times. EXP is evaluated once at the beginning of the loop. \begin{vindent} \begin{verbatim} foreach (VAR in ARRAY limit EXP) STMT \end{verbatim} \end{vindent} \subsection{if} \index{if} General syntax: \begin{vindent} \begin{verbatim} if (EXP) STMT1 [ else STMT2 ] \end{verbatim} \end{vindent} The \texttt{if} statement compares an integer-valued EXP to zero. It executes the first STMT if non-zero, or the second STMT if zero. The \texttt{if} command has the same syntax and semantics as used in C. \subsection{next} \index{next} The \texttt{next} statement returns immediately from the enclosing probe handler. When used in functions, the execution will be immediately transferred to the next overloaded function. \subsection{; (null statement)} \index{;} \index{null statement} General syntax: \begin{vindent} \begin{verbatim} statement1 ; statement2 \end{verbatim} \end{vindent} The semicolon represents the null statement, or do nothing. It is useful as an optional separator between statements to improve syntax error detection and to handle certain grammar ambiguities. \subsection{return} \index{return} General syntax: \begin{vindent} \begin{verbatim} return EXP \end{verbatim} \end{vindent} The \texttt{return} statement returns the EXP value from the enclosing function. If the value of the function is not returned, then a return statement is not needed, and the function will have a special \emph{unknown} type with no return value. \subsection{\{ \} (statement block)} \index{\{ \}} \index{statement block} This is the statement block with zero or more statements enclosed within brackets. The following is the general syntax: \begin{vindent} \begin{verbatim} { STMT1 STMT2 ... } \end{verbatim} \end{vindent} The statement block executes each statement in sequence in the block. Separators or terminators are generally not necessary between statements. The statement block uses the same syntax and semantics as in C. \subsection{while} \index{while} General syntax: \begin{vindent} \begin{verbatim} while (EXP) STMT \end{verbatim} \end{vindent} The \texttt{while} statement uses the same syntax and semantics as in C. In the statement above, while the integer-valued EXP evaluates to non-zero, the parser will execute STMT. \section{Associative arrays\label{sec:Associative-Arrays}} \index{associative arrays} Associative arrays are implemented as hash tables with a maximum size set at startup. Associative arrays are too large to be created dynamically for individual probe handler runs, so they must be declared as global. The basic operations for arrays are setting and looking up elements. These operations are expressed in awk syntax: the array name followed by an opening bracket ({[}), a comma-separated list of up to nine index index expressions, and a closing bracket (]). Each index expression may be a string or a number, as long as it is consistently typed throughout the script. \subsection{Examples} \begin{vindent} \begin{verbatim} # Increment the named array slot: foo [4,"hello"] ++ # Update a statistic: processusage [uid(),execname()] ++ # Set a timestamp reference point: times [tid()] = get_cycles() # Compute a timestamp delta: delta = get_cycles() - times [tid()] \end{verbatim} \end{vindent} \subsection{Types of values} Array elements may be set to a number, a string, or an aggregate. The type must be consistent throughout the use of the array. The first assignment to the array defines the type of the elements. Unset array elements may be fetched and return a null value (zero or empty string) as appropriate, but they are not seen by a membership test. \subsection{Array capacity} Array sizes can be specified explicitly or allowed to default to the maximum size as defined by MAXMAPENTRIES. See Section~\ref{sub:SystemTap-safety} for details on changing MAXMAPENTRIES. You can explicitly specify the size of an array as follows: \begin{vindent} \begin{verbatim} global ARRAY[] \end{verbatim} \end{vindent} If you do not specify the size parameter, then the array is created to hold MAXMAPENTRIES number of elements. \subsection{Array wrapping\label{sub:Array-Wrapping}} Arrays may be wrapped using the percentage symbol (\%) causing previously entered elements to be overwritten if more elements are inserted than the array can hold. This works for both regular and statistics typed arrays. You can mark arrays for wrapping as follows: \begin{vindent} \begin{verbatim} global ARRAY1%[], ARRAY2% \end{verbatim} \end{vindent} \subsection{Iteration, foreach} \index{foreach} Like awk, SystemTap's foreach creates a loop that iterates over key tuples of an array, not only values. The iteration may be sorted by any single key or a value by adding an extra plus symbol (+) or minus symbol (-) to the code or limited to only a few elements with the limit keyword. The following are examples. \begin{vindent} \begin{verbatim} # Simple loop in arbitrary sequence: foreach ([a,b] in foo) fuss_with(foo[a,b]) # Loop in increasing sequence of value: foreach ([a,b] in foo+) { ... } # Loop in decreasing sequence of first key: foreach ([a-,b] in foo) { ... } # Print the first 10 tuples and values in the array in decreasing sequence foreach (v = [i,j] in foo- limit 10) printf("foo[%d,%s] = %d\n", i, j, v) \end{verbatim} \end{vindent} The \texttt{break} and \texttt{continue} statements also work inside foreach loops. Since arrays can be large but probe handlers must execute quickly, you should write scripts that exit iteration early, if possible. For simplicity, SystemTap forbids any modification of an array during iteration with a foreach. For a full description of \texttt{foreach} see subsection \ref{sub:foreach}. \subsection{Deletion} \index{delete} The \texttt{delete} statement can either remove a single element by index from an array or clear an entire array at once. See subsection \ref{sub:delete} for details and examples. \section{Statistics (aggregates)\label{sec:Statistics}} \index{aggregates} Aggregate instances are used to collect statistics on numerical values, when it is important to accumulate new data quickly and in large volume. These instances operate without exclusive locks, and store only aggregated stream statistics. Aggregates make sense only for global variables. They are stored individually or as elements of an associative array. For information about wrapping associative arrays with statistics elements, see section~\ref{sub:Array-Wrapping} \subsection{The aggregation (\textless\hspace{1 sp}\textless\hspace{1 sp}\textless) operator} \index{\textless\hspace{1 sp}\textless\hspace{1 sp}\textless} The aggregation operator is {}``\textless\hspace{1 sp}\textless\hspace{1 sp}\textless'', and its effect is similar to an assignment or a C++ output streaming operation. The left operand specifies a scalar or array-index \emph{l-value}, which must be declared global. The right operand is a numeric expression. The meaning is intuitive: add the given number as a sample to the set of numbers to compute their statistics. The specific list of statistics to gather is given separately by the extraction functions. The following is an example. \begin{vindent} \begin{verbatim} a <<< delta_timestamp writes[execname()] <<< count \end{verbatim} \end{vindent} \subsection{Extraction functions} \index{extraction} For each instance of a distinct extraction function operating on a given identifier, the translator computes a set of statistics. With each execution of an extraction function, the aggregation is computed for that moment across all processors. The first argument of each function is the same style of l-value as used on the left side of the aggregation operation. \subsection{Integer extractors} The following functions provide methods to extract information about aggregate. \subsubsection{@count(s)} \index{count} This statement returns the number of samples accumulated in aggregate s. \subsubsection{@sum(s)} \index{sum} This statement returns the total sum of all samples in aggregate s. \subsubsection{@min(s)} \index{min} This statement returns the minimum of all samples in aggregate s. \subsubsection{@max(s)} \index{max} This statement returns the maximum of all samples in aggregate s. \subsubsection{@avg(s)} \index{avg} This statement returns the average value of all samples in aggregate s. \subsection{Histogram extractors} \index{histograms} The following functions provide methods to extract histogram information. Printing a histogram with the print family of functions renders a histogram object as a tabular "ASCII art" bar chart. \subsubsection{@hist\_linear} \index{hist\_linear} The statement \texttt{@hist\_linear(v,L,H,W)} represents a linear histogram of aggregate \texttt{v}, where \emph{L} and \emph{H} represent the lower and upper end of a range of values and \emph{W} represents the width (or size) of each bucket within the range. The low and high values can be negative, but the overall difference (high minus low) must be positive. The width parameter must also be positive. In the output, a range of consecutive empty buckets may be replaced with a tilde (\textasciitilde{}) character. This can be controlled on the command line with -DHIST\_ELISION=\textless\hspace{1 sp}num\textgreater\hspace{1 sp}, where \textless\hspace{1 sp}num\textgreater\hspace{1 sp} specifies how many empty buckets at the top and bottom of the range to print. The default is 2. A \textless\hspace{1 sp}num\textgreater\hspace{1 sp} of 0 removes all empty buckets. A negative \textless\hspace{1 sp}num\textgreater\hspace{1 sp} disables removal. For example, if you specify -DHIST\_ELISION=3 and the histogram has 10 consecutive empty buckets, the first 3 and last 3 empty buckets will be printed and the middle 4 empty buckets will be represented by a tilde (\textasciitilde{}). The following is an example. \begin{vindent} \begin{verbatim} global reads probe netdev.receive { reads <<< length } probe end { print(@hist_linear(reads, 0, 10240, 200)) } \end{verbatim} \end{vindent} This generates the following output. \begin{samepage} \begin{vindent} \begin{verbatim} value |-------------------------------------------------- count 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1650 200 | 8 400 | 0 600 | 0 ~ 1000 | 0 1200 | 0 1400 | 1 1600 | 0 1800 | 0 \end{verbatim} \end{vindent} \end{samepage} This shows that 1650 network reads were of a size between 0 and 199 bytes, 8 reads were between 200 and 399 bytes, and 1 read was between 1200 and 1399 bytes. The tilde (\textasciitilde{}) character indicates the bucket for 800 to 999 bytes was removed because it was empty. Empty buckets for 2000 bytes and larger were also removed because they were empty. \subsubsection{@hist\_log} \index{hist\_log} The statement \texttt{@hist\_log(v)} represents a base-2 logarithmic histogram. Empty buckets are replaced with a tilde (\textasciitilde{}) character in the same way as \texttt{@hist\_linear()} (see above). The following is an example. \begin{vindent} \begin{verbatim} global reads probe netdev.receive { reads <<< length } probe end { print(@hist_log(reads)) } \end{verbatim} \end{vindent} This generates the following output. \begin{samepage} \begin{vindent} \begin{verbatim} value |-------------------------------------------------- count 8 | 0 16 | 0 32 | 254 64 | 3 128 | 2 256 | 2 512 | 4 1024 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16689 2048 | 0 4096 | 0 \end{verbatim} \end{vindent} \end{samepage} \subsection{Deletion} \index{delete} The \texttt{delete} statement (subsection \ref{sub:delete}) applied to an aggregate variable will reset it to the initial empty state. \section{Formatted output} \subsection{print} \index{print} General syntax: \begin{vindent} \begin{verbatim} print () \end{verbatim} \end{vindent} This function prints a single value of any type. \subsection{printf} \index{printf} General syntax: \begin{vindent} \begin{verbatim} printf (fmt:string, ...) \end{verbatim} \end{vindent} The printf function takes a formatting string as an argument, and a number of values of corresponding types, and prints them all. The format must be a literal string constant. The printf formatting directives are similar to those of C, except that they are fully checked for type by the translator. The formatting string can contain tags that are defined as follows: \begin{vindent} \begin{verbatim} %[flags][width][.precision][length]specifier \end{verbatim} \end{vindent} Where \texttt{specifier} is required and defines the type and the interpretation of the value of the corresponding argument. The following table shows the details of the specifier parameter: \begin{table}[H] \caption{printf specifier values} \begin{tabular}{|>{\raggedright}p{1in}|>{\raggedright}p{3.5in}|>{\raggedright}p{1.25in}|} \hline \textbf{Specifier}& \textbf{Output}& \textbf{Example}\tabularnewline \hline \hline d or i& Signed decimal& 392\tabularnewline \hline o& Unsigned octal& 610\tabularnewline \hline s& String& sample\tabularnewline \hline u& Unsigned decimal& 7235\tabularnewline \hline x& Unsigned hexadecimal (lowercase letters)& 7fa\tabularnewline \hline X& Unsigned hexadecimal (uppercase letters)& 7FA\tabularnewline \hline p& Pointer address& 0x0000000000bc614e\tabularnewline \hline b& Writes a binary value as text using the computer's native byte order. The field width specifies the number of bytes to write. Valid specifications are \%b, \%1b, \%2b, \%4b and \%8b. The default width is 8 (64-bits).& See below\tabularnewline \hline \%& A \% followed by another \% character will write \% to stdout.& \%\tabularnewline \hline \end{tabular} \end{table} The tag can also contain \texttt{flags}, \texttt{width}, \texttt{.precision} and \texttt{modifiers} sub-specifiers, which are optional and follow these specifications: \begin{table}[H] \caption{printf flag values} \begin{tabular}{|>{\raggedright}p{1.5in}|>{\raggedright}p{4.5in}|} \hline \textbf{Flags}& \textbf{Description}\tabularnewline \hline \hline - (minus sign)& Left-justify within the given field width. Right justification is the default (see \texttt{width} sub-specifier).\tabularnewline \hline + (plus sign)& Precede the result with a plus or minus sign even for positive numbers. By default, only negative numbers are preceded with a minus sign.\tabularnewline \hline (space)& If no sign is going to be written, a blank space is inserted before the value.\tabularnewline \hline \#& Used with \texttt{o}, \texttt{x} or \texttt{X} specifiers the value is preceded with \texttt{0}, \texttt{0x} or \texttt{0X} respectively for non-zero values.\tabularnewline \hline 0& Left-pads the number with zeroes instead of spaces, where padding is specified (see \texttt{width} sub-specifier).\tabularnewline \hline \end{tabular} \end{table} \begin{table}[H] \caption{printf width values} \begin{tabular}{|>{\raggedright}p{1.5in}|>{\raggedright}p{4.5in}|} \hline \textbf{Width}& \textbf{Description}\tabularnewline \hline \hline (number)& Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces. The value is not truncated even if the result is larger.\tabularnewline \hline \end{tabular} \end{table} % \begin{table}[H] \caption{printf precision values} \begin{tabular}{|>{\raggedright}p{1.5in}|>{\raggedright}p{4.5in}|} \hline \textbf{Precision}& \textbf{Description}\tabularnewline \hline \hline .number& For integer specifiers (\texttt{d, i, o, u, x, X}): \texttt{precision} specifies the minimum number of digits to be written. If the value to be written is shorter than this number, the result is padded with leading zeros. The value is not truncated even if the result is longer. A precision of 0 means that no character is written for the value 0. For s: this is the maximum number of characters to be printed. By default all characters are printed until the ending null character is encountered. When no \texttt{precision} is specified, the default is 1. If the period is specified without an explicit value for \texttt{precision}, 0 is assumed.\tabularnewline \hline \end{tabular} \end{table} \textbf{Binary Write Examples} The following is an example of using the binary write functions: \begin{vindent} \begin{verbatim} probe begin { for (i = 97; i < 110; i++) printf("%3d: %1b%1b%1b\n", i, i, i-32, i-64) exit() } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 97: aA! 98: bB" 99: cC# 100: dD$ 101: eE% 102: fF& 103: gG' 104: hH( 105: iI) 106: jJ* 107: kK+ 108: lL, 109: mM- \end{verbatim} \end{vindent} Another example: \begin{vindent} \begin{verbatim} stap -e 'probe begin{printf("%b%b", 0xc0dedbad, \ 0x12345678);exit()}' | hexdump -C \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 00000000 ad db de c0 00 00 00 00 78 56 34 12 00 00 00 00 |........xV4.....| 00000010 \end{verbatim} \end{vindent} Another example: \begin{vindent} \begin{verbatim} probe begin{ printf("%1b%1b%1blo %1b%1brld\n", 72,101,108,87,111) exit() } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} Hello World \end{verbatim} \end{vindent} \subsection{printd} \index{printd} General syntax: \begin{vindent} \begin{verbatim} printd (delimiter:string, ...) \end{verbatim} \end{vindent} This function takes a string delimiter and two or more values of any type, then prints the values with the delimiter interposed. The delimiter must be a literal string constant. For example: \begin{vindent} \begin{verbatim} printd("/", "one", "two", "three", 4, 5, 6) \end{verbatim} \end{vindent} prints: \begin{vindent} \begin{verbatim} one/two/three/4/5/6 \end{verbatim} \end{vindent} \subsection{printdln} \index{printdln} General syntax: \begin{vindent} \begin{verbatim} printdln (delimiter:string, ...) \end{verbatim} \end{vindent} This function operates like \texttt{printd}, but also appends a newline. \subsection{println} \index{println} General syntax: \begin{vindent} \begin{verbatim} println () \end{verbatim} \end{vindent} This function prints a single value like \texttt{print}, but also appends a newline. \subsection{sprint} \index{sprint} General syntax: \begin{vindent} \begin{verbatim} sprint:string () \end{verbatim} \end{vindent} This function operates like \texttt{print}, but returns the string rather than printing it. \subsection{sprintf} \index{sprintf} General syntax: \begin{vindent} \begin{verbatim} sprintf:string (fmt:string, ...) \end{verbatim} \end{vindent} This function operates like \texttt{printf}, but returns the formatted string rather than printing it. \section{Tapset-defined functions\label{sec:Predefined-Functions}} Unlike built-in functions, tapset-defined functions are implemented in tapset scripts. These are individually documented in the in \texttt{tapset::*(3stap)}, \texttt{function::*(3stap)}, and \texttt{probe::*(3stap)} man pages, and implemented under \texttt{/usr/share/systemtap/tapset}. \section{For Further Reference\label{sec:For-Further-Reference}} For more information, see: \begin{itemize} \item The SystemTap tutorial at \url{http://sourceware.org/systemtap/tutorial/} \item The SystemTap wiki at \url{http://sourceware.org/systemtap/wiki} \item The SystemTap documentation page at \url{http://sourceware.org/systemtap/documentation.html} \item From an unpacked source tarball or GIT directory, the examples in in the src/examples directory, the tapsets in the src/tapset directory, and the test scripts in the src/testsuite directory. \item The man pages for tapsets. For a list, run the command \texttt{{}``man -k tapset::}''. \item The man pages for individual probe points. For a list, run the command \texttt{{}``man -k probe::}''. \item The man pages for individual systemtap functions. For a list, run the command \texttt{{}``man -k function::}''. \end {itemize} \setcounter{secnumdepth}{0} \newpage{} \addcontentsline{toc}{section}{Index} \printindex{} \end{document} systemtap-4.2/doc/tutorial.tex000066400000000000000000001472561356460210500165630ustar00rootroot00000000000000% Copyright (C) 2005-2013 Red Hat Inc. % This file is part of systemtap, and is free software. You can % redistribute it and/or modify it under the terms of the GNU General % Public License (GPL); either version 2, or (at your option) any % later version. \documentclass[compatible]{article} \usepackage{html} \usepackage{graphicx} % \usepackage{moreverb} \usepackage{fancyvrb} \usepackage{listings} \usepackage{fullpage} \usepackage{fancybox} % \usepackage{nomencl} % \usepackage{geometry} % \geometry{letterpaper,text={7in,8.5in}} \usepackage{charter} \newenvironment{boxedminipage}%% Boxed minipage {\begin{makeimage}\begin{center}\begin{Sbox}\begin{minipage}}% {\end{minipage}\end{Sbox}\fbox{\TheSbox}\end{center}\end{makeimage}} \newcommand{\nomenclature}[2]{} % \usepackage{draftcopy} % ugly \bibliographystyle{plain} \makeglossary \parindent0.0cm \parskip0.2cm \begin{document} \begin{center} \LARGE {\bf Systemtap tutorial} \end{center} \hfill \begin{minipage}{2.5in} % contributors please add your names to the list Frank Ch. Eigler {\tt \small } \\ \hfill \today \end{minipage} \tableofcontents \section{Introduction} Systemtap is a tool that allows developers and administrators to write and reuse simple scripts to deeply examine the activities of a live Linux system. Data may be extracted, filtered, and summarized quickly and safely, to enable diagnoses of complex performance or functional problems. {\bf NOTE:} This tutorial does not describe every feature available in systemtap. Please see the individual {\verb+stap+} manual pages for the most up-to-date information. These may be available installed on your system, or at \verb+http://sourceware.org/systemtap/man/+. \nomenclature{script}{A simple programming language understood by systemtap.} The essential idea behind a systemtap script is to name {\em events}, and to give them {\em handlers}. Whenever a specified event occurs, the Linux kernel runs the handler as if it were a quick subroutine, then resumes. There are several kind of events, such as entering or exiting a function, a timer expiring, or the entire systemtap session starting or stopping. A handler is a series of script language statements that specify the work to be done whenever the event occurs. This work normally includes extracting data from the event context, storing them into internal variables, or printing results. \nomenclature{event}{An identifiable instant in the operating system's execution state, such as entry to a function, or expiry of a timer.} \nomenclature{session}{A complete run of a systemtap script program.} \nomenclature{handler}{A series of statements, written in script, which is to be performed whenever an event occurs.} \nomenclature{\tt .stp}{The standard file name extension for systemtap scripts.} Systemtap works by translating the script to C, running the system C compiler to create a kernel module from that. When the module is loaded, it activates all the probed events by hooking into the kernel. Then, as events occur on any processor, the compiled handlers run. Eventually, the session stops, the hooks are disconnected, and the module removed. This entire process is driven from a single command-line program, \verb+stap+. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat hello-world.stp probe begin { print ("hello world\n") exit () } # stap hello-world.stp hello world \end{verbatim} \end{boxedminipage} \label{fig:hello-world} \caption{A systemtap smoke test.} \end{figure} This paper assumes that you have installed systemtap and its prerequisite kernel development tools and debugging data, so that you can run the scripts such as the simple one in Figure~\ref{fig:hello-world}. Log on as \verb+root+, or even better, login as a user that is a member of \verb+stapdev+ group or as a user authorized to \verb+sudo+, before running systemtap. \begin{figure}[ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat strace-open.stp probe syscall.open { printf ("%s(%d) open (%s)\n", execname(), pid(), argstr) } probe timer.ms(4000) # after 4 seconds { exit () } # stap strace-open.stp vmware-guestd(2206) open ("/etc/redhat-release", O_RDONLY) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) df(3433) open ("/etc/ld.so.cache", O_RDONLY) df(3433) open ("/lib/tls/libc.so.6", O_RDONLY) df(3433) open ("/etc/mtab", O_RDONLY) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) \end{verbatim} \end{boxedminipage} \label{fig:strace-open} \caption{A taste of systemtap: a system-wide {\tt strace}, just for the {\tt open} system call.} \end{figure} \nomenclature{strace}{A standard ptrace-based command line tool to trace system call activity of a process.} \section{Tracing} The simplest kind of probe is simply to {\em trace} an event. \nomenclature{trace}{A compact textual record of an event occurrence.} This is the effect of inserting strategically located \verb+print+ statements into a program. This is often the first step of problem solving: explore by seeing a history of what has happened. This style of instrumentation is the simplest. It just asks systemtap to print something at each event. To express this in the script language, you need to say where to probe and what to print there. \subsection{Where to probe} Systemtap supports a number of built-in events. The library of scripts that comes with systemtap, each called a ``tapset'', may define additional ones defined in terms of the built-in family. {\bf See the \verb+stapprobes+ man page for details on these and many other probe point families.} \nomenclature{tapset}{A reusable script forming part of the automatically searched tapset library.} All these events are named using a unified syntax with dot-separated parameterized identifiers: \begin{tabular}{rl} \verb+begin+ & The startup of the systemtap session. \\ \verb+end+ & The end of the systemtap session. \\ \verb+kernel.function("sys_open")+ & The entry to the function named \verb+sys_open+ in the kernel. \\ \verb+syscall.close.return+ & The return from the \verb+close+ system call. \\ \verb+module("ext3").statement(0xdeadbeef)+ & The addressed instruction in the \verb+ext3+ filesystem driver. \\ \verb+timer.ms(200)+ & A timer that fires every 200 milliseconds. \\ \verb+timer.profile+ & A timer that fires periodically on every CPU. \\ \verb+perf.hw.cache_misses+ & A particular number of CPU cache misses have occurred. \\ \verb+procfs("status").read+ & A process trying to read a synthetic file. \\ \verb+process("a.out").statement("*@main.c:200")+ & Line 200 of the \verb+a.out+ program. \end{tabular} Let's say that you would like to trace all function entries and exits in a source file, say \verb+net/socket.c+ in the kernel. The \verb+kernel.function+ probe point lets you express that easily, since systemtap examines the kernel's debugging information to relate object code to source code. It works like a debugger: if you can name or place it, you can probe it. Use \verb+kernel.function("*@net/socket.c").call+ for the function entries\footnote{Without the {\tt .call} qualifier, inlined function instances are also probed, but they have no corresponding {\tt .return}.}, and \verb+kernel.function("*@net/socket.c").return+ for matching exits. Note the use of wildcards in the function name part, and the subsequent \verb+@FILENAME+ part. You can also put wildcards into the file name, and even add a colon (\verb+:+) and a line number, if you want to restrict the search that precisely. Since systemtap will put a separate probe in every place that matches a probe point, a few wildcards can expand to hundreds or thousands of probes, so be careful what you ask for. \nomenclature{debug information}{Data created by the compiler when the kernel or application was built, sometimes packaged into {\tt debuginfo} files, for use by a symbolic debugger.} \nomenclature{wildcard}{Presence of \verb+*+ globbing patterns in probe points.} Once you identify the probe points, the skeleton of the systemtap script appears. The \verb+probe+ keyword introduces a probe point, or a comma-separated list of them. The following \verb+{+ and \verb+}+ braces enclose the handler for all listed probe points. \begin{verbatim} probe kernel.function("*@net/socket.c") { } probe kernel.function("*@net/socket.c").return { } \end{verbatim} You can run this script as is, though with empty handlers there will be no output. Put the two lines into a new file. Run \verb+stap -v FILE+. Terminate it any time with \verb+^C+. (The \verb+-v+ option tells systemtap to print more verbose messages during its processing. Try the \verb+-h+ option to see more options.) \subsection{What to print} Since you are interested in each function that was entered and exited, a line should be printed for each, containing the function name. In order to make that list easy to read, systemtap should indent the lines so that functions called by other traced functions are nested deeper. To tell each single process apart from any others that may be running concurrently, systemtap should also print the process ID in the line. Systemtap provides a variety of such contextual data, ready for formatting. They usually appear as function calls within the handler, like you already saw in Figure~\ref{fig:strace-open}. {\bf See the \verb+function::*+ man pages for those functions and more defined in the tapset library}, but here's a sampling: \begin{tabular}{rl} \verb+tid()+ & The id of the current thread. \\ \verb+pid()+ & The process (task group) id of the current thread. \\ \verb+uid()+ & The id of the current user. \\ \verb+execname()+ & The name of the current process. \\ \verb+cpu()+ & The current cpu number. \\ \verb+gettimeofday_s()+ & Number of seconds since epoch. \\ \verb+get_cycles()+ & Snapshot of hardware cycle counter. \\ \verb+pp()+ & A string describing the probe point being currently handled. \\ \verb+ppfunc()+ & If known, the the function name in which this probe was placed. \\ \verb+$$vars+ & If available, a pretty-printed listing of all local variables in scope. \\ \verb+print_backtrace()+ & If possible, print a kernel backtrace. \\ \verb+print_ubacktrace()+ & If possible, print a user-space backtrace. \\ \end{tabular} The values returned may be strings or numbers. The \verb+print()+ built-in function accepts either as its sole argument. Or, you can use the C-style \verb+printf()+ built-in, whose formatting argument may include \verb+%s+ for a string, \verb+%d+ for a number. \verb+printf+ and other functions take comma-separated arguments. Don't forget a \verb+"\n"+ at the end. There exist more printing / formatting functions too. A particularly handy function in the tapset library is \verb+thread_indent+. Given an indentation delta parameter, it stores internally an indentation counter for each thread (\verb+tid()+), and returns a string with some generic trace data plus an appropriate number of indentation spaces. That generic data includes a timestamp (number of microseconds since the initial indentation for the thread), a process name and the thread id itself. It therefore gives an idea not only about what functions were called, but who called them, and how long they took. Figure~\ref{fig:socket-trace} shows the finished script. It lacks a call to the \verb+exit()+ function, so you need to interrupt it with \verb+^C+ when you want the tracing to stop. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat socket-trace.stp probe kernel.function("*@net/socket.c").call { printf ("%s -> %s\n", thread_indent(1), ppfunc()) } probe kernel.function("*@net/socket.c").return { printf ("%s <- %s\n", thread_indent(-1), ppfunc()) } # stap socket-trace.stp 0 hald(2632): -> sock_poll 28 hald(2632): <- sock_poll [...] 0 ftp(7223): -> sys_socketcall 1159 ftp(7223): -> sys_socket 2173 ftp(7223): -> __sock_create 2286 ftp(7223): -> sock_alloc_inode 2737 ftp(7223): <- sock_alloc_inode 3349 ftp(7223): -> sock_alloc 3389 ftp(7223): <- sock_alloc 3417 ftp(7223): <- __sock_create 4117 ftp(7223): -> sock_create 4160 ftp(7223): <- sock_create 4301 ftp(7223): -> sock_map_fd 4644 ftp(7223): -> sock_map_file 4699 ftp(7223): <- sock_map_file 4715 ftp(7223): <- sock_map_fd 4732 ftp(7223): <- sys_socket 4775 ftp(7223): <- sys_socketcall [...] \end{verbatim} \end{boxedminipage} \caption{Tracing and timing functions in {\tt net/sockets.c}.} \label{fig:socket-trace} \end{figure} \subsection{Exercises} \begin{enumerate} \item Use the \verb+-L+ option to systemtap to list all the kernel functions named with the word ``nit'' in them. \item Trace some system calls (use \verb+syscall.NAME+ and \verb+.return+ probe points), with the same \verb+thread_indent+ probe handler as in Figure~\ref{fig:socket-trace}. Print parameters using \verb+$$parms+ and \verb+$$return+. Interpret the results. \item Change figure~\ref{fig:socket-trace} by removing the \verb+.call+ modifier from the first probe. Note how function entry and function return now don't match anymore. This is because now the first probe will match both normal function entry and inlined functions. Try putting the \verb+.call+ modifier back and add another probe just for \verb+probe kernel.function("*@net/socket.c").inline+ What \verb+printf+ statement can you come up with in the probe handler to show the inlined function entries nicely in between the \verb+.call+ and \verb+.return+ thread indented output? \end{enumerate} \section{Analysis} Pages of generic tracing text may give you enough information for exploring a system. With systemtap, it is possible to analyze that data, to filter, aggregate, transform, and summarize it. Different probes can work together to share data. Probe handlers can use a rich set of control constructs to describe algorithms, with a syntax taken roughly from \verb+awk+. With these tools, systemtap scripts can focus on a specific question and provide a compact response: no \verb+grep+ needed. \nomenclature{awk}{A classic UNIX stream processing language.} \subsection{Basic constructs} Most systemtap scripts include conditionals, to limit tracing or other logic to those processes or users or {\em whatever} of interest. The syntax is simple: \begin{tabular}{rl} \verb+if (+{\em EXPR}\verb+)+ {\em STATEMENT} [\verb+else+ {\em STATEMENT}\verb+]+ & if/else statement \\ \verb+while (+{\em EXPR}\verb+)+ {\em STATEMENT} & while loop \\ \verb+for (+{\em A}\verb+;+ {\em B}\verb+;+ {\em C}\verb+)+ {\em STATEMENT} & for loop \\ \end{tabular} Scripts may use \verb+break+/\verb+continue+ as in C. Probe handlers can return early using \verb+next+ as in \verb+awk+. Blocks of statements are enclosed in \verb+{+ and \verb+}+. In systemtap, the semicolon (\verb+;+) is accepted as a null statement rather than as a statement terminator, so is only rarely\footnote{Use them between consecutive expressions that place unary {\tt +},{\tt -} or mixed pre/post {\tt ++},{\tt --} in an ambiguous manner.} necessary. Shell-style (\verb+#+), C-style (\verb+/* */+), and C++-style (\verb+//+) comments are all accepted. Expressions look like C or \verb+awk+, and support the usual operators, precedences, and numeric literals. Strings are treated as atomic values rather than arrays of characters. String concatenation is done with the dot (\verb+"a" . "b"+). Some examples: \begin{tabular}{rl} \verb+(uid() > 100)+ & probably an ordinary user \\ \verb+(execname() == "sed")+ & current process is sed \\ \verb+(cpu() == 0 && gettimeofday_s() > 1140498000)+ & after Feb. 21, 2006, on CPU 0 \\ \verb+"hello" . " " . "world"+ & a string in three easy pieces \\ \end{tabular} Variables may be used as well. Just pick a name, assign to it, and use it in expressions. They are automatically initialized and declared. The type of each identifier -- string vs. number -- is automatically inferred by systemtap from the kinds of operators and literals used on it. Any inconsistencies will be reported as errors. Conversion between string and number types is done through explicit function calls. \nomenclature{type}{A designation of each identifier such as a variable, or function, or array value or index, as containing a string or number.} \nomenclature{string}{A \verb+\0+-terminated character string of up to a fixed limit in length.} \nomenclature{number}{A 64-bit signed integer.} \nomenclature{type inference}{The automatic determination of the type of each variable, function parameter, array value and index, based on their use.} \begin{tabular}{rl} \verb+foo = gettimeofday_s()+ & foo is a number \\ \verb+bar = "/usr/bin/" . execname()+ & bar is a string \\ \verb|c++| & c is a number \\ \verb+s = sprint(2345)+ & s becomes the string "2345" \\ \end{tabular} By default, variables are local to the probe they are used in. That is, they are initialized, used, and disposed of at each probe handler invocation. To share variables between probes, declare them global anywhere in the script. Because of possible concurrency (multiple probe handlers running on different CPUs), each global variable used by a probe is automatically read- or write-locked while the handler is running. \nomenclature{global variable}{A scalar, array, or aggregate that was named in a \verb+global+ declaration, sharing that object amongst all probe handlers and functions executed during a systemtap session.} \nomenclature{locking}{An automated facility used by systemtap to protect global variables against concurrent modification and/or access.} \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat timer-jiffies.stp global count_jiffies, count_ms probe timer.jiffies(100) { count_jiffies ++ } probe timer.ms(100) { count_ms ++ } probe timer.ms(12345) { hz=(1000*count_jiffies) / count_ms printf ("jiffies:ms ratio %d:%d => CONFIG_HZ=%d\n", count_jiffies, count_ms, hz) exit () } # stap timer-jiffies.stp jiffies:ms ratio 30:123 => CONFIG_HZ=243 \end{verbatim} \end{boxedminipage} \caption{Experimentally measuring {\tt CONFIG\_HZ}.} \label{fig:timer-jiffies} \end{figure} \subsection{Target variables} A class of special ``target variables'' allow access to the probe point context. \nomenclature{target variable}{A value that may be extracted from the kernel context of the probe point, such as a parameter or local variable within a probed function.} In a symbolic debugger, when you're stopped at a breakpoint, you can print values from the program's context. In systemtap scripts, for those probe points that match with specific executable point (rather than an asynchronous event like a timer), you can do the same. In addition, you can take their address (the \verb+&+ operator), pretty-print structures (the \verb+$+ and \verb+$$+ suffix), pretty-print multiple variables in scope (the \verb+$$vars+ and related variables), or cast pointers to their types (the \verb+@cast+ operator), or test their existence / resolvability (the \verb+@defined+ operator). Read about these in the manual pages. To know which variables are likely to be available, you will need to be familiar with the kernel source you are probing. In addition, you will need to check that the compiler has not optimized those values into unreachable nonexistence. You can use \verb+stap -L PROBEPOINT+ to enumerate the variables available there. Let's say that you are trying to trace filesystem reads/writes to a particular device/inode. From your knowledge of the kernel, you know that two functions of interest could be \verb+vfs_read+ and \verb+vfs_write+. Each takes a \verb+struct file *+ argument, inside there is either a \verb+struct dentry *+ or \verb+struct path *+ which has a \verb+struct dentry *+. The \verb+struct dentry *+ contains a \verb+struct inode *+, and so on. Systemtap allows limited dereferencing of such pointer chains. Two functions, \verb+user_string+ and \verb+kernel_string+, can copy \verb+char *+ target variables into systemtap strings. Figure~\ref{fig:inode-watch} demonstrates one way to monitor a particular file (identified by device number and inode number). The script selects the appropriate variants of \verb+dev_nr+ and\verb+inode_nr+ based on the kernel version. This example also demonstrates passing numeric command-line arguments (\verb+$1+ etc.) into scripts. %$ \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat inode-watch.stp probe kernel.function ("vfs_write"), kernel.function ("vfs_read") { if (@defined($file->f_path->dentry)) { dev_nr = $file->f_path->dentry->d_inode->i_sb->s_dev inode_nr = $file->f_path->dentry->d_inode->i_ino } else { dev_nr = $file->f_dentry->d_inode->i_sb->s_dev inode_nr = $file->f_dentry->d_inode->i_ino } if (dev_nr == ($1 << 20 | $2) # major/minor device && inode_nr == $3) printf ("%s(%d) %s 0x%x/%u\n", execname(), pid(), ppfunc(), dev_nr, inode_nr) } # stat -c "%D %i" /etc/crontab fd03 133099 # stap inode-watch.stp 0xfd 3 133099 more(30789) vfs_read 0xfd00003/133099 more(30789) vfs_read 0xfd00003/133099 \end{verbatim} % $ \end{boxedminipage} \caption{Watching for reads/writes to a particular file.} \label{fig:inode-watch} \end{figure} \subsection{Functions} Functions are conveniently packaged reusable software: it would be a shame to have to duplicate a complex condition expression or logging directive in every placed it's used. So, systemtap lets you define functions of your own. Like global variables, systemtap functions may be defined anywhere in the script. They may take any number of string or numeric arguments (by value), and may return a single string or number. The parameter types are inferred as for ordinary variables, and must be consistent throughout the program. Local and global script variables are available, but target variables are {\em not}. That's because there is no specific debugging-level context associated with a function. \nomenclature{function}{A clump of parametrized script statements that may be repeatedly and recursively called from probe handlers and other functions.} A function is defined with the keyword \verb+function+ followed by a name. Then comes a comma-separated formal argument list (just a list of variable names). The \verb+{ }+-enclosed body consists of any list of statements, including expressions that call functions. Recursion is possible, up to a nesting depth limit. Figure~\ref{fig:functions} displays function syntax. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # Red Hat convention; see /etc/login.defs UID_MIN function system_uid_p (u) { return u < 500 } # kernel device number assembly macro function makedev (major,minor) { return major << 20 | minor } function trace_common () { printf("%d %s(%d)", gettimeofday_s(), execname(), pid()) # no return value necessary } function fibonacci (i) { if (i < 1) return 0 else if (i < 2) return 1 else return fibonacci(i-1) + fibonacci(i-2) } \end{verbatim} \end{boxedminipage} \caption{Some functions of dubious utility.} \label{fig:functions} \end{figure} \subsection{Arrays} Often, probes will want to share data that cannot be represented as a simple scalar value. Much data is naturally tabular in nature, indexed by some tuple of thread numbers, processor ids, names, time, and so on. Systemtap offers associative arrays for this purpose. These arrays are implemented as hash tables with a maximum size that is fixed at startup. Because they are too large to be created dynamically for individual probes handler runs, they must be declared as global. \nomenclature{array}{A global \verb+[+$k_1,k_2,\ldots,k_n\verb+]+\rightarrow value$ associative lookup table, with a string, number for each index; the value may be a string, number, or an aggregate.} \begin{tabular}{rl} \verb|global a| & declare global scalar or array variable \\ \verb|global b[400]| & declare array, reserving space for up to 400 tuples \\ \end{tabular} The basic operations for arrays are setting and looking up elements. These are expressed in \verb+awk+ syntax: the array name followed by an opening \verb+[+ bracket, a comma-separated list of index expressions, and a closing \verb+]+ bracket. Each index expression may be string or numeric, as long as it is consistently typed throughout the script. \nomenclature{arity}{Number of indexes to an array, or number of parameters to a function.} \begin{tabular}{rl} \verb|foo [4,"hello"] ++ | & increment the named array slot \\ \verb|processusage [uid(),execname()] ++| & update a statistic \\ \verb|times [tid()] = get_cycles()| & set a timestamp reference point \\ \verb|delta = get_cycles() - times [tid()]| & compute a timestamp delta \\ \end{tabular} Array elements that have not been set {\em may} be fetched, and return a dummy null value (zero or an empty string) as appropriate. However, assigning a null value does not delete the element: an explicit \verb|delete| statement is required. \nomenclature{null value}{A default initialized value for globals and array elements: a zero or an empty string, depending on type.} Systemtap provides syntactic sugar for these operations, in the form of explicit membership testing and deletion. \begin{tabular}{rl} \verb|if ([4,"hello"] in foo) { }| & membership test \\ \verb|delete times[tid()]| & deletion of a single element \\ \verb|delete times| & deletion of all elements \\ \end{tabular} One final and important operation is iteration over arrays. This uses the keyword \verb+foreach+. Like \verb+awk+, this creates a loop that {\em iterates over key tuples} of an array, not just {\em values}. In addition, the iteration may be {\em sorted} by any single key or the value by adding an extra \verb|+| or \verb|-| code. The \verb+break+ and \verb+continue+ statements work inside \verb+foreach+ loops, too. Since arrays can be large but probe handlers must not run for long, it is a good idea to exit iteration early if possible. The \verb+limit+ option in the \verb+foreach+ expression is one way. For simplicity, systemtap forbids any {\em modification} of an array while it is being iterated using a \verb+foreach+. \begin{tabular}{rp{0.4\textwidth}} \verb|foreach (x = [a,b] in foo) { fuss_with(x) }| & simple loop in arbitrary sequence \\ \verb|foreach ([a,b] in foo+ limit 5) { }| & loop in increasing sequence of value, stop after 5 \\ \verb|foreach ([a-,b] in foo) { }| & loop in decreasing sequence of first key \\ \end{tabular} \subsection{Aggregates} When we said above that values can only be strings or numbers, we lied a little. There is a third type: statistics aggregates, or aggregates for short. Instances of this type are used to collect statistics on numerical values, where it is important to accumulate new data quickly ({\em without} exclusive locks) and in large volume (storing only aggregated stream statistics). This type only makes sense for global variables, and may be stored individually or as elements of an array. \nomenclature{aggregate}{A special ``write-mostly'' data type used to efficiently store aggregated statistical values of a potentially huge data stream.} To add a value to a statistics aggregate, systemtap uses the special operator \verb+<<<+. Think of it like C++'s \verb+<<+ output streamer: the left hand side object accumulates the data sample given on the right hand side. This operation is efficient (taking a shared lock) because the aggregate values are kept separately on each processor, and are only aggregated across processors on request. \begin{verbatim} a <<< delta_timestamp writes[execname()] <<< count \end{verbatim} To read the aggregate value, special functions are available to extract a selected statistical function. {\em The aggregate value cannot be read by simply naming it as if it were an ordinary variable.} These operations take an exclusive lock on the respective globals, and should therefore be relatively rare. The simple ones are: \verb+@min+, \verb+@max+, \verb+@count+, \verb+@avg+, and \verb+@sum+, and evaluate to a single number. In addition, histograms of the data stream may be extracted using the \verb+@hist_log+ and \verb+@hist_linear+. These evaluate to a special sort of array that may at present\footnote{We anticipate support for indexing and looping using {\tt foreach} shortly.} only be printed. \nomenclature{extractor}{A function-like expression in a script that computes a single statistic for a given aggregate.} \begin{tabular}{rp{0.5\textwidth}} \verb+@avg(a)+ & the average of all the values accumulated into \verb+a+ \\ \verb+print(@hist_linear(a,0,100,10))+ & print an ``ascii art'' linear histogram of the same data stream, bounds $0 \ldots 100$, bucket width is $10$ \\ \verb|@count(writes["zsh"])| & the number of times ``zsh'' ran the probe handler \\ \verb+print(@hist_log(writes["zsh"]))+ & print an ``ascii art'' logarithmic histogram of the same data stream \\ \end{tabular} \subsection{Safety} \label{sec:safety} The full expressivity of the scripting language raises good questions of safety. Here is a set of Q\&A: \begin{description} \item{\bf What about infinite loops? recursion?} A probe handler is bounded in time. The C code generated by systemtap includes explicit checks that limit the total number of statements executed to a small number. A similar limit is imposed on the nesting depth of function calls. When either limit is exceeded, that probe handler cleanly aborts and signals an error. The systemtap session is normally configured to abort as a whole at that time. \item{\bf What about running out of memory?} No dynamic memory allocation whatsoever takes place during the execution of probe handlers. Arrays, function contexts, and buffers are allocated during initialization. These resources may run out during a session, and generally result in errors. \item{\bf What about locking?} If multiple probes seek conflicting locks on the same global variables, one or more of them will time out, and be aborted. Such events are tallied as ``skipped'' probes, and a count is displayed at session end. A configurable number of skipped probes can trigger an abort of the session. \item{\bf What about null pointers? division by zero?} The C code generated by systemtap translates potentially dangerous operations to routines that check their arguments at run time. These signal errors if they are invalid. Many arithmetic and string operations silently overflow if the results exceed representation limits. \item{\bf What about bugs in the translator? compiler?} While bugs in the translator, or the runtime layer certainly exist\footnote{See \tt http://sourceware.org/bugzilla}, our test suite gives some assurance. Plus, the entire generated C code may be inspected (try the \verb+-p3+ option). Compiler bugs are unlikely to be of any greater concern for systemtap than for the kernel as a whole. In other words, if it was reliable enough to build the kernel, it will build the systemtap modules properly too. \item{\bf Is that the whole truth?} In practice, there are several weak points in systemtap and the underlying kprobes system at the time of writing. Putting probes indiscriminately into unusually sensitive parts of the kernel (low level context switching, interrupt dispatching) has reportedly caused crashes in the past. We are fixing these bugs as they are found, and constructing a probe point ``blacklist'', but it is not complete. \nomenclature{blacklist}{A list of probe point patterns encoded into the translator or the kernel, where probing is prohibited for safety reasons.} \nomenclature{kprobes}{A breakpoint dispatching system for dynamic kernel probes, used by systemtap to implement some families of probe points.} \end{description} \subsection{Exercises} \begin{enumerate} \item Alter the last probe in \verb+timer-jiffies.stp+ to reset the counters and continue reporting instead of exiting. \item Write a script that, every ten seconds, displays the top five most frequent users of \verb+open+ system call during that interval. \item Write a script that experimentally measures the speed of the \verb+get_cycles()+ counter on each processor. \item Use any suitable probe point to get an approximate profile of process CPU usage: which processes/users use how much of each CPU. \end{enumerate} \section{Tapsets} After writing enough analysis scripts for yourself, you may become known as an expert to your colleagues, who will want to use your scripts. Systemtap makes it possible to share in a controlled manner; to build libraries of scripts that build on each other. In fact, all of the functions (\verb+pid()+, etc.) used in the scripts above come from tapset scripts like that. A ``tapset'' is just a script that designed for reuse by installation into a special directory. \subsection{Automatic selection} Systemtap attempts to resolve references to global symbols (probes, functions, variables) that are not defined within the script by a systematic search through the tapset library for scripts that define those symbols. Tapset scripts are installed under the default directory named \verb+/usr/share/systemtap/tapset+. A user may give additional directories with the \verb+-I DIR+ option. Systemtap searches these directories for script (\verb+.stp+) files. The search process includes subdirectories that are specialized for a particular kernel version and/or architecture, and ones that name only larger kernel families. Naturally, the search is ordered from specific to general, as shown in Figure~\ref{fig:tapset-search}. \nomenclature{tapset search path}{A list of subdirectories searched by systemtap for tapset scripts, allowing specialization by version architecture.} \begin{figure}[!ht] \begin{boxedminipage}{6in} \begin{verbatim} # stap -p1 -vv -e 'probe begin { }' > /dev/null Created temporary directory "/tmp/staplnEBh7" Searched '/usr/share/systemtap/tapset/2.6.15/i686/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/2.6.15/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/2.6/i686/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/2.6/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/i686/*.stp', match count 1 Searched '/usr/share/systemtap/tapset/*.stp', match count 12 Pass 1: parsed user script and 13 library script(s) in 350usr/10sys/375real ms. Running rm -rf /tmp/staplnEBh7 \end{verbatim} \end{boxedminipage} \caption{Listing the tapset search path.} \label{fig:tapset-search} \end{figure} When a script file is found that {\em defines} one of the undefined symbols, that {\em entire file} is added to the probing session being analyzed. This search is repeated until no more references can become satisfied. Systemtap signals an error if any are still unresolved. This mechanism enables several programming idioms. First, it allows some global symbols to be defined only for applicable kernel version/architecture pairs, and cause an error if their use is attempted on an inapplicable host. Similarly, the same symbol can be defined differently depending on kernels, in much the same way that different kernel \verb+include/asm/ARCH/+ files contain macros that provide a porting layer. Another use is to separate the default parameters of a tapset routine from its implementation. For example, consider a tapset that defines code for relating elapsed time intervals to process scheduling activities. The data collection code can be generic with respect to which time unit (jiffies, wall-clock seconds, cycle counts) it can use. It should have a default, but should not require additional run-time checks to let a user choose another. Figure~\ref{fig:tapset-default} shows a way. \begin{figure}[!ht] \begin{boxedminipage}{6in} \begin{verbatim} # cat tapset/time-common.stp global __time_vars function timer_begin (name) { __time_vars[name] = __time_value () } function timer_end (name) { return __time_value() - __time_vars[name] } # cat tapset/time-default.stp function __time_value () { return gettimeofday_us () } # cat tapset-time-user.stp probe begin { timer_begin ("bench") for (i=0; i<100; i++) ; printf ("%d cycles\n", timer_end ("bench")) exit () } function __time_value () { return get_ticks () } # override for greater precision \end{verbatim} \end{boxedminipage} \caption{Providing an overrideable default.} \label{fig:tapset-default} \end{figure} A tapset that exports only {\em data} may be as useful as ones that exports functions or probe point aliases (see below). Such global data can be computed and kept up-to-date using probes internal to the tapset. Any outside reference to the global variable would incidentally activate all the required probes. \subsection{Probe point aliases} \nomenclature{probe point alias}{A probe point that is defined in terms of another probe point.} Probe point aliases allow creation of new probe points from existing ones. This is useful if the new probe points are named to provide a higher level of abstraction. For example, the system-calls tapset defines probe point aliases of the form \verb+syscall.open+ etc., in terms of lower level ones like \verb+kernel.function("sys_open")+. Even if some future kernel renames \verb+sys_open+, the aliased name can remain valid. A probe point alias definition looks like a normal probe. Both start with the keyword \verb+probe+ and have a probe handler statement block at the end. But where a normal probe just lists its probe points, an alias creates a new name using the assignment (\verb+=+) operator. Another probe that names the new probe point will create an actual probe, with the handler of the alias {\em prepended}. This prepending behavior serves several purposes. It allows the alias definition to ``preprocess'' the context of the probe before passing control to the user-specified handler. This has several possible uses: \begin{tabular}{rl} \verb+if ($flag1 != $flag2) next+ & skip probe unless given condition is met \\ \verb+name = "foo"+ & supply probe-describing values \\ \verb+var = $var+ & extract target variable to plain local variable \\ %$ \end{tabular} Figure~\ref{fig:probe-alias} demonstrates a probe point alias definition as well as its use. It demonstrates how a single probe point alias can expand to multiple probe points, even to other aliases. It also includes probe point wildcarding. These functions are designed to compose sensibly. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat probe-alias.stp probe syscallgroup.io = syscall.open, syscall.close, syscall.read, syscall.write { groupname = "io" } probe syscallgroup.process = syscall.fork, syscall.execve { groupname = "process" } probe syscallgroup.* { groups [execname() . "/" . groupname] ++ } probe end { foreach (eg+ in groups) printf ("%s: %d\n", eg, groups[eg]) } global groups # stap probe-alias.stp 05-wait_for_sys/io: 19 10-udev.hotplug/io: 17 20-hal.hotplug/io: 12 X/io: 73 apcsmart/io: 59 [...] make/io: 515 make/process: 16 [...] xfce-mcs-manage/io: 3 xfdesktop/io: 5 [...] xmms/io: 7070 zsh/io: 78 zsh/process: 5 \end{verbatim} \end{boxedminipage} \caption{Classified system call activity.} \label{fig:probe-alias} \end{figure} \subsection{Embedded C} \label{embedded-c} Sometimes, a tapset needs provide data values from the kernel that cannot be extracted using ordinary target variables (\verb+$var+). %$ This may be because the values are in complicated data structures, may require lock awareness, or are defined by layers of macros. Systemtap provides an ``escape hatch'' to go beyond what the language can safely offer. In certain contexts, you may embed plain raw C in tapsets, exchanging power for the safety guarantees listed in section~\ref{sec:safety}. End-user scripts {\em may not} include embedded C code, unless systemtap is run with the \verb+-g+ (``guru'' mode) option. Tapset scripts get guru mode privileges automatically. \nomenclature{embedded C}{Special syntax permitting tapsets to include literal C code.} Embedded C can be the body of a script function. Instead enclosing the function body statements in \verb+{+ and \verb+}+, use \verb+%{+ and \verb+%}+. Any enclosed C code is literally transcribed into the kernel module: it is up to you to make it safe and correct. In order to take parameters and return a value, macros \verb+STAP_ARG_*+ and \verb+STAP_RETVALUE+ are made available. The familiar data-gathering functions \verb+pid()+, \verb+execname()+, and their neighbours are all embedded C functions. Figure~\ref{fig:embedded-C} contains another example. Since systemtap cannot examine the C code to infer these types, an optional\footnote{This is only necessary if the types cannot be inferred from other sources, such as the call sites.} annotation syntax is available to assist the type inference process. Simply suffix parameter names and/or the function name with \verb+:string+ or \verb+:long+ to designate the string or numeric type. In addition, the script may include a \verb+%{+ \verb+%}+ block at the outermost level of the script, in order to transcribe declarative code like \verb+#include +. These enable the embedded C functions to refer to general kernel types. There are a number of safety-related constraints that should be observed by developers of embedded C code. \begin{enumerate} \item Do not dereference pointers that are not known or testable valid. \item Do not call any kernel routine that may cause a sleep or fault. \item Consider possible undesirable recursion, where your embedded C function calls a routine that may be the subject of a probe. If that probe handler calls your embedded C function, you may suffer infinite regress. Similar problems may arise with respect to non-reentrant locks. \item If locking of a data structure is necessary, use a \verb+trylock+ type call to attempt to take the lock. If that fails, give up, do not block. \end{enumerate} \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat embedded-C.stp %{ #include #include %} function task_execname_by_pid:string (pid:long) %{ struct task_struct *p; struct list_head *_p, *_n; list_for_each_safe(_p, _n, ¤t->tasks) { p = list_entry(_p, struct task_struct, tasks); if (p->pid == (int)STAP_ARG_pid) snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%s", p->comm); } %} probe begin { printf("%s(%d)\n", task_execname_by_pid(target()), target()) exit() } # pgrep emacs 16641 # stap -g embedded-C.stp -x 16641 emacs(16641) \end{verbatim} \end{boxedminipage} \caption{Embedded C function.} \label{fig:embedded-C} \end{figure} \subsection{Naming conventions} Using the tapset search mechanism just described, potentially many script files can become selected for inclusion in a single session. This raises the problem of name collisions, where different tapsets accidentally use the same names for functions/globals. This can result in errors at translate or run time. To control this problem, systemtap tapset developers are advised to follow naming conventions. Here is some of the guidance. \nomenclature{naming convention}{Guidelines for naming variables and functions to prevent unintentional duplication.} \begin{enumerate} \item Pick a unique name for your tapset, and substitute it for {\em TAPSET} below. \item Separate identifiers meant to be used by tapset users from those that are internal implementation artifacts. \item Document the first set in the appropriate \verb+man+ pages. \item Prefix the names of external identifiers with {\em TAPSET}\_ if there is any likelihood of collision with other tapsets or end-user scripts. \item Prefix any probe point aliases with an appropriate prefix. \item Prefix the names of internal identifiers with \_\_{\em TAPSET}\_. \end{enumerate} \subsection{Exercises} \begin{enumerate} \item Write a tapset that implements deferred and ``cancelable'' logging. Export a function that enqueues a text string (into some private array), returning an id token. Include a timer-based probe that periodically flushes the array to the standard log output. Export another function that, if the entry was not already flushed, allows a text string to be cancelled from the queue. One might speculate that similar functions and tapsets exist. \item Create a ``relative timestamp'' tapset with functions return all the same values as the ones in the timestamp tapset, except that they are made relative to the start time of the script. \item Create a tapset that exports a global array that contains a mapping of recently seen process ID numbers to process names. Intercept key system calls (\verb+execve+?) to update the list incrementally. \item Send your tapset ideas to the mailing list! \end{enumerate} \section{Further information} For further information about systemtap, several sources are available. There are \verb+man+ pages: \begin{tabular}{rl} \verb+stap+ & systemtap program usage, language summary \\ \verb+stappaths+ & your systemtap installation paths \\ \verb+stapprobes+ & probes / probe aliases provided by built-in tapsets \\ \verb+stapex+ & a few basic example scripts \\ \verb+tapset::*+ & summaries of the probes and functions in each tapset \\ \verb+probe::*+ & detailed descriptions of each probe \\ \verb+function::*+ & detailed descriptions of each function \end{tabular} There is much more documentation and sample scripts included. You may find them under \verb+/usr/share/doc/systemtap*/+. Then, there is the source code itself. Since systemtap is {\em free software}, you should have available the entire source code. The source files in the \verb+tapset/+ directory are also packaged along with the systemtap binary. Since systemtap reads these files rather than their documentation, they are the most reliable way to see what's inside all the tapsets. Use the \verb+-v+ (verbose) command line option, several times if you like, to show inner workings. \nomenclature{free software}{Software licensed under terms such as the GNU GPL, which aims to enforce certain specified user freedoms such as study, modification, and sharing.} Finally, there is the project web site (\verb+http://sourceware.org/systemtap/+) with several articles, an archived public mailing list for users and developers (\verb+systemtap@sourceware.org+), IRC channels, and a live GIT source repository. Come join us! \appendix \section{Glossary} % \renewcommand{\nomname}{} % \printglossary % \begin{htmlonly} {\em Sorry, no glossary available.} % \end{htmlonly} \section{Errors} We explain some common systemtap error messages in this section. Most error messages include line/character numbers with which one can locate the precise location of error in the script code. There is sometimes a subsequent or prior line that elaborates. {\large {\em error} {\tt at:} {\em filename}:{\em line}:{\em column}: {\em details}} \subsection{Parse errors} \begin{description} \item{\bf parse error: expected {\em foo}, saw {\em bar} $\ldots$} \\ The script contained a grammar error. A different type of construct was expected in the given context. \item{\bf parse error: embedded code in unprivileged script} \\ The script contained unsafe constructs such as embedded C (section \ref{embedded-c}), but was run without the \verb+-g+ (guru mode) option. Confirm that the constructs are used safely, then try again with \verb+-g+. \end{description} \subsection{Type errors} \begin{description} \item{\bf semantic error: type mismatch for identifier '{\em foo}' $\ldots$ string vs. long} \\ In this case, the identifier {\em foo} was previously inferred as a numeric type (``long''), but at the given point is being used as a string. Similar messages appear if an array index or function parameter slot is used with conflicting types. \item{\bf semantic error: unresolved type for identifier '{\em foo}'} \\ The identifier {\em foo} was used, for example in a \verb+print+, but without any operations that could assign it a type. Similar messages may appear if a symbol is misspelled by a typo. \item{\bf semantic error: Expecting symbol or array index expression} \\ Something other than an assignable lvalue was on the left hand sign of an assignment. \end{description} \subsection{Symbol errors} \begin{description} \item{\bf while searching for arity {\em N} function, semantic error: unresolved function call} \\ The script calls a function with {\em N} arguments that does not exist. The function may exist with different arity. \item{\bf semantic error: array locals not supported: $\ldots$} \\ An array operation is present for which no matching global declaration was found. Similar messages appear if an array is used with inconsistent arities. \item{\bf semantic error: variable '{\em foo}' modified during 'foreach'} \\ The array {\em foo} is being modified (being assigned to or deleted from) within an active \verb+foreach+ loop. This invalid operation is also detected within a function called from within the loop. \end{description} \subsection{Probing errors } \begin{description} \item{\bf semantic error: probe point mismatch at position {\em N}, while resolving probe point {\em foo}} \\ A probe point was named that neither directly understood by systemtap, nor defined as an alias by a tapset script. The divergence from the ``tree'' of probe point namespace is at position {\em N} (starting with zero at left). \item{\bf semantic error: no match for probe point, while resolving probe point {\em foo}} \\ A probe point cannot be resolved for any of a variety of reasons. It may be a debuginfo-based probe point such as \verb+kernel.function("foobar")+ where no \verb+foobar+ function was found. This can occur if the script specifies a wildcard on function names, or an invalid file name or source line number. \item{\bf semantic error: unresolved target-symbol expression} \\ A target variable was referred to in a probe handler that was not resolvable. Or, a target variable is not valid at all in a context such as a script function. This variable may have been elided by an optimizing compiler, or may not have a suitable type, or there might just be an annoying bug somewhere. Try again with a slightly different probe point (use \verb+statement()+ instead of \verb+function()+) to search for a more cooperative neighbour in the same area. \item{\bf semantic error: libdwfl failure $\ldots$} \\ There was a problem processing the debugging information. It may simply be missing, or may have some consistency / correctness problems. Later compilers tend to produce better debugging information, so if you can upgrade and recompile your kernel/application, it may help. \item{\bf semantic error: cannot find {\em foo} debuginfo} \\ Similarly, suitable debugging information was not found. Check that your kernel build/installation includes a matching version of debugging data. \end{description} \subsection{Runtime errors} Usually, run-time errors cause a script to terminate. Some of these may be caught with the \verb+try { ... } catch { ... }+ construct. \begin{description} \item{\bf WARNING: Number of errors: {\em N}, skipped probes: {\em M}} \\ Errors and/or skipped probes occurred during this run. \nomenclature{skipped probe}{A probe handler that should have run but couldn't, due to contention or temporary resource problems.} \item{\bf division by 0} \\ The script code performed an invalid division. \item{\bf aggregate element not found} \\ An statistics extractor function other than \verb+@count+ was invoked on an aggregate that has not had any values accumulated yet. This is similar to a division by zero. \item{\bf aggregation overflow} \\ An array containing aggregate values contains too many distinct key tuples at this time. \item{\bf MAXNESTING exceeded} \\ Too many levels of function call nesting were attempted. \item{\bf MAXACTION exceeded} \\ The probe handler attempted to execute too many statements. \item{\bf kernel/user string copy fault at {\em 0xaddr}} \\ The probe handler attempted to copy a string from kernel or user space at an invalid address. \item{\bf pointer dereference fault} \\ There was a fault encountered during a pointer dereference operation such as a target variable evaluation. \end{description} \section{Acknowledgments} The author thanks Martin Hunt, Will Cohen, and Jim Keniston for improvement advice for this paper. \end{document} systemtap-4.2/doc/tutorial/000077500000000000000000000000001356460210500160225ustar00rootroot00000000000000systemtap-4.2/doc/tutorial/embedded-C.stp000066400000000000000000000007061356460210500204660ustar00rootroot00000000000000%{ #include #include %} function task_execname_by_pid:string (pid:long) %{ struct task_struct *p; struct list_head *_p, *_n; list_for_each_safe(_p, _n, ¤t->tasks) { p = list_entry(_p, struct task_struct, tasks); if (p->pid == (int)STAP_ARG_pid) snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%s", p->comm); } %} probe begin { printf("%s(%d)\n", task_execname_by_pid(target()), target()) exit() } systemtap-4.2/doc/tutorial/functions.stp000066400000000000000000000006551356460210500205700ustar00rootroot00000000000000# Red Hat convention; see /etc/login.defs UID_MIN function system_uid_p (u) { return u < 500 } # kernel device number assembly macro function makedev (major,minor) { return major << 20 | minor } function trace_common () { printf("%d %s(%d)", gettimeofday_s(), execname(), pid()) # no return value } function fibonacci (i) { if (i < 1) return 0 else if (i < 2) return 1 else return fibonacci(i-1) + fibonacci(i-2) } systemtap-4.2/doc/tutorial/hello-world.stp000066400000000000000000000000651356460210500210030ustar00rootroot00000000000000probe begin { print ("hello world\n") exit () } systemtap-4.2/doc/tutorial/inode-watch.stp000066400000000000000000000007761356460210500207660ustar00rootroot00000000000000probe kernel.function ("vfs_write"), kernel.function ("vfs_read") { if (@defined($file->f_path->dentry)) { dev_nr = $file->f_path->dentry->d_inode->i_sb->s_dev inode_nr = $file->f_path->dentry->d_inode->i_ino } else { dev_nr = $file->f_dentry->d_inode->i_sb->s_dev inode_nr = $file->f_dentry->d_inode->i_ino } if (dev_nr == ($1 << 20 | $2) # major/minor device && inode_nr == $3) printf ("%s(%d) %s 0x%x/%u\n", execname(), pid(), probefunc(), dev_nr, inode_nr) } systemtap-4.2/doc/tutorial/probe-alias.stp000066400000000000000000000005701356460210500207520ustar00rootroot00000000000000probe syscallgroup.io = syscall.open, syscall.close, syscall.read, syscall.write { groupname = "io" } probe syscallgroup.process = syscall.fork, syscall.execve { groupname = "process" } probe syscallgroup.* { groups [execname() . "/" . groupname] ++ } probe end { foreach (eg+ in groups) printf ("%s: %d\n", eg, groups[eg]) } global groups systemtap-4.2/doc/tutorial/socket-trace.stp000066400000000000000000000003231356460210500211340ustar00rootroot00000000000000probe kernel.function("*@net/socket.c").call { printf ("%s -> %s\n", thread_indent(1), probefunc()) } probe kernel.function("*@net/socket.c").return { printf ("%s <- %s\n", thread_indent(-1), probefunc()) } systemtap-4.2/doc/tutorial/strace-open.stp000066400000000000000000000002101356460210500207630ustar00rootroot00000000000000probe syscall.open { printf ("%s(%d) open (%s)\n", execname(), pid(), argstr) } probe timer.ms(4000) # after 4 seconds { exit () } systemtap-4.2/doc/tutorial/tapset-time-user.stp000066400000000000000000000002671356460210500217670ustar00rootroot00000000000000probe begin { timer_begin ("bench") for (i=0; i<100; i++) ; printf ("%d cycles\n", timer_end ("bench")) exit () } function __time_value () { return get_cycles () } # override systemtap-4.2/doc/tutorial/tapset/000077500000000000000000000000001356460210500173225ustar00rootroot00000000000000systemtap-4.2/doc/tutorial/tapset/time-common.stp000066400000000000000000000002401356460210500222720ustar00rootroot00000000000000global __time_vars function timer_begin (name) { __time_vars[name] = __time_value () } function timer_end (name) { return __time_value() - __time_vars[name] } systemtap-4.2/doc/tutorial/tapset/time-default.stp000066400000000000000000000000701356460210500224270ustar00rootroot00000000000000function __time_value () { return gettimeofday_us () } systemtap-4.2/doc/tutorial/timer-jiffies.stp000066400000000000000000000004221356460210500213050ustar00rootroot00000000000000global count_jiffies, count_ms probe timer.jiffies(100) { count_jiffies ++ } probe timer.ms(100) { count_ms ++ } probe timer.ms(12345) { hz=(1000*count_jiffies) / count_ms printf ("jiffies:ms ratio %d:%d => CONFIG_HZ=%d\n", count_jiffies, count_ms, hz) exit () } systemtap-4.2/dtrace.in000066400000000000000000000412531356460210500152110ustar00rootroot00000000000000#!@preferred_python@ # vim: et sta sts=4 sw=4 ts=8 # This handles the systemtap equivalent of # $(DTRACE) $(DTRACEFLAGS) -G -s $^ -o $@ # $(DTRACE) $(DTRACEFLAGS) -h -s $^ -o $@ # which is a step that builds DTrace provider and probe definitions # Copyright (C) 2009-2018 Red Hat Inc. # # This file is part of systemtap, and is free software. You can # redistribute it and/or modify it under the terms of the GNU General # Public License (GPL); either version 2, or (at your option) any # later version. # ignore line too long, missing docstring, method could be a function, # too many public methods # pylint: disable=C0301 # pylint: disable=C0111 # pylint: disable=R0201 # pylint: disable=R0904 import os import sys from shlex import split from subprocess import call from tempfile import mkstemp try: from pyparsing import alphas, cStyleComment, delimitedList, Group, \ Keyword, lineno, Literal, nestedExpr, nums, oneOf, OneOrMore, \ Optional, ParseException, ParserElement, restOfLine, restOfLine, \ Suppress, SkipTo, Word, ZeroOrMore HAVE_PYP = True except ImportError: HAVE_PYP = False # Common file creation methods for pyparsing and string pattern matching class _HeaderCreator(object): def init_semaphores(self, fdesc): # dummy declaration just to make the object file non-empty fdesc.write("/* Generated by the Systemtap dtrace wrapper */\n\n") fdesc.write("static void __dtrace (void) __attribute__((unused));\n") fdesc.write("static void __dtrace (void) {}\n") fdesc.write("\n#include \n\n") def init_probes(self, fdesc): fdesc.write("/* Generated by the Systemtap dtrace wrapper */\n\n") fdesc.write("\n#define _SDT_HAS_SEMAPHORES 1\n\n") fdesc.write("\n#define STAP_HAS_SEMAPHORES 1 /* deprecated */\n\n") fdesc.write("\n#include \n\n") def add_semaphore(self, this_provider, this_probe): # NB: unsigned short is fixed in ABI semaphores_def = '\n#if defined STAP_SDT_V1\n' semaphores_def += '#define %s_%s_semaphore %s_semaphore\n' % \ (this_provider, this_probe, this_probe) semaphores_def += '#endif\n' semaphores_def += '#if defined STAP_SDT_V1 || defined STAP_SDT_V2 \n' semaphores_def += "__extension__ unsigned short %s_%s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\")));\n" % \ (this_provider, this_probe) semaphores_def += '#else\n' semaphores_def += "__extension__ unsigned short %s_%s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\"))) __attribute__ ((visibility (\"hidden\")));\n" % \ (this_provider, this_probe) semaphores_def += '#endif\n' return semaphores_def def add_probe(self, this_provider, this_probe, args): stap_str = "" this_probe_canon = this_provider.upper() + "_" + this_probe.replace("__", "_").upper() define_str = "#define %s(" % (this_probe_canon) comment_str = "/* %s (" % (this_probe_canon) if len(args) == 0: stap_str += "DTRACE_PROBE (" else: stap_str += "DTRACE_PROBE%d (" % len(args) stap_str += "%s, %s" % (this_provider, this_probe) i = 0 while i < len(args): if i != 0: define_str += ", " comment_str += "," define_str = define_str + "arg%s" % (i + 1) stap_str = stap_str + ", arg%s" % (i + 1) for argi in args[i]: if len(argi) > 0: comment_str += " %s" % argi i += 1 stap_str += ")" comment_str += " ) */" define_str += ") \\\n" probe_def = '%s\n' % (comment_str) probe_def += ('#if defined STAP_SDT_V1\n') probe_def += ('#define %s_ENABLED() __builtin_expect (%s_semaphore, 0)\n' % \ (this_probe_canon, this_probe)) probe_def += ('#define %s_%s_semaphore %s_semaphore\n' % \ (this_provider, this_probe, this_probe)) probe_def += ('#else\n') probe_def += ('#define %s_ENABLED() __builtin_expect (%s_%s_semaphore, 0)\n' % \ (this_probe_canon, this_provider, this_probe)) probe_def += ('#endif\n') # NB: unsigned short is fixed in ABI probe_def += ("__extension__ extern unsigned short %s_%s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\")));\n" % \ (this_provider, this_probe)) probe_def += (define_str + stap_str + "\n\n") return probe_def # Parse using pyparsing if it is available class _PypProvider(_HeaderCreator): def __init__(self): self.ast = [] self.bnf = None self.dtrace_statements = None def dtrace_bnf(self): self.current_probe = "" if self.dtrace_statements is not None: return ParserElement.setDefaultWhitespaceChars(' \f\r\n\t\v') ident = Word(alphas+"_", alphas+nums+"_$") probe_ident = Word(alphas+nums+"_$") semi = Literal(";").suppress() integer = Word( nums ) lbrace = Literal("{").suppress() rbrace = Literal("}").suppress() type_name = ident varname = ident PROBE = Keyword("probe") PROVIDER = Keyword("provider") array_size = integer | ident varname_spec = varname + Optional("[" + array_size + "]") struct_decl = Group(oneOf("struct union") + varname + Suppress(nestedExpr('{','}')) + semi) enum_decl = Group("enum" + varname + Suppress(nestedExpr('{','}')) + semi) member_decl = Group((Optional(oneOf("struct unsigned const")) + type_name + Optional(Keyword("const"))) + Optional(Word("*"), default="") + Optional(varname_spec)) struct_typedef = Group(Literal("typedef") + Literal("struct") + varname + Suppress(nestedExpr('{','}'))) + Optional(varname) + semi typedef = ZeroOrMore("typedef" + (member_decl)) + semi decls = OneOrMore(struct_typedef | struct_decl | typedef | enum_decl) def memoize_probe(instring, loc, tokens): self.current_probe = tokens[0][1] self.current_lineno = lineno(loc,instring) probe_decl = Group(PROBE + probe_ident + "(" + Optional(Group(delimitedList(member_decl))) + ")" + Optional(Group(Literal(":") + "(" + Optional(Group(delimitedList(member_decl))) + ")")) + Optional(semi)) probe_decl.setParseAction(memoize_probe) probe_decls = OneOrMore(probe_decl) provider_decl = (PROVIDER + Optional(ident) + lbrace + Group(probe_decls) + rbrace + Optional(semi)) dtrace_statement = Group (SkipTo("provider", include=False) + provider_decl) self.dtrace_statements = ZeroOrMore(dtrace_statement) cplusplus_linecomment = Literal("//") + restOfLine cpp_linecomment = Literal("#") + restOfLine self.dtrace_statements.ignore(cStyleComment) self.dtrace_statements.ignore(cplusplus_linecomment) self.dtrace_statements.ignore(cpp_linecomment) self.bnf = self.dtrace_statements def semaphore_write(self, fdesc): semaphores_def = "" self.init_semaphores(fdesc) for asti in self.ast: if len(asti) == 0: continue # ignore SkipTo token if asti[0] != "provider": del asti[0] if asti[0] == "provider": # list of probes for prb in asti[2]: semaphores_def += self.add_semaphore(asti[1], prb[1]) fdesc.write(semaphores_def) def probe_write(self, provider, header): hdr = open(header, mode='w') self.init_probes(hdr) self.dtrace_bnf() try: try: self.ast = self.bnf.parseFile(provider, parseAll=True).asList() except TypeError: # pyparsing-1.5.0 does not support parseAll self.ast = self.bnf.parseFile(provider).asList() except ParseException: err = sys.exc_info()[1] if len(self.current_probe): print("Warning: %s:%s:%d: syntax error near:\nprobe %s\n" % (sys.argv[0], provider, self.current_lineno, self.current_probe)) else: print("Warning: %s:%s:%d syntax error near:\n%s\n" % (sys.argv[0], provider, err.lineno, err.line)) raise err probes_def = "" for asti in self.ast: if len(asti) == 0: continue # ignore SkipTo token if asti[0] != "provider": del asti[0] if asti[0] == "provider": # list of probes for prb in asti[2]: if prb[3] == ')': # No parsed argument list alist = [] else: alist = prb[3] probes_def += self.add_probe(asti[1], prb[1], alist) hdr.write(probes_def) hdr.close() # Parse using regular expressions if pyparsing is not available class _ReProvider(_HeaderCreator): def __init__(self): self.semaphores_def = "\n" self.provider = [] def __semaphore_append(self, this_probe): self.semaphores_def += self.add_semaphore(self.provider, this_probe) def semaphore_write(self, fdesc): self.init_semaphores(fdesc) fdesc.write(self.semaphores_def) def probe_write(self, provider, header): have_provider = False fdesc = open(provider) hdr = open(header, mode='w') self.init_probes(hdr) in_comment = False probes_def = "" while True: line = fdesc.readline() if line == "": break if line.find("/*") != -1: in_comment = True if line.find("*/") != -1: in_comment = False continue if in_comment: continue if line.find("provider") != -1: tokens = line.split() have_provider = True self.provider = tokens[1] elif have_provider and line.find("probe ") != -1: while line.find(")") < 0: line += fdesc.readline() this_probe = line[line.find("probe ")+5:line.find("(")].strip() argstr = (line[line.find("(")+1:line.find(")")]) arg = "" i = 0 args = [] self.__semaphore_append(this_probe) while i < len(argstr): if argstr[i:i+1] == ",": args.append(arg.split()) arg = "" else: arg = arg + argstr[i] i += 1 if len(arg) > 0: args.append(arg.split()) probes_def += self.add_probe(self.provider, this_probe, args) elif line.find("}") != -1 and have_provider: have_provider = False hdr.write(probes_def) hdr.close() def usage(): print("Usage " + sys.argv[0] + " [--help] [-h | -G] [-C [-I]] -s File.d [-o ]") def dtrace_help(): usage() print("Where -h builds a systemtap header file from the .d file") print(" -C when used with -h, also run cpp preprocessor") print(" -o specifies an explicit output file name,") print(" the default for -G is file.o and -h is file.h") print(" -I when running cpp pass through this -I include Path") print(" -s specifies the name of the .d input file") print(" -G builds a stub file.o from file.d,") print(" which is required by some packages that use dtrace.") sys.exit(1) ######################################################################## # main ######################################################################## def main(): if len(sys.argv) < 2: usage() return 1 global HAVE_PYP i = 1 build_header = False build_source = False keep_temps = False use_cpp = False suffix = "" filename = "" s_filename = "" includes = [] defines = [] ignore_options = ["-64", "-32", "-fpic", "-fPIC"] ignore_options2 = ["-x"] # with parameter while i < len(sys.argv): if sys.argv[i] == "-o": i += 1 filename = sys.argv[i] elif sys.argv[i] == "-s": i += 1 s_filename = sys.argv[i] elif sys.argv[i] == "-C": use_cpp = True elif sys.argv[i].startswith("-D"): defines.append(sys.argv[i]) elif sys.argv[i] == "-h": build_header = True suffix = ".h" elif sys.argv[i].startswith("-I"): includes.append(sys.argv[i]) elif sys.argv[i] == "-G": build_source = True suffix = ".o" elif sys.argv[i] == "-k": keep_temps = True elif sys.argv[i] == "--no-pyparsing": HAVE_PYP = False elif sys.argv[i] == "--types": print(sys.argv[0] + ": note: obsolete option --types used") elif sys.argv[i] in ignore_options: pass # dtrace users sometimes pass these flags elif sys.argv[i] in ignore_options2: i += 1 pass # dtrace users sometimes pass these flags elif sys.argv[i] == "--help": dtrace_help() elif sys.argv[i][0] == "-": print(sys.argv[0], "invalid option", sys.argv[i]) usage() return 1 i += 1 if not build_header and not build_source: usage() return 1 if s_filename != "" and use_cpp: (ignore, fname) = mkstemp(suffix=".d") cpp = os.environ.get("CPP", "cpp") retcode = call(split(cpp) + includes + defines + [s_filename, fname]) if retcode != 0: print("\"cpp includes s_filename\" failed") usage() return 1 s_filename = fname if filename == "": if s_filename != "": (filename, ignore) = os.path.splitext(s_filename) filename = os.path.basename(filename) else: usage() return 1 else: suffix = "" if build_header: if HAVE_PYP: providers = _PypProvider() else: providers = _ReProvider() while True: try: providers.probe_write(s_filename, filename + suffix) break; # complex C declarations can fool the pyparsing grammar. # we could increase the complexity of the grammar # instead we fall back to string pattern matching except ParseException: err = sys.exc_info()[1] print("Warning: Proceeding as if --no-pyparsing was given.\n") providers = _ReProvider() elif build_source: if HAVE_PYP: providers = _PypProvider() else: providers = _ReProvider() (ignore, fname) = mkstemp(suffix=".h") while True: try: providers.probe_write(s_filename, fname) break; except ParseException: err = sys.exc_info()[1] print("Warning: Proceeding as if --no-pyparsing was given.\n") providers = _ReProvider() if not keep_temps: os.remove(fname) else: print("header: " + fname) try: # for reproducible-builds purposes, prefer a fixed path name pattern fname = filename + ".dtrace-temp.c" fdesc = open(fname, mode='w') except: # but that doesn't work for -o /dev/null - see rhbz1504009 (ignore,fname) = mkstemp(suffix=".c") fdesc = open(fname, mode='w') providers.semaphore_write(fdesc) fdesc.close() cc1 = os.environ.get("CC", "gcc") cflags = "-g " + os.environ.get("CFLAGS", "").replace('\\\n', ' ').replace('\\\r',' ') # sanitize any embedded \n etc. goo; PR21063 retcode = call(split(cc1) + defines + includes + split(cflags) + ["-fPIC", "-I.", "-I@prefix@/include", "-c", fname, "-o", filename + suffix], shell=False) if retcode != 0: print("\"gcc " + fname + "\" failed") usage() return 1 if not keep_temps: os.remove(fname) else: print("source: " + fname) if use_cpp: if not keep_temps: os.remove(s_filename) else: print("cpp: " + s_filename) return 0 if __name__ == "__main__": sys.exit(main()) systemtap-4.2/dwarf_wrappers.cxx000066400000000000000000000165531356460210500171760ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2008-2014 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "dwarf_wrappers.h" #include "staptree.h" #include "util.h" #include #include #include #include #include using namespace std; void dwfl_assert(const string& desc, int rc, const string& file, int line) { if (rc == 0) return; string msg = _F("libdwfl failure (%s): ", desc.c_str()); if (rc < 0) msg += (dwfl_errmsg (rc) ?: "?"); else msg += std::strerror (rc); throw semantic_error (file+":"+lex_cast(line), msg); } void dwarf_assert(const string& desc, int rc, const string& file, int line) { if (rc == 0) return; string msg = _F("libdw failure (%s): ", desc.c_str()); if (rc < 0) msg += dwarf_errmsg (rc); else msg += std::strerror (rc); throw semantic_error (file+":"+lex_cast(line), msg); } #if !_ELFUTILS_PREREQ(0, 143) // Elfutils prior to 0.143 didn't use attr_integrate when looking up the // decl_file or decl_line, so the attributes would sometimes be missed. For // those old versions, we define custom implementations to do the integration. const char * dwarf_decl_file_integrate (Dwarf_Die *die) { Dwarf_Attribute attr_mem; Dwarf_Sword idx = 0; if (dwarf_formsdata (dwarf_attr_integrate (die, DW_AT_decl_file, &attr_mem), &idx) != 0 || idx == 0) return NULL; Dwarf_Die cudie; Dwarf_Files *files = NULL; if (dwarf_getsrcfiles (dwarf_diecu (die, &cudie, NULL, NULL), &files, NULL) != 0) return NULL; return dwarf_filesrc(files, idx, NULL, NULL); } int dwarf_decl_line_integrate (Dwarf_Die *die, int *linep) { Dwarf_Attribute attr_mem; Dwarf_Sword line; int res = dwarf_formsdata (dwarf_attr_integrate (die, DW_AT_decl_line, &attr_mem), &line); if (res == 0) *linep = line; return res; } #endif // !_ELFUTILS_PREREQ(0, 143) static bool dwarf_type_name(Dwarf_Die *type_die, ostream& o, Dwarf_Die& subroutine) { // if we've gotten down to a basic type, then we're done bool done = true; switch (dwarf_tag(type_die)) { case DW_TAG_enumeration_type: o << "enum "; break; case DW_TAG_structure_type: o << "struct "; break; case DW_TAG_union_type: o << "union "; break; case DW_TAG_class_type: o << "class "; break; case DW_TAG_typedef: case DW_TAG_base_type: break; // modifier types that require recursion first case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: case DW_TAG_pointer_type: case DW_TAG_array_type: case DW_TAG_const_type: case DW_TAG_volatile_type: case DW_TAG_restrict_type: done = false; break; case DW_TAG_subroutine_type: // Subroutine types (function pointers) are a weird case. The modifiers // we've recursed so far need to go in the middle, with the return type // on the left and parameter types on the right. We'll back out now to // get those modifiers, getting the return and parameters separately. subroutine = *type_die; return true; // unknown tag default: return false; } if (done) { // this follows gdb precedent that anonymous structs/unions // are displayed as "struct {...}" and "union {...}". o << (dwarf_diename(type_die) ?: "{...}"); return true; } // otherwise, this die is a type modifier. // recurse into the referent type Dwarf_Die subtype_die_mem, *subtype_die; subtype_die = dwarf_attr_die(type_die, DW_AT_type, &subtype_die_mem); // NB: va_list is a builtin type that shows up in the debuginfo as a // "struct __va_list_tag*", but it has to be called only va_list. if (subtype_die != NULL && dwarf_tag(type_die) == DW_TAG_pointer_type && dwarf_tag(subtype_die) == DW_TAG_structure_type && strcmp(dwarf_diename(subtype_die) ?: "", "__va_list_tag") == 0) { o << "va_list"; return true; } // if it can't be named, just call it "void" if (subtype_die == NULL || !dwarf_type_name(subtype_die, o, subroutine)) o << "void"; switch (dwarf_tag(type_die)) { case DW_TAG_reference_type: o << "&"; break; case DW_TAG_rvalue_reference_type: o << "&&"; break; case DW_TAG_pointer_type: o << "*"; break; case DW_TAG_array_type: o << "[]"; break; case DW_TAG_const_type: // NB: the debuginfo may sometimes have an extra const tag // on reference types, which is redundant to us. if (subtype_die == NULL || (dwarf_tag(subtype_die) != DW_TAG_reference_type && dwarf_tag(subtype_die) != DW_TAG_rvalue_reference_type)) o << " const"; break; case DW_TAG_volatile_type: o << " volatile"; break; case DW_TAG_restrict_type: o << " restrict"; break; default: return false; } return true; } static bool dwarf_subroutine_name(Dwarf_Die *subroutine, ostream& o, const string& modifier) { // First add the return value. Dwarf_Die ret_type; string ret_string; if (dwarf_attr_die (subroutine, DW_AT_type, &ret_type) == NULL) o << "void"; else if (dwarf_type_name (&ret_type, ret_string)) o << ret_string; else return false; // Now the subroutine modifiers. o << " (" << modifier << ")"; // Then write each parameter. o << " ("; bool first = true; Dwarf_Die child; if (dwarf_child (subroutine, &child) == 0) do { auto tag = dwarf_tag (&child); if (tag == DW_TAG_unspecified_parameters || tag == DW_TAG_formal_parameter) { if (first) first = false; else o << ", "; if (tag == DW_TAG_unspecified_parameters) o << "..."; else if (tag == DW_TAG_formal_parameter) { Dwarf_Die param_type; string param_string; if (dwarf_attr_die (&child, DW_AT_type, ¶m_type) == NULL) o << "void"; else if (dwarf_type_name (¶m_type, param_string)) o << param_string; else return false; } } } while (dwarf_siblingof (&child, &child) == 0); if (first) o << "void"; o << ")"; return true; } bool dwarf_type_decl(Dwarf_Die *type_die, const string& var_name, string& decl) { ostringstream o; Dwarf_Die subroutine = { 0, 0, 0, 0 }; if (!dwarf_type_name (type_die, o, subroutine)) return false; if (!var_name.empty()) o << " " << var_name; if (subroutine.addr != 0) { ostringstream subo; if (!dwarf_subroutine_name (&subroutine, subo, o.str())) return false; decl = subo.str(); } else decl = o.str(); return true; } bool dwarf_type_name(Dwarf_Die *type_die, string& type_name) { return dwarf_type_decl(type_die, "", type_name); } string dwarf_type_name(Dwarf_Die *type_die) { string o; return dwarf_type_name (type_die, o) ? o : ""; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/dwarf_wrappers.h000066400000000000000000000131171356460210500166140ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2008-2014 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef DWARF_WRAPPERS_H #define DWARF_WRAPPERS_H 1 #include "config.h" extern "C" { #include #include #include } #include #if ! _ELFUTILS_PREREQ(0, 148) #define DW_AT_linkage_name 0x6e #endif #if ! _ELFUTILS_PREREQ(0, 153) #define DW_TAG_GNU_call_site 0x4109 #define DW_AT_GNU_tail_call 0x2115 #endif #if ! _ELFUTILS_PREREQ(0, 155) #define DW_ATE_UTF 0x10 #endif #define DWFL_ASSERT(desc, arg) \ dwfl_assert(desc, arg, __FILE__, __LINE__) // NB: "rc == 0" means OK in this case void dwfl_assert(const std::string& desc, int rc, const std::string& file, int line); // Throw error if pointer is NULL inline void dwfl_assert(const std::string& desc, const void* ptr, const std::string& file, int line) { if (!ptr) dwfl_assert(desc, -1, file, line); } // Throw error if condition is false inline void dwfl_assert(const std::string& desc, bool condition, const std::string& file, int line) { if (!condition) dwfl_assert(desc, -1, file, line); } #define DWARF_ASSERT(desc, arg) \ dwarf_assert(desc, arg, __FILE__, __LINE__) // NB: "rc == 0" means OK in this case void dwarf_assert(const std::string& desc, int rc, const std::string& file, int line); // Throw error if pointer is NULL inline void dwarf_assert(const std::string& desc, const void* ptr, const std::string& file, int line) { if (!ptr) dwarf_assert(desc, -1, file, line); } #define DWARF_LINENO(line) \ safe_dwarf_lineno(line, __FILE__, __LINE__) inline int safe_dwarf_lineno(const Dwarf_Line* line, const std::string& errfile, int errline) { int lineno; dwarf_assert("dwarf_lineno", dwarf_lineno(const_cast(line), &lineno), errfile, errline); return lineno; } #define DWARF_LINEADDR(line) \ safe_dwarf_lineaddr(line, __FILE__, __LINE__) inline Dwarf_Addr safe_dwarf_lineaddr(const Dwarf_Line* line, const std::string& errfile, int errline) { Dwarf_Addr addr; dwarf_assert("dwarf_lineaddr", dwarf_lineaddr(const_cast(line), &addr), errfile, errline); return addr; } #define DWARF_LINESRC(line) \ safe_dwarf_linesrc(line, NULL, NULL, __FILE__, __LINE__) #define DWARF_LINESRC2(line, mtime) \ safe_dwarf_linesrc(line, mtime, NULL, __FILE__, __LINE__) #define DWARF_LINESRC3(line, mtime, length) \ safe_dwarf_linesrc(line, mtime, length, __FILE__, __LINE__) inline const char* safe_dwarf_linesrc(const Dwarf_Line* line, Dwarf_Word* mtime, Dwarf_Word* length, const std::string& errfile, int errline) { const char* linesrc = dwarf_linesrc(const_cast(line), mtime, length); dwarf_assert("dwarf_linesrc", linesrc, errfile, errline); return linesrc; } #define DWARF_LINEPROLOGUEEND(line) \ safe_dwarf_lineprologueend(line, __FILE__, __LINE__) inline bool safe_dwarf_lineprologueend(const Dwarf_Line* line, const std::string& errfile, int errline) { bool flag; dwarf_assert("is_prologue_end", dwarf_lineprologueend(const_cast(line), &flag), errfile, errline); return flag; } // Look up the DIE for a reference-form attribute name inline Dwarf_Die * dwarf_attr_die (Dwarf_Die *die, unsigned int attr, Dwarf_Die *result) { Dwarf_Attribute attr_mem; if (dwarf_formref_die (dwarf_attr_integrate (die, attr, &attr_mem), result) != NULL) { /* If we want a type make sure we get the actual DIE describing the real type. */ if (attr == DW_AT_type) { Dwarf_Attribute sigm; Dwarf_Attribute *sig = dwarf_attr (result, DW_AT_signature, &sigm); if (sig != NULL) result = dwarf_formref_die (sig, result); /* A DW_AT_signature might point to a type_unit, then the actual type DIE we want is the first child. */ if (result != NULL && dwarf_tag (result) == DW_TAG_type_unit) DWFL_ASSERT("type_unit child", dwarf_child (result, result)); } return result; } return NULL; } // Retrieve the linkage name of a die, either by the MIPS vendor extension or // DWARF4's standardized attribute. inline const char * dwarf_linkage_name (Dwarf_Die *die) { Dwarf_Attribute attr_mem; return dwarf_formstring (dwarf_attr_integrate (die, DW_AT_MIPS_linkage_name, &attr_mem) ?: dwarf_attr_integrate (die, DW_AT_linkage_name, &attr_mem)); } #if !_ELFUTILS_PREREQ(0, 143) // Elfutils prior to 0.143 didn't use attr_integrate when looking up the // decl_file or decl_line, so the attributes would sometimes be missed. For // those old versions, we define custom implementations to do the integration. const char *dwarf_decl_file_integrate (Dwarf_Die *die); #define dwarf_decl_file dwarf_decl_file_integrate int dwarf_decl_line_integrate (Dwarf_Die *die, int *linep) __nonnull_attribute__ (2); #define dwarf_decl_line dwarf_decl_line_integrate #endif // !_ELFUTILS_PREREQ(0, 143) // Resolve a C declaration for dwarf types bool dwarf_type_decl(Dwarf_Die *type_die, const std::string& var_name, std::string& decl); // Resolve a full name for dwarf types bool dwarf_type_name(Dwarf_Die *type_die, std::string& type_name); std::string dwarf_type_name(Dwarf_Die *type_die); #endif /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/dwflpp.cxx000066400000000000000000004633721356460210500154510ustar00rootroot00000000000000// C++ interface to dwfl // Copyright (C) 2005-2019 Red Hat Inc. // Copyright (C) 2005-2007 Intel Corporation. // Copyright (C) 2008 James.Bottomley@HansenPartnership.com // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "dwflpp.h" #include "config.h" #include #include "staptree.h" #include "elaborate.h" #include "tapsets.h" #include "task_finder.h" #include "translate.h" #include "session.h" #include "util.h" #include "buildrun.h" #include "dwarf_wrappers.h" #include "hash.h" #include "rpm_finder.h" #include "setupdwfl.h" #include "loc2stap.h" #include #include #include #include #include #include #include #include #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include #define __STDC_FORMAT_MACROS #include } // Older glibc elf.h don't know about this new constant. #ifndef STB_GNU_UNIQUE #define STB_GNU_UNIQUE 10 #endif // debug flag to compare to the uncached version from libdw // #define DEBUG_DWFLPP_GETSCOPES 1 using namespace std; using namespace __gnu_cxx; static string TOK_KERNEL("kernel"); dwflpp::dwflpp(systemtap_session & session, const string& name, bool kernel_p): sess(session), module(NULL), module_bias(0), mod_info(NULL), module_start(0), module_end(0), cu(NULL), dwfl(NULL), module_dwarf(NULL), function(NULL), blacklist_func(), blacklist_func_ret(), blacklist_file(), blacklist_enabled(false) { if (kernel_p) setup_kernel(name, session); else { vector modules; modules.push_back(name); setup_user(modules); } } dwflpp::dwflpp(systemtap_session & session, const vector& names, bool kernel_p): sess(session), module(NULL), module_bias(0), mod_info(NULL), module_start(0), module_end(0), cu(NULL), dwfl(NULL), module_dwarf(NULL), function(NULL), blacklist_enabled(false) { if (kernel_p) setup_kernel(names); else setup_user(names); } dwflpp::~dwflpp() { delete_map(module_cu_cache); delete_map(cu_function_cache); delete_map(mod_function_cache); delete_map(cu_inl_function_cache); delete_map(cu_call_sites_cache); delete_map(global_alias_cache); delete_map(cu_die_parent_cache); for (auto i = cu_lines_cache.begin(); i != cu_lines_cache.end(); ++i) delete_map(*i->second); delete_map(cu_lines_cache); delete_map(cu_entry_pc_cache); if (dwfl) dwfl_end(dwfl); // NB: don't "delete mod_info;", as that may be shared // between dwflpp instances, and are stored in // session.module_cache[] anyway. } module_cache::~module_cache () { delete_map(cache); } void dwflpp::get_module_dwarf(bool required, bool report) { module_dwarf = dwfl_module_getdwarf(module, &module_bias); mod_info->dwarf_status = (module_dwarf ? info_present : info_absent); if (!module_dwarf && report) { string msg = _("cannot find "); if (module_name == "") msg += "kernel"; else msg += string("module ") + module_name; msg += " debuginfo"; int i = dwfl_errno(); if (i) msg += string(": ") + dwfl_errmsg (i); msg += " [man warning::debuginfo]"; /* add module_name to list to find rpm */ find_debug_rpms(sess, module_name.c_str()); if (required) throw SEMANTIC_ERROR (msg); else sess.print_warning(msg); } } void dwflpp::focus_on_module(Dwfl_Module * m, module_info * mi) { module = m; mod_info = mi; if (m) { module_name = dwfl_module_info(module, NULL, &module_start, &module_end, NULL, NULL, NULL, NULL) ?: "module"; } else { assert(mi && mi->name && mi->name == TOK_KERNEL); module_name = mi->name; module_start = 0; module_end = 0; module_bias = mi->bias; } // Reset existing pointers and names module_dwarf = NULL; cu = NULL; function_name.clear(); function = NULL; } void dwflpp::focus_on_cu(Dwarf_Die * c) { assert(c); assert(module); cu = c; // Reset existing pointers and names function_name.clear(); function = NULL; } string dwflpp::cu_name(void) { return dwarf_diename(cu) ?: ""; } void dwflpp::focus_on_function(Dwarf_Die * f) { assert(f); assert(module); assert(cu); function = f; function_name = dwarf_diename(function) ?: "function"; } /* Return the Dwarf_Die for the given address in the current module. * The address should be in the module address address space (this * function will take care of any dw bias). */ Dwarf_Die * dwflpp::query_cu_containing_address(Dwarf_Addr a) { Dwarf_Addr bias; assert(dwfl); assert(module); get_module_dwarf(); Dwarf_Die* cudie = dwfl_module_addrdie(module, a, &bias); assert(bias == module_bias); return cudie; } bool dwflpp::module_name_matches(const string& pattern) { bool t = (fnmatch(pattern.c_str(), module_name.c_str(), 0) == 0); if (t && sess.verbose>3) clog << _F("pattern '%s' matches module '%s'\n", pattern.c_str(), module_name.c_str()); if (!t && sess.verbose>4) clog << _F("pattern '%s' does not match module '%s'\n", pattern.c_str(), module_name.c_str()); return t; } bool dwflpp::name_has_wildcard (const string& pattern) { return (pattern.find('*') != string::npos || pattern.find('?') != string::npos || pattern.find('[') != string::npos); } bool dwflpp::module_name_final_match(const string& pattern) { // Assume module_name_matches(). Can there be any more matches? // Not unless the pattern is a wildcard, since module names are // presumed unique. return !name_has_wildcard(pattern); } bool dwflpp::function_name_matches_pattern(const string& name, const string& pattern) { bool t = (fnmatch(pattern.c_str(), name.c_str(), 0) == 0); if (t && sess.verbose>3) clog << _F("pattern '%s' matches function '%s'\n", pattern.c_str(), name.c_str()); return t; } bool dwflpp::function_name_matches(const string& pattern) { assert(function); return function_name_matches_pattern(function_name, pattern); } bool dwflpp::function_scope_matches(const vector& scopes) { // walk up the containing scopes Dwarf_Die* die = function; for (int i = scopes.size() - 1; i >= 0; --i) { die = get_parent_scope(die); // check if this scope matches, and prepend it if so // NB: a NULL die is the global scope, compared as "" string name = dwarf_diename(die) ?: ""; if (name_has_wildcard(scopes[i]) ? function_name_matches_pattern(name, scopes[i]) : name == scopes[i]) function_name = name + "::" + function_name; else return false; // make sure there's no more if we're at the global scope if (!die && i > 0) return false; } return true; } void dwflpp::setup_kernel(const string& name, systemtap_session & s, bool debuginfo_needed) { if (! sess.module_cache) sess.module_cache = new module_cache (); unsigned offline_search_matches = 0; dwfl = setup_dwfl_kernel(name, &offline_search_matches, sess); if (offline_search_matches < 1) { if (debuginfo_needed) { // Suggest a likely kernel dir to find debuginfo rpm for string dir = string(sess.sysroot + "/lib/modules/" + sess.kernel_release ); find_debug_rpms(sess, dir.c_str()); } throw SEMANTIC_ERROR (_F("missing %s kernel/module debuginfo [man warning::debuginfo] under '%s'", sess.architecture.c_str(), sess.kernel_build_tree.c_str())); } if (dwfl != NULL) { ptrdiff_t off = 0; do { assert_no_interrupts(); off = dwfl_getmodules (dwfl, &add_module_build_id_to_hash, &s, off); } while (off > 0); DWFL_ASSERT("dwfl_getmodules", off == 0); } build_kernel_blacklist(); } void dwflpp::setup_kernel(const vector &names, bool debuginfo_needed) { if (! sess.module_cache) sess.module_cache = new module_cache (); unsigned offline_search_matches = 0; set offline_search_names(names.begin(), names.end()); dwfl = setup_dwfl_kernel(offline_search_names, &offline_search_matches, sess); if (offline_search_matches < offline_search_names.size()) { if (debuginfo_needed) { // Suggest a likely kernel dir to find debuginfo rpm for string dir = string(sess.sysroot + "/lib/modules/" + sess.kernel_release ); find_debug_rpms(sess, dir.c_str()); } throw SEMANTIC_ERROR (_F("missing %s kernel/module debuginfo [man warning::debuginfo] under '%s'", sess.architecture.c_str(), sess.kernel_build_tree.c_str())); } build_kernel_blacklist(); } void dwflpp::setup_user(const vector& modules, bool debuginfo_needed) { if (! sess.module_cache) sess.module_cache = new module_cache (); auto it = modules.begin(); dwfl = setup_dwfl_user(it, modules.end(), debuginfo_needed, sess); if (debuginfo_needed && it != modules.end()) DWFL_ASSERT (string(_F("missing process %s %s debuginfo", (*it).c_str(), sess.architecture.c_str())), dwfl); build_user_blacklist(); } template<> void dwflpp::iterate_over_modules(int (*callback)(Dwfl_Module*, void**, const char*, Dwarf_Addr, void*), void *data) { dwfl_getmodules (dwfl, callback, data, 0); // Don't complain if we exited dwfl_getmodules early. // This could be a $target variable error that will be // reported soon anyway. // DWFL_ASSERT("dwfl_getmodules", off == 0); // PR6864 XXX: For dwarfless case (if .../vmlinux is missing), then the // "kernel" module is not reported in the loop above. However, we // may be able to make do with symbol table data. } template<> void dwflpp::iterate_over_cus(int (*callback)(Dwarf_Die*, void*), void *data, bool want_types) { get_module_dwarf(false); Dwarf *dw = module_dwarf; if (!dw) return; vector* v = module_cu_cache[dw]; if (v == 0) { v = new vector; module_cu_cache[dw] = v; Dwarf_Off off = 0; size_t cuhl; Dwarf_Off noff; while (dwarf_nextcu (dw, off, &noff, &cuhl, NULL, NULL, NULL) == 0) { assert_no_interrupts(); Dwarf_Die die_mem; Dwarf_Die *die; die = dwarf_offdie (dw, off + cuhl, &die_mem); /* Skip partial units. */ if (dwarf_tag (die) == DW_TAG_compile_unit) v->push_back (*die); /* copy */ off = noff; } } if (want_types && module_tus_read.find(dw) == module_tus_read.end()) { // Process type units. Dwarf_Off off = 0; size_t cuhl; Dwarf_Off noff; uint64_t type_signature; while (dwarf_next_unit (dw, off, &noff, &cuhl, NULL, NULL, NULL, NULL, &type_signature, NULL) == 0) { assert_no_interrupts(); Dwarf_Die die_mem; Dwarf_Die *die; die = dwarf_offdie_types (dw, off + cuhl, &die_mem); /* Skip partial units. */ if (dwarf_tag (die) == DW_TAG_type_unit) v->push_back (*die); /* copy */ off = noff; } module_tus_read.insert(dw); } for (auto i = v->begin(); i != v->end(); ++i) { int rc = (*callback)(&*i, data); assert_no_interrupts(); if (rc != DWARF_CB_OK) break; } } bool dwflpp::func_is_inline() { assert (function); return dwarf_func_inline (function) != 0; } bool dwflpp::func_is_exported() { const char *name = dwarf_linkage_name (function) ?: dwarf_diename (function); assert (function); int syms = dwfl_module_getsymtab (module); DWFL_ASSERT (_("Getting symbols"), syms >= 0); for (int i = 0; i < syms; i++) { GElf_Sym sym; GElf_Word shndxp; const char *symname = dwfl_module_getsym(module, i, &sym, &shndxp); if (symname && strcmp (name, symname) == 0) { if (GELF_ST_TYPE(sym.st_info) == STT_FUNC && (GELF_ST_BIND(sym.st_info) == STB_GLOBAL || GELF_ST_BIND(sym.st_info) == STB_WEAK || GELF_ST_BIND(sym.st_info) == STB_GNU_UNIQUE)) return true; else return false; } } return false; } void dwflpp::cache_inline_instances (Dwarf_Die* die) { // If this is an inline instance, link it back to its origin Dwarf_Die origin; if (dwarf_tag(die) == DW_TAG_inlined_subroutine && dwarf_attr_die(die, DW_AT_abstract_origin, &origin)) { vector*& v = cu_inl_function_cache[origin.addr]; if (!v) v = new vector; v->push_back(*die); } // Recurse through other scopes that may contain inlines Dwarf_Die child, import; if (dwarf_child(die, &child) == 0) do { switch (dwarf_tag (&child)) { // tags that could contain inlines case DW_TAG_compile_unit: case DW_TAG_module: case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: case DW_TAG_inlined_subroutine: case DW_TAG_subprogram: cache_inline_instances(&child); break; // imported dies should be followed case DW_TAG_imported_unit: if (dwarf_attr_die(&child, DW_AT_import, &import)) cache_inline_instances(&import); break; // nothing to do for other tags default: break; } } while (dwarf_siblingof(&child, &child) == 0); } template<> void dwflpp::iterate_over_inline_instances(int (*callback)(Dwarf_Die*, void*), void *data) { assert (function); assert (func_is_inline ()); if (cu_inl_function_cache_done.insert(cu->addr).second) cache_inline_instances(cu); vector* v = cu_inl_function_cache[function->addr]; if (!v) return; for (auto i = v->begin(); i != v->end(); ++i) { int rc = (*callback)(&*i, data); assert_no_interrupts(); if (rc != DWARF_CB_OK) break; } } void dwflpp::cache_call_sites (Dwarf_Die* die, Dwarf_Die *function) { Dwarf_Die origin; if (dwarf_tag(die) == DW_TAG_GNU_call_site && dwarf_attr_die(die, DW_AT_abstract_origin, &origin)) { vector*& v = cu_call_sites_cache[origin.addr]; if (!v) v = new vector; call_site_cache_t c (*die, *function); v->push_back(c); } Dwarf_Die child; if (dwarf_child(die, &child) == 0) do { switch (dwarf_tag (&child)) { // tags that could contain call sites case DW_TAG_compile_unit: case DW_TAG_module: case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: case DW_TAG_GNU_call_site: cache_call_sites(&child, function); break; case DW_TAG_subprogram: case DW_TAG_inlined_subroutine: cache_call_sites(&child, &child); // nothing to do for other tags default: break; } } while (dwarf_siblingof(&child, &child) == 0); } template<> void dwflpp::iterate_over_call_sites (int (*callback)(Dwarf_Die*, Dwarf_Die*, void*), void *data) { assert (cu); assert (function); if (cu_call_sites_cache_done.insert(cu->addr).second) cache_call_sites(cu, NULL); vector* v = cu_call_sites_cache[function->addr]; if (!v) return; for (auto i = v->begin(); i != v->end(); ++i) { int rc = (*callback)(&i->first, &i->second, data); if (rc != DWARF_CB_OK) break; } } void dwflpp::cache_die_parents(cu_die_parent_cache_t* parents, Dwarf_Die* die) { // Record and recurse through DIEs we care about Dwarf_Die child, import; if (dwarf_child(die, &child) == 0) do { switch (dwarf_tag (&child)) { // normal tags to recurse case DW_TAG_compile_unit: case DW_TAG_module: case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: case DW_TAG_inlined_subroutine: case DW_TAG_subprogram: case DW_TAG_namespace: case DW_TAG_class_type: case DW_TAG_structure_type: parents->insert(make_pair(child.addr, *die)); cache_die_parents(parents, &child); break; // record only, nothing to recurse case DW_TAG_label: parents->insert(make_pair(child.addr, *die)); break; // imported dies should be followed case DW_TAG_imported_unit: if (dwarf_attr_die(&child, DW_AT_import, &import)) { parents->insert(make_pair(import.addr, *die)); cache_die_parents(parents, &import); } break; // nothing to do for other tags default: break; } } while (dwarf_siblingof(&child, &child) == 0); } cu_die_parent_cache_t* dwflpp::get_die_parents() { assert (cu); cu_die_parent_cache_t *& parents = cu_die_parent_cache[cu->addr]; if (!parents) { parents = new cu_die_parent_cache_t; cache_die_parents(parents, cu); if (sess.verbose > 4) clog << _F("die parent cache %s:%s size %zu", module_name.c_str(), cu_name().c_str(), parents->size()) << endl; } return parents; } vector dwflpp::getscopes_die(Dwarf_Die* die) { cu_die_parent_cache_t *parents = get_die_parents(); vector scopes; Dwarf_Die *scope = die; auto it = parents->end(); do { scopes.push_back(*scope); it = parents->find(scope->addr); scope = &it->second; } while (it != parents->end()); #ifdef DEBUG_DWFLPP_GETSCOPES Dwarf_Die *dscopes = NULL; int nscopes = dwarf_getscopes_die(die, &dscopes); assert(nscopes == (int)scopes.size()); for (unsigned i = 0; i < scopes.size(); ++i) assert(scopes[i].addr == dscopes[i].addr); free(dscopes); #endif return scopes; } std::vector dwflpp::getscopes(Dwarf_Die* die) { cu_die_parent_cache_t *parents = get_die_parents(); vector scopes; Dwarf_Die origin; Dwarf_Die *scope = die; auto it = parents->end(); do { scopes.push_back(*scope); if (dwarf_tag(scope) == DW_TAG_inlined_subroutine && dwarf_attr_die(scope, DW_AT_abstract_origin, &origin)) scope = &origin; it = parents->find(scope->addr); scope = &it->second; } while (it != parents->end()); #ifdef DEBUG_DWFLPP_GETSCOPES // there isn't an exact libdw equivalent, but if dwarf_getscopes on the // entrypc returns the same first die, then all the scopes should match Dwarf_Addr pc; if (die_entrypc(die, &pc)) { Dwarf_Die *dscopes = NULL; int nscopes = dwarf_getscopes(cu, pc, &dscopes); if (nscopes > 0 && dscopes[0].addr == die->addr) { assert(nscopes == (int)scopes.size()); for (unsigned i = 0; i < scopes.size(); ++i) assert(scopes[i].addr == dscopes[i].addr); } free(dscopes); } #endif return scopes; } std::vector dwflpp::getscopes(Dwarf_Addr pc) { // The die_parent_cache doesn't help us without knowing where the pc is // contained, so we have to do this one the old fashioned way. assert (cu); vector scopes; Dwarf_Die* dwarf_scopes; int nscopes = dwarf_getscopes(cu, pc, &dwarf_scopes); if (nscopes > 0) { scopes.assign(dwarf_scopes, dwarf_scopes + nscopes); free(dwarf_scopes); } #ifdef DEBUG_DWFLPP_GETSCOPES // check that getscopes on the starting die gets the same result if (!scopes.empty()) { vector other = getscopes(&scopes[0]); assert(scopes.size() == other.size()); for (unsigned i = 0; i < scopes.size(); ++i) assert(scopes[i].addr == other[i].addr); } #endif return scopes; } Dwarf_Die* dwflpp::get_parent_scope(Dwarf_Die* die) { Dwarf_Die specification; if (dwarf_attr_die(die, DW_AT_specification, &specification)) die = &specification; cu_die_parent_cache_t *parents = get_die_parents(); auto it = parents->find(die->addr); while (it != parents->end()) { Dwarf_Die* scope = &it->second; switch (dwarf_tag (scope)) { case DW_TAG_namespace: case DW_TAG_class_type: case DW_TAG_structure_type: return scope; default: break; } it = parents->find(scope->addr); } return NULL; } static const char* cache_type_prefix(Dwarf_Die* type) { switch (dwarf_tag(type)) { case DW_TAG_enumeration_type: return "enum "; case DW_TAG_structure_type: case DW_TAG_class_type: // treating struct/class as equals return "struct "; case DW_TAG_union_type: return "union "; } return ""; } /* GCC might generate a struct/class without DW_AT_declaration, but that only contains members which have DW_AT_declaration set. We aren't interested in those. PR14434 (GCC bug #54181). */ static bool has_only_decl_members (Dwarf_Die *die) { Dwarf_Die child, import; if (dwarf_child(die, &child) != 0) return false; /* no members */ do { if (! dwarf_hasattr(&child, DW_AT_declaration)) return false; /* real member found. */ int tag = dwarf_tag(&child); if ((tag == DW_TAG_namespace || tag == DW_TAG_structure_type || tag == DW_TAG_class_type) && ! has_only_decl_members (&child)) return false; /* real grand child member found. */ // Unlikely to ever happen, but if there is an imported unit // then check its children as if they are children of this DIE. if (tag == DW_TAG_imported_unit && dwarf_attr_die(&child, DW_AT_import, &import) && ! has_only_decl_members (&import)) return false; } while (dwarf_siblingof(&child, &child) == 0); return true; /* Tried all children and grandchildren. */ } int dwflpp::global_alias_caching_callback(Dwarf_Die *die, bool has_inner_types, const string& prefix, cu_type_cache_t *cache) { const char *name = dwarf_diename(die); if (!name || dwarf_hasattr(die, DW_AT_declaration) || has_only_decl_members(die)) return DWARF_CB_OK; int tag = dwarf_tag(die); if (has_inner_types && (tag == DW_TAG_namespace || tag == DW_TAG_structure_type || tag == DW_TAG_class_type)) iterate_over_types(die, has_inner_types, prefix + name + "::", global_alias_caching_callback, cache); if (tag != DW_TAG_namespace) { string type_name = prefix + cache_type_prefix(die) + name; if (cache->find(type_name) == cache->end()) (*cache)[type_name] = *die; } return DWARF_CB_OK; } int dwflpp::global_alias_caching_callback_cus(Dwarf_Die *die, dwflpp *dw) { mod_cu_type_cache_t *global_alias_cache; global_alias_cache = &dw->global_alias_cache; cu_type_cache_t *v = (*global_alias_cache)[die->addr]; if (v != 0) return DWARF_CB_OK; v = new cu_type_cache_t; (*global_alias_cache)[die->addr] = v; iterate_over_globals(die, global_alias_caching_callback, v); return DWARF_CB_OK; } Dwarf_Die * dwflpp::declaration_resolve_other_cus(const string& name) { iterate_over_cus(global_alias_caching_callback_cus, this, true); for (auto i = global_alias_cache.begin(); i != global_alias_cache.end(); ++i) { cu_type_cache_t *v = (*i).second; if (v->find(name) != v->end()) return & ((*v)[name]); } return NULL; } Dwarf_Die * dwflpp::declaration_resolve(const string& name) { cu_type_cache_t *v = global_alias_cache[cu->addr]; if (v == 0) // need to build the cache, just once per encountered module/cu { v = new cu_type_cache_t; global_alias_cache[cu->addr] = v; iterate_over_globals(cu, global_alias_caching_callback, v); if (sess.verbose > 4) clog << _F("global alias cache %s:%s size %zu", module_name.c_str(), cu_name().c_str(), v->size()) << endl; } // XXX: it may be desirable to search other modules' declarations // too, in case a module/shared-library processes a // forward-declared pointer type only, where the actual definition // may only be in vmlinux or the application. if (v->find(name) == v->end()) return declaration_resolve_other_cus(name); return & ((*v)[name]); } Dwarf_Die * dwflpp::declaration_resolve(Dwarf_Die *type) { const char* name = dwarf_diename(type); if (!name) return NULL; string type_name = cache_type_prefix(type) + string(name); return declaration_resolve(type_name); } int dwflpp::cu_function_caching_callback (Dwarf_Die* func, cu_function_cache_t *v) { const char *name = dwarf_diename(func); if (!name) return DWARF_CB_OK; v->insert(make_pair(name, *func)); return DWARF_CB_OK; } int dwflpp::mod_function_caching_callback (Dwarf_Die* cu, cu_function_cache_t *v) { // need to cast callback to func which accepts void* dwarf_getfuncs (cu, (int (*)(Dwarf_Die*, void*))cu_function_caching_callback, v, 0); return DWARF_CB_OK; } template<> int dwflpp::iterate_over_functions(int (*callback)(Dwarf_Die*, void*), void *data, const string& function) { int rc = DWARF_CB_OK; assert (module); assert (cu); cu_function_cache_t *v = cu_function_cache[cu->addr]; if (v == 0) { v = new cu_function_cache_t; cu_function_cache[cu->addr] = v; // need to cast callback to func which accepts void* dwarf_getfuncs (cu, (int (*)(Dwarf_Die*, void*))cu_function_caching_callback, v, 0); if (sess.verbose > 4) clog << _F("function cache %s:%s size %zu", module_name.c_str(), cu_name().c_str(), v->size()) << endl; mod_info->update_symtab(v); } auto range = v->equal_range(function); if (range.first != range.second) { for (auto it = range.first; it != range.second; ++it) { Dwarf_Die& die = it->second; if (sess.verbose > 4) clog << _F("function cache %s:%s hit %s", module_name.c_str(), cu_name().c_str(), function.c_str()) << endl; rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } else if (startswith(function, "_Z")) { // C++ names are mangled starting with a "_Z" prefix. Most of the time // we can discover the mangled name from a die's MIPS_linkage_name // attribute, so we read that to match against the user's function // pattern. Note that this isn't perfect, as not all will have that // attribute (notably ctors and dtors), but we do what we can... for (auto it = v->begin(); it != v->end(); ++it) { if (pending_interrupts) return DWARF_CB_ABORT; Dwarf_Die& die = it->second; const char* linkage_name = NULL; if ((linkage_name = dwarf_linkage_name (&die)) && function_name_matches_pattern (linkage_name, function)) { if (sess.verbose > 4) clog << _F("function cache %s:%s match %s vs %s", module_name.c_str(), cu_name().c_str(), linkage_name, function.c_str()) << endl; rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } } else if (name_has_wildcard (function)) { for (auto it = v->begin(); it != v->end(); ++it) { if (pending_interrupts) return DWARF_CB_ABORT; const string& func_name = it->first; Dwarf_Die& die = it->second; if (function_name_matches_pattern (func_name, function)) { if (sess.verbose > 4) clog << _F("function cache %s:%s match %s vs %s", module_name.c_str(), cu_name().c_str(), func_name.c_str(), function.c_str()) << endl; rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } } else // not a linkage name or wildcard and no match in this CU { // do nothing } return rc; } template<> int dwflpp::iterate_single_function(int (*callback)(Dwarf_Die*, void*), void *data, const string& function) { int rc = DWARF_CB_OK; assert (module); get_module_dwarf(false); if (!module_dwarf) return rc; cu_function_cache_t *v = mod_function_cache[module_dwarf]; if (v == 0) { v = new cu_function_cache_t; mod_function_cache[module_dwarf] = v; iterate_over_cus (mod_function_caching_callback, v, false); if (sess.verbose > 4) clog << _F("module function cache %s size %zu", module_name.c_str(), v->size()) << endl; mod_info->update_symtab(v); } auto range = v->equal_range(function); if (range.first != range.second) { for (auto it = range.first; it != range.second; ++it) { Dwarf_Die cu_mem; Dwarf_Die& die = it->second; if (sess.verbose > 4) clog << _F("module function cache %s hit %s", module_name.c_str(), function.c_str()) << endl; // since we're iterating out of cu-context, we need each focus focus_on_cu(dwarf_diecu(&die, &cu_mem, NULL, NULL)); rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } // undo the focus_on_cu this->cu = NULL; this->function_name.clear(); this->function = NULL; return rc; } /* This basically only goes one level down from the compile unit so it * only picks up top level stuff (i.e. nothing in a lower scope) */ template<> int dwflpp::iterate_over_globals(Dwarf_Die *cu_die, int (*callback)(Dwarf_Die*, bool, const string&, void*), void *data) { assert (cu_die); assert (dwarf_tag(cu_die) == DW_TAG_compile_unit || dwarf_tag(cu_die) == DW_TAG_type_unit || dwarf_tag(cu_die) == DW_TAG_partial_unit); // Ignore partial_unit, if they get imported by a real unit, then // iterate_over_types will traverse them. if (dwarf_tag(cu_die) == DW_TAG_partial_unit) return DWARF_CB_OK; // If this is C++, recurse for any inner types bool has_inner_types = dwarf_srclang(cu_die) == DW_LANG_C_plus_plus; return iterate_over_types(cu_die, has_inner_types, "", callback, data); } template<> int dwflpp::iterate_over_types(Dwarf_Die *top_die, bool has_inner_types, const string& prefix, int (* callback)(Dwarf_Die*, bool, const string&, void*), void *data) { int rc = DWARF_CB_OK; Dwarf_Die die, import; assert (top_die); if (dwarf_child(top_die, &die) != 0) return rc; do /* We're only currently looking for named types, * although other types of declarations exist */ switch (dwarf_tag(&die)) { case DW_TAG_base_type: case DW_TAG_enumeration_type: case DW_TAG_structure_type: case DW_TAG_class_type: case DW_TAG_typedef: case DW_TAG_union_type: case DW_TAG_namespace: rc = (*callback)(&die, has_inner_types, prefix, data); break; case DW_TAG_imported_unit: // Follow the imported_unit and iterate over its contents // (either a partial_unit or a full compile_unit), all its // children should be treated as if they appear in this place. if (dwarf_attr_die(&die, DW_AT_import, &import)) rc = iterate_over_types(&import, has_inner_types, prefix, callback, data); break; } while (rc == DWARF_CB_OK && dwarf_siblingof(&die, &die) == 0); return rc; } /* For each notes section in the current module call 'callback', use * 'data' for the notes buffer and pass 'object' back in case * 'callback' is a method */ template<> int dwflpp::iterate_over_notes(void *object, void (*callback)(void*, const string&, const string&, int, const char*, size_t)) { Dwarf_Addr bias; // Note we really want the actual elf file, not the dwarf .debug file. // Older binutils had a bug where they mangled the SHT_NOTE type during // --keep-debug. Elf* elf = dwfl_module_getelf (module, &bias); size_t shstrndx; if (elf_getshdrstrndx (elf, &shstrndx)) return elf_errno(); Elf_Scn *scn = NULL; vector notes; while ((scn = elf_nextscn (elf, scn)) != NULL) { GElf_Shdr shdr; if (gelf_getshdr (scn, &shdr) == NULL) continue; switch (shdr.sh_type) { case SHT_NOTE: if (!(shdr.sh_flags & SHF_ALLOC)) { string scn_name = elf_strptr(elf, shstrndx, shdr.sh_name); Elf_Data *data = elf_getdata (scn, NULL); size_t next; GElf_Nhdr nhdr; size_t name_off; size_t desc_off; for (size_t offset = 0; (next = gelf_getnote (data, offset, &nhdr, &name_off, &desc_off)) > 0; offset = next) { const char *note_name_addr = (const char *)data->d_buf + name_off; const char *note_desc_addr = (const char *)data->d_buf + desc_off; string note_name = nhdr.n_namesz > 1 // n_namesz includes NULL ? string(note_name_addr, nhdr.n_namesz-1) : ""; (*callback) (object, scn_name, note_name, nhdr.n_type, note_desc_addr, nhdr.n_descsz); } } break; } } return 0; } /* For each entry in the .dynamic section in the current module call 'callback' * returning 'object' in case 'callback' is a method */ template<> void dwflpp::iterate_over_libraries(void (*callback)(void*, const char*), void *data) { std::set added; string interpreter; assert (this->module_name.length() != 0); Dwarf_Addr bias; // We cannot use this: dwarf_getelf (dwfl_module_getdwarf (module, &bias)) Elf *elf = dwfl_module_getelf (module, &bias); // elf_getphdrnum (elf, &phnum) is not available in all versions of elfutils // needs libelf from elfutils 0.144+ for (int i = 0; ; i++) { GElf_Phdr mem; GElf_Phdr *phdr; phdr = gelf_getphdr (elf, i, &mem); if (phdr == NULL) break; if (phdr->p_type == PT_INTERP) { size_t maxsize; char *filedata = elf_rawfile (elf, &maxsize); if (filedata != NULL && phdr->p_offset < maxsize) interpreter = (char*) (filedata + phdr->p_offset); break; } } if (interpreter.length() == 0) return; // If it gets cumbersome to maintain this whitelist, we could just check for // startswith("/lib/ld") || startswith("/lib64/ld"), and trust that no admin // would install untrustworthy loaders in those paths. // See also http://sourceware.org/git/?p=glibc.git;a=blob;f=shlib-versions;hb=HEAD if (interpreter != "/lib/ld.so.1" // s390, ppc && interpreter != "/lib/ld64.so.1" // s390x, ppc64 && interpreter != "/lib64/ld64.so.1" && interpreter != "/lib/ld-linux-ia64.so.2" // ia64 && interpreter != "/usr/lib/ld-linux-x86-64.so.2" // && interpreter != "/emul/ia32-linux/lib/ld-linux.so.2" && interpreter != "/lib64/ld-linux-x86-64.so.2" // x8664 && interpreter != "/lib/ld-linux.so.2" // x86 && interpreter != "/lib/ld-linux.so.3" // arm && interpreter != "/lib/ld-linux-armhf.so.3" // arm && interpreter != "/lib/ld-linux-aarch64.so.1" // arm64 && interpreter != "/lib64/ld64.so.2" // ppc64le ) { sess.print_warning (_F("module %s --ldd skipped: unsupported interpreter: %s", module_name.c_str(), interpreter.c_str())); return; } vector ldd_command; ldd_command.push_back("/usr/bin/env"); ldd_command.push_back("LD_TRACE_LOADED_OBJECTS=1"); ldd_command.push_back("LD_WARN=yes"); ldd_command.push_back("LD_BIND_NOW=yes"); ldd_command.push_back(interpreter); ldd_command.push_back(module_name); FILE *fp; int child_fd; pid_t child = stap_spawn_piped(sess.verbose, ldd_command, NULL, &child_fd); if (child <= 0 || !(fp = fdopen(child_fd, "r"))) clog << _F("library iteration on %s failed: %s", module_name.c_str(), strerror(errno)) << endl; else { while (1) { char linebuf[256]; char soname[256]; char shlib[256]; unsigned long int addr = 0; char *line = fgets (linebuf, 256, fp); if (line == 0) break; // EOF or error // Try soname => shlib (0xaddr) int nf = sscanf (line, "%255s => %255s (0x%lx)", soname, shlib, &addr); if (nf != 3 || shlib[0] != '/') { // Try shlib (0xaddr) nf = sscanf (line, " %255s (0x%lx)", shlib, &addr); if (nf != 2 || shlib[0] != '/') continue; // fewer than expected fields, or bad shlib. } if (added.find (shlib) == added.end()) { if (sess.verbose > 2) { clog << _F("Added -d '%s", shlib); if (nf == 3) clog << _F("' due to '%s'", soname); else clog << "'"; clog << endl; } added.insert (shlib); } } if ((fclose(fp) || stap_waitpid(sess.verbose, child))) sess.print_warning("failed to read libraries from " + module_name + ": " + strerror(errno)); } for (auto it = added.begin(); it != added.end(); it++) { const string& modname = *it; (callback) (data, modname.c_str()); } } /* For each plt section in the current module call 'callback', pass the plt entry * 'address' and 'name' back, and pass 'object' back in case 'callback' is a method */ template<> int dwflpp::iterate_over_plt(void *object, void (*callback)(void*, const char*, size_t)) { Dwarf_Addr load_addr; // Note we really want the actual elf file, not the dwarf .debug file. Elf* elf = dwfl_module_getelf (module, &load_addr); size_t shstrndx; assert (elf_getshdrstrndx (elf, &shstrndx) >= 0); // Get the load address for (int i = 0; ; i++) { GElf_Phdr mem; GElf_Phdr *phdr; phdr = gelf_getphdr (elf, i, &mem); if (phdr == NULL) break; if (phdr->p_type == PT_LOAD) { load_addr = phdr->p_vaddr; break; } } // Get the plt section header Elf_Scn *scn = NULL; GElf_Shdr *plt_shdr = NULL; GElf_Shdr plt_shdr_mem; while ((scn = elf_nextscn (elf, scn))) { GElf_Shdr *shdr = gelf_getshdr (scn, &plt_shdr_mem); assert (shdr != NULL); if (strcmp (elf_strptr (elf, shstrndx, shdr->sh_name), ".plt") == 0) { plt_shdr = shdr; break; } } if (plt_shdr == NULL) return 0; // Layout of the plt section int plt0_entry_size; int plt_entry_size; GElf_Ehdr ehdr_mem; GElf_Ehdr* em = gelf_getehdr (elf, &ehdr_mem); switch (em->e_machine) { case EM_386: plt0_entry_size = 16; plt_entry_size = 16; break; case EM_X86_64: plt0_entry_size = 16; plt_entry_size = 16; break; case EM_ARM: plt0_entry_size = 20; plt_entry_size = 12; break; case EM_AARCH64:plt0_entry_size = 32; plt_entry_size = 16; break; case EM_PPC64: case EM_S390: case EM_PPC: default: throw SEMANTIC_ERROR(".plt is not supported on this architecture"); } scn = NULL; while ((scn = elf_nextscn (elf, scn))) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); bool have_rela = false; bool have_rel = false; if (shdr == NULL) continue; assert (shdr != NULL); if ((have_rela = (strcmp (elf_strptr (elf, shstrndx, shdr->sh_name), ".rela.plt") == 0)) || (have_rel = (strcmp (elf_strptr (elf, shstrndx, shdr->sh_name), ".rel.plt") == 0))) { /* Get the data of the section. */ Elf_Data *data = elf_getdata (scn, NULL); assert (data != NULL); /* Get the symbol table information. */ Elf_Scn *symscn = elf_getscn (elf, shdr->sh_link); GElf_Shdr symshdr_mem; GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem); assert (symshdr != NULL); Elf_Data *symdata = elf_getdata (symscn, NULL); assert (symdata != NULL); unsigned int nsyms = shdr->sh_size / shdr->sh_entsize; for (unsigned int cnt = 0; cnt < nsyms; ++cnt) { GElf_Ehdr ehdr_mem; GElf_Ehdr* em = gelf_getehdr (elf, &ehdr_mem); if (em == 0) { DWFL_ASSERT ("dwfl_getehdr", dwfl_errno()); } GElf_Rela relamem; GElf_Rela *rela = NULL; GElf_Rel relmem; GElf_Rel *rel = NULL; if (have_rela) { rela = gelf_getrela (data, cnt, &relamem); assert (rela != NULL); } else if (have_rel) { rel = gelf_getrel (data, cnt, &relmem); assert (rel != NULL); } GElf_Sym symmem; Elf32_Word xndx; Elf_Data *xndxdata = NULL; GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (have_rela ? rela->r_info : rel->r_info), &symmem, &xndx); assert (sym != NULL); Dwarf_Addr addr = plt_shdr->sh_offset + plt0_entry_size + cnt * plt_entry_size; if (elf_strptr (elf, symshdr->sh_link, sym->st_name)) (*callback) (object, elf_strptr (elf, symshdr->sh_link, sym->st_name), addr + load_addr); } break; // while scn } } return 0; } // Comparator function for sorting static bool compare_lines(Dwarf_Line* a, Dwarf_Line* b) { if (a == b) return false; int lineno_a = DWARF_LINENO(a); int lineno_b = DWARF_LINENO(b); if (lineno_a == lineno_b) return DWARF_LINEADDR(a) < DWARF_LINEADDR(b); return lineno_a < lineno_b; } // Comparator object for searching Dwarf_Lines with a specific lineno when we // don't have a Dwarf_Line of our own to search for (hence why a or b is always // NULL). struct lineno_comparator { int lineno; lineno_comparator(int lineno): lineno(lineno) {} bool operator() (Dwarf_Line* a, Dwarf_Line* b) { assert(a || b); if (a) return DWARF_LINENO(a) < lineno; else return lineno < DWARF_LINENO(b); } }; // Returns a range of lines in between begin and end with wanted lineno. If // none exist, points to where it would have been. static lines_range_t lineno_equal_range(lines_t* v, int lineno) { lineno_comparator lc(lineno); return equal_range(v->begin(), v->end(), (Dwarf_Line*)NULL, lc); } // Interface to CU lines cache sorted by lineno lines_t* dwflpp::get_cu_lines_sorted_by_lineno(const char *srcfile) { assert(cu); srcfile_lines_cache_t *srcfile_lines = cu_lines_cache[cu]; if (!srcfile_lines) { srcfile_lines = new srcfile_lines_cache_t(); cu_lines_cache[cu] = srcfile_lines; } lines_t *lines = (*srcfile_lines)[srcfile]; if (!lines) { size_t nlines_cu = 0; Dwarf_Lines *lines_cu = NULL; DWARF_ASSERT("dwarf_getsrclines", dwarf_getsrclines(cu, &lines_cu, &nlines_cu)); lines = new lines_t(); (*srcfile_lines)[srcfile] = lines; for (size_t i = 0; i < nlines_cu; i++) { Dwarf_Line *line = dwarf_onesrcline(lines_cu, i); const char *linesrc = DWARF_LINESRC(line); if (strcmp(srcfile, linesrc)) continue; lines->push_back(line); } if (lines->size() > 1) sort(lines->begin(), lines->end(), compare_lines); if (sess.verbose > 3) { clog << _F("found the following lines for %s:", srcfile) << endl; for (auto i = lines->begin(); i != lines->end(); ++i) cout << DWARF_LINENO(*i) << " = " << hex << DWARF_LINEADDR(*i) << dec << endl; } } return lines; } static Dwarf_Line* get_func_first_line(Dwarf_Die *cu, base_func_info& func) { // dwarf_getsrc_die() uses binary search to find the Dwarf_Line, but will // return the wrong line if not found. Dwarf_Line *line = dwarf_getsrc_die(cu, func.entrypc); if (line && DWARF_LINEADDR(line) == func.entrypc) return line; // Line not found (or line at wrong addr). We have to resort to a slower // linear method. We won't find an exact match (probably this is an inlined // instance), so just settle on the first Dwarf_Line with lowest addr which // falls in the die. size_t nlines = 0; Dwarf_Lines *lines = NULL; DWARF_ASSERT("dwarf_getsrclines", dwarf_getsrclines(cu, &lines, &nlines)); for (size_t i = 0; i < nlines; i++) { line = dwarf_onesrcline(lines, i); if (dwarf_haspc(&func.die, DWARF_LINEADDR(line))) return line; } return NULL; } static lines_t collect_lines_in_die(lines_range_t range, Dwarf_Die *die) { lines_t lines_in_die; for (auto line = range.first; line != range.second; ++line) if (dwarf_haspc(die, DWARF_LINEADDR(*line))) lines_in_die.push_back(*line); return lines_in_die; } static void add_matching_lines_in_func(Dwarf_Die *cu, lines_t *cu_lines, base_func_info& func, lines_t& matching_lines) { Dwarf_Line *start_line = get_func_first_line(cu, func); if (!start_line) return; for (int lineno = DWARF_LINENO(start_line);;) { lines_range_t range = lineno_equal_range(cu_lines, lineno); // We consider the lineno still part of the die if at least one of them // falls in the die. lines_t lines_in_die = collect_lines_in_die(range, &func.die); if (lines_in_die.empty()) break; // Just pick the first LR even if there are more than one. Since the lines // are sorted by lineno and then addr, the first one is the one with the // lowest addr. matching_lines.push_back(lines_in_die[0]); // break out if there are no more lines, otherwise, go to the next lineno if (range.second == cu_lines->end()) break; lineno = DWARF_LINENO(*range.second); } } void dwflpp::collect_all_lines(char const * srcfile, base_func_info_map_t& funcs, lines_t& matching_lines) { // This is where we handle WILDCARD lineno types. lines_t *cu_lines = get_cu_lines_sorted_by_lineno(srcfile); for (auto func = funcs.begin(); func != funcs.end(); ++func) add_matching_lines_in_func(cu, cu_lines, *func, matching_lines); } static void add_matching_line_in_die(lines_t *cu_lines, lines_t& matching_lines, Dwarf_Die *die, int lineno) { lines_range_t lineno_range = lineno_equal_range(cu_lines, lineno); lines_t lines_in_die = collect_lines_in_die(lineno_range, die); if (lines_in_die.empty()) return; // Even if there are more than 1 LRs, just pick the first one. Since the lines // are sorted by lineno and then addr, the first one is the one with the // lowest addr. This is similar to what GDB does. matching_lines.push_back(lines_in_die[0]); } void dwflpp::collect_lines_for_single_lineno(char const * srcfile, int lineno, bool is_relative, base_func_info_map_t& funcs, lines_t& matching_lines) { /* Here, we handle ABSOLUTE and RELATIVE lineno types. Relative line numbers * are a bit special. The issue is that functions (esp. inlined ones) may not * even have a LR corresponding to the first valid line of code. So, applying * an offset to the 'first' LR found in the DIE can be quite imprecise. * Instead, we use decl_line, which although does not necessarily have a * LR associated with it (it can sometimes still happen esp. if the code is * written in OTB-style), it serves as an anchor on which we can apply the * offset to yield a lineno that will not change with compiler optimization. * It also has the added benefit of being consistent with the lineno * printed by e.g. stap -l kernel.function("vfs_read"), so users can be * confident from what lineno we adjust. */ lines_t *cu_lines = get_cu_lines_sorted_by_lineno(srcfile); for (auto func = funcs.begin(); func != funcs.end(); ++func) add_matching_line_in_die(cu_lines, matching_lines, &func->die, is_relative ? lineno + func->decl_line : lineno); } static bool functions_have_lineno(base_func_info_map_t& funcs, lines_t *lines, int lineno) { lines_range_t lineno_range = lineno_equal_range(lines, lineno); if (lineno_range.first == lineno_range.second) return false; // no LRs at this lineno for (auto func = funcs.begin(); func != funcs.end(); ++func) if (!collect_lines_in_die(lineno_range, &func->die).empty()) return true; return false; } // returns pair of valid linenos surrounding target lineno pair dwflpp::get_nearest_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs) { assert(cu); lines_t *cu_lines = get_cu_lines_sorted_by_lineno(srcfile); // Look around lineno for linenos with LRs. pair nearest_linenos = make_pair(-1, -1); for (size_t i = 1; i < 6; ++i) { if (nearest_linenos.first == -1 && functions_have_lineno(funcs, cu_lines, lineno-i)) nearest_linenos.first = lineno - i; if (nearest_linenos.second == -1 && functions_have_lineno(funcs, cu_lines, lineno+i)) nearest_linenos.second = lineno + i; } return nearest_linenos; } // returns nearest valid lineno to target lineno int dwflpp::get_nearest_lineno(char const * srcfile, int lineno, base_func_info_map_t& funcs) { assert(cu); pair nearest_linenos = get_nearest_linenos(srcfile, lineno, funcs); if (nearest_linenos.first > 0 && nearest_linenos.second > 0) { // pick the nearest line number (break tie to upper) if (lineno - nearest_linenos.first < nearest_linenos.second - lineno) return nearest_linenos.first; else return nearest_linenos.second; } else if (nearest_linenos.first > 0) return nearest_linenos.first; else if (nearest_linenos.second > 0) return nearest_linenos.second; else return -1; } void dwflpp::suggest_alternative_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs) { assert(cu); pair nearest_linenos = get_nearest_linenos(srcfile, lineno, funcs); stringstream advice; advice << _F("no line records for %s:%d [man error::dwarf]", srcfile, lineno); if (nearest_linenos.first > 0 || nearest_linenos.second > 0) { //TRANSLATORS: Here we are trying to advise what source file //TRANSLATORS: to attempt. advice << _(" (try "); if (nearest_linenos.first > 0) advice << ":" << nearest_linenos.first; if (nearest_linenos.first > 0 && nearest_linenos.second > 0) advice << _(" or "); if (nearest_linenos.second > 0) advice << ":" << nearest_linenos.second; advice << ")"; } throw SEMANTIC_ERROR (advice.str()); } static base_func_info_map_t get_funcs_in_srcfile(base_func_info_map_t& funcs, const char * srcfile) { base_func_info_map_t matching_funcs; for (auto func = funcs.begin(); func != funcs.end(); ++func) if (func->decl_file == string(srcfile)) matching_funcs.push_back(*func); return matching_funcs; } template<> void dwflpp::iterate_over_srcfile_lines(char const * srcfile, const vector& linenos, enum lineno_t lineno_type, base_func_info_map_t& funcs, void (* callback) (Dwarf_Addr, int, void*), bool has_nearest, void *data) { /* Matching line records (LRs) to user-provided linenos is trickier than it * seems. The fate of all functions is one of three possibilities: * 1. it's a normal function, with a subprogram DIE and a bona fide lowpc * and highpc attribute. * 2. it's an inlined function (one/multiple inlined_subroutine DIE, with one * abstract_origin DIE) * 3. it's both a normal function and an inlined function. For example, if * the funtion has been inlined only in some places, we'll have a DIE for * the normal subprogram DIE as well as inlined_subroutine DIEs. * * Multiple LRs for the same lineno but different addresses can simply happen * due to the function appearing in multiple forms. E.g. a function inlined * in two spots can yield two sets of LRs for its linenos at the different * addresses where it is inlined. * This is why the collect_* functions used here try to match up LRs back * to their originating DIEs. For example, in the function * collect_lines_for_single_lineno(), we filter first by DIE so that a lineno * corresponding to multiple addrs in multiple inlined_subroutine DIEs yields * a probe for each of them. */ assert(cu); // only work on the functions found in the current srcfile base_func_info_map_t current_funcs = get_funcs_in_srcfile(funcs, srcfile); if (current_funcs.empty()) return; // collect lines lines_t matching_lines; if (lineno_type == ABSOLUTE) collect_lines_for_single_lineno(srcfile, linenos[0], false, /* is_relative */ current_funcs, matching_lines); else if (lineno_type == RELATIVE) collect_lines_for_single_lineno(srcfile, linenos[0], true, /* is_relative */ current_funcs, matching_lines); else if (lineno_type == WILDCARD) collect_all_lines(srcfile, current_funcs, matching_lines); else if (lineno_type == ENUMERATED) { set collected_linenos; for (auto it = linenos.begin(); it != linenos.end(); it++) { // have we already collected this lineno? if (collected_linenos.find(*it) != collected_linenos.end()) continue; // remember end iterator so we can tell if things were found later auto itend = matching_lines.end(); collect_lines_for_single_lineno(srcfile, *it, false, /* is_relative */ current_funcs, matching_lines); // add to set if we found LRs if (itend != matching_lines.end()) collected_linenos.insert(*it); // if we didn't find anything and .nearest is given, then try nearest if (itend == matching_lines.end() && has_nearest) { int nearest_lineno = get_nearest_lineno(srcfile, *it, current_funcs); if (nearest_lineno <= 0) // no valid nearest linenos continue; bool new_lineno = collected_linenos.insert(nearest_lineno).second; if (new_lineno) collect_lines_for_single_lineno(srcfile, nearest_lineno, false, /* is_relative */ current_funcs, matching_lines); } } } // should we try to collect the nearest lines if we didn't collect everything // on first try? (ABSOLUTE and RELATIVE only: ENUMERATED handles it already // and WILDCARD doesn't need it) if (matching_lines.empty() && has_nearest && (lineno_type == ABSOLUTE || lineno_type == RELATIVE)) { int lineno = linenos[0]; if (lineno_type == RELATIVE) // just pick the first function and make it relative to that lineno += current_funcs[0].decl_line; int nearest_lineno = get_nearest_lineno(srcfile, lineno, current_funcs); if (nearest_lineno > 0) collect_lines_for_single_lineno(srcfile, nearest_lineno, false, /* is_relative */ current_funcs, matching_lines); } // call back with matching lines if (!matching_lines.empty()) { set probed_addrs; for (auto line = matching_lines.begin(); line != matching_lines.end(); ++line) { int lineno = DWARF_LINENO(*line); Dwarf_Addr addr = DWARF_LINEADDR(*line); bool is_new_addr = probed_addrs.insert(addr).second; if (is_new_addr) callback(addr, lineno, data); } } // No LRs found at the wanted lineno. So let's suggest other ones if user was // targeting a specific lineno (ABSOLUTE or RELATIVE). else if (lineno_type == ABSOLUTE || lineno_type == RELATIVE) { int lineno = linenos[0]; if (lineno_type == RELATIVE) // just pick the first function and make it relative to that lineno += current_funcs[0].decl_line; suggest_alternative_linenos(srcfile, lineno, current_funcs); } else if (lineno_type == WILDCARD) { // PR23760: It's not an error to come across a srcfile that has // no line records, if we're just happening across it as a // wildcard case. Only best effort matches are expected here. // // throw SEMANTIC_ERROR(_F("no line records for %s [man error::dwarf]", srcfile)); } } template<> void dwflpp::iterate_over_labels(Dwarf_Die *begin_die, const string& sym, const base_func_info& function, const vector& linenos, enum lineno_t lineno_type, void *data, void (* callback)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, void*)) { get_module_dwarf(); Dwarf_Die die, import; const char *name; int res = dwarf_child (begin_die, &die); if (res != 0) return; // die without children, bail out. do { switch (dwarf_tag(&die)) { case DW_TAG_label: name = dwarf_diename (&die); if (name && (name == sym || (name_has_wildcard(sym) && function_name_matches_pattern (name, sym)))) { // Don't try to be smart. Just drop no addr labels. Dwarf_Addr stmt_addr; if (dwarf_lowpc (&die, &stmt_addr) == 0) { // Get the file/line number for this label int dline; const char *file = dwarf_decl_file (&die) ?: ""; dwarf_decl_line (&die, &dline); vector scopes = getscopes_die(&die); if (scopes.size() > 1) { Dwarf_Die scope; if (!inner_die_containing_pc(scopes[1], stmt_addr, scope)) { sess.print_warning(_F("label '%s' at address %s (dieoffset: %s) is not " "contained by its scope '%s' (dieoffset: %s) -- bad" " debuginfo? [man error::dwarf]", name, lex_cast_hex(stmt_addr).c_str(), lex_cast_hex(dwarf_dieoffset(&die)).c_str(), (dwarf_diename(&scope) ?: ""), lex_cast_hex(dwarf_dieoffset(&scope)).c_str())); } bool matches_lineno; if (lineno_type == ABSOLUTE) matches_lineno = dline == linenos[0]; else if (lineno_type == RELATIVE) matches_lineno = dline == linenos[0] + function.decl_line; else if (lineno_type == ENUMERATED) matches_lineno = (binary_search(linenos.begin(), linenos.end(), dline)); else // WILDCARD matches_lineno = true; if (matches_lineno) callback(function, name, file, dline, &scope, stmt_addr, data); } } } break; case DW_TAG_subprogram: case DW_TAG_inlined_subroutine: // Stay within our filtered function break; case DW_TAG_imported_unit: // Iterate over the children of the imported unit as if they // were inserted in place. if (dwarf_attr_die(&die, DW_AT_import, &import)) iterate_over_labels (&import, sym, function, linenos, lineno_type, data, callback); break; default: if (dwarf_haschildren (&die)) iterate_over_labels (&die, sym, function, linenos, lineno_type, data, callback); break; } } while (dwarf_siblingof (&die, &die) == 0); } // Mini 'query-like' struct to help us navigate callbacks during // external function resolution struct external_function_query { dwflpp* dw; const string name; Dwarf_Die die; Dwarf_Addr addr; bool resolved; external_function_query(dwflpp* dw, const string& name): dw(dw), name(name), die(), addr(0), resolved(false) {} }; int dwflpp::external_function_cu_callback (Dwarf_Die* cu, external_function_query *efq) { efq->dw->focus_on_cu(cu); return efq->dw->iterate_over_functions(external_function_func_callback, efq, efq->name); } int dwflpp::external_function_func_callback (Dwarf_Die* func, external_function_query *efq) { Dwarf_Attribute external; Dwarf_Addr func_addr; if (dwarf_attr_integrate(func, DW_AT_external, &external) != NULL && dwarf_lowpc(func, &func_addr) == 0) { efq->die = *func; efq->addr = func_addr; efq->resolved = true; return DWARF_CB_ABORT; // we found it so stop here } return DWARF_CB_OK; } template<> void dwflpp::iterate_over_callees(Dwarf_Die *begin_die, const string& sym, int64_t recursion_depth, void *data, void (* callback)(base_func_info&, base_func_info&, stack*, void*), base_func_info& caller, stack *callers) { get_module_dwarf(); Dwarf_Die die, import; // DIE of abstract_origin found in die Dwarf_Die origin; // callee's entry pc (= where we'll probe) Dwarf_Addr func_addr; // caller's unwind pc during call (to match against bt for filtering) Dwarf_Addr caller_uw_addr; Dwarf_Attribute attr; base_func_info callee; if (dwarf_child(begin_die, &die) != 0) return; // die without children, bail out. bool free_callers = false; if (callers == NULL) /* first call */ { callers = new stack(); free_callers = true; } do { bool inlined = false; switch (dwarf_tag(&die)) { case DW_TAG_inlined_subroutine: inlined = true; /* FALLTHROUGH */ /* thanks mjw */ case DW_TAG_GNU_call_site: callee.name = dwarf_diename(&die) ?: ""; if (callee.name.empty()) continue; if (callee.name != sym) { if (!name_has_wildcard(sym)) continue; if (!function_name_matches_pattern(callee.name, sym)) continue; } /* In both cases (call sites and inlines), we want the * abstract_origin. The difference is that in inlines, the addr is * in the die itself, whereas for call sites, the addr is in the * abstract_origin's die. * Note that in the case of inlines, we're only calling back * for that inline instance, not all. This is what we want, since * it will only be triggered when 'called' from the target func, * which is something we have to emulate for non-inlined funcs * (which is the purpose of the caller_uw_addr below) */ if (dwarf_attr_die(&die, DW_AT_abstract_origin, &origin) == NULL) continue; // the low_pc of the die in either cases is the pc that would // show up in a backtrace (inlines are a special case in which // the die's low_pc is also the abstract_origin's low_pc = the // 'start' of the inline instance) if (dwarf_lowpc(&die, &caller_uw_addr) != 0) continue; if (inlined) func_addr = caller_uw_addr; else if (dwarf_lowpc(&origin, &func_addr) != 0) { // function doesn't have a low_pc, is it external? if (dwarf_attr_integrate(&origin, DW_AT_external, &attr) != NULL) { // let's iterate over the CUs and find it. NB: it's // possible we could have also done this by creating a // probe point with .exported tacked on and rerunning it // through derive_probe(). But since we're already on the // dwflpp side of things, and we already have access to // everything we need, let's try to be self-sufficient. // remember old focus Dwarf_Die *old_cu = cu; external_function_query efq(this, dwarf_linkage_name(&origin) ?: callee.name); iterate_over_cus(external_function_cu_callback, &efq, false); // restore focus cu = old_cu; if (!efq.resolved) // did we resolve it? continue; func_addr = efq.addr; origin = efq.die; } // non-external function without low_pc, jump ship else continue; } // We now have the addr to probe in func_addr, and the DIE // from which to obtain file/line info in origin // Get the file/line number for this callee callee.decl_file = dwarf_decl_file (&origin) ?: ""; dwarf_decl_line (&origin, &callee.decl_line); // add as a caller to match against if (!inlined) callers->push(caller_uw_addr); callee.die = inlined ? die : origin; callee.entrypc = func_addr; callback(callee, caller, callers, data); // If it's a tail call, print a warning that it may not be caught if (!inlined && dwarf_attr_integrate(&die, DW_AT_GNU_tail_call, &attr) != NULL) sess.print_warning (_F("Callee \"%s\" in function \"%s\" is a tail call: " ".callee probe may not fire. Try placing the probe " "directly on the callee function instead.", callee.name.to_string().c_str(), caller.name.to_string().c_str())); // For .callees(N) probes, we recurse on this callee. Note that we // pass the callee we just found as the caller arg for this recursion, // since it (the callee we just found) will be the caller of whatever // callees found inside this recursion. if (recursion_depth > 1) iterate_over_callees(inlined ? &die : &origin, sym, recursion_depth-1, data, callback, callee, callers); if (!inlined) callers->pop(); break; case DW_TAG_subprogram: break; // don't leave our filtered func case DW_TAG_imported_unit: // Iterate over the children of the imported unit as if they // were inserted in place. if (dwarf_attr_die(&die, DW_AT_import, &import)) // NB: we pass the same caller arg into it iterate_over_callees (&import, sym, recursion_depth, data, callback, caller, callers); break; default: if (dwarf_haschildren (&die)) // NB: we pass the same caller arg into it iterate_over_callees (&die, sym, recursion_depth, data, callback, caller, callers); break; } } while (dwarf_siblingof (&die, &die) == 0); if (free_callers && callers != NULL) delete callers; } void dwflpp::collect_srcfiles_matching (string const & pattern, set & filtered_srcfiles) { assert (module); assert (cu); size_t nfiles; Dwarf_Files *srcfiles; // PR 5049: implicit * in front of given path pattern. // NB: fnmatch() is used without FNM_PATHNAME. string prefixed_pattern = string("*/") + pattern; DWARF_ASSERT ("dwarf_getsrcfiles", dwarf_getsrcfiles (cu, &srcfiles, &nfiles)); { for (size_t i = 0; i < nfiles; ++i) { char const * fname = dwarf_filesrc (srcfiles, i, NULL, NULL); if (fnmatch (pattern.c_str(), fname, 0) == 0 || fnmatch (prefixed_pattern.c_str(), fname, 0) == 0) { filtered_srcfiles.insert (fname); if (sess.verbose>2) clog << _F("selected source file '%s'\n", fname); } } } } void dwflpp::resolve_prologue_endings (func_info_map_t & funcs) { // When a program is compiled with no optimization, GCC does no variable // tracking, which means that location info is actually only really valid // after the prologue, even though GCC reports it as valid during. So we need // to find the prologue ends to get accurate info. This may or may not be the // first address that has a source line distinct from the function // declaration's. assert(module); assert(cu); size_t nlines = 0; Dwarf_Lines *lines = NULL; /* trouble cases: malloc do_symlink in init/initramfs.c tail-recursive/tiny then no-prologue sys_get?id in kernel/timer.c no-prologue sys_exit_group tail-recursive {do_,}sys_open extra-long-prologue (gcc 3.4) cpu_to_logical_apicid NULL-decl_file */ // Fetch all srcline records, sorted by address. No need to free lines, it's a // direct pointer to the CU's cached lines. if (dwarf_getsrclines(cu, &lines, &nlines) != 0 || lines == NULL || nlines == 0) { if (sess.verbose > 2) clog << _F("aborting prologue search: no source lines found for cu '%s'\n", cu_name().c_str()); return; } // Dump them into our own array for easier searching. They should already be // sorted by addr, but we doublecheck that here. We want to keep the indices // between lines and addrs the same. vector addrs; for (size_t i = 0; i < nlines; i++) { Dwarf_Line* line = dwarf_onesrcline(lines, i); Dwarf_Addr addr = DWARF_LINEADDR(line); if (!addrs.empty() && addr < addrs.back()) throw SEMANTIC_ERROR(_("lines from dwarf_getsrclines() not sorted")); addrs.push_back(addr); } // We normally ignore a function's decl_line, since it is associated with the // line at which the identifier appears in the declaration, and has no // meaningful relation to the lineno associated with the entrypc (which is // normally the lineno of '{', which could occur at the same line as the // declaration, or lower down). // However, if the CU was compiled using GCC < 4.4, then the decl_line // actually represents the lineno of '{' as well, in which case if the lineno // associated with the entrypc is != to the decl_line, it means the compiler // scraped/optimized off some of the beginning of the function and the safest // thing we can do is consider it naked. bool consider_decl_line = false; { string prod, vers; if (is_gcc_producer(cu, prod, vers) && strverscmp(vers.c_str(), "4.4.0") < 0) consider_decl_line = true; } for(auto it = funcs.begin(); it != funcs.end(); it++) { Dwarf_Addr entrypc = it->entrypc; unsigned entrypc_srcline_idx = 0; Dwarf_Line *entrypc_srcline = NULL; { auto it_addr = lower_bound(addrs.cbegin(), addrs.cend(), entrypc); if (it_addr != addrs.cend() && *it_addr == entrypc) { entrypc_srcline_idx = it_addr - addrs.cbegin(); entrypc_srcline = dwarf_onesrcline(lines, entrypc_srcline_idx); } } if (!entrypc_srcline) { if (sess.verbose > 2) clog << _F("missing entrypc dwarf line record for function '%s'\n", it->name.to_string().c_str()); // This is probably an inlined function. We'll end up using // its lowpc as a probe address. continue; } if (entrypc == 0) { if (sess.verbose > 2) clog << _F("null entrypc dwarf line record for function '%s'\n", it->name.to_string().c_str()); // This is probably an inlined function. We'll skip this instance; // it is messed up. continue; } if (sess.verbose>2) clog << _F("searching for prologue of function '%s' %#" PRIx64 "@%s:%d\n", it->name.to_string().c_str(), entrypc, it->decl_file.to_string().c_str(), it->decl_line); // For each function, we look for the prologue-end marker (e.g. clang // outputs one). If there is no explicit marker (e.g. GCC does not), we // accept a bigger or equal lineno as a prologue end (this catches GCC's // 0-line advances). // We may have to skip a few because some old compilers plop // in dummy line records for longer prologues. If we go too // far (outside function), we take the previous one. Or, it may // be the first one, if the function had no prologue, and thus // the entrypc maps to a statement in the body rather than the // declaration. int entrypc_srcline_lineno = DWARF_LINENO(entrypc_srcline); unsigned postprologue_srcline_idx = entrypc_srcline_idx; Dwarf_Line *postprologue_srcline = entrypc_srcline; while (postprologue_srcline_idx < nlines) { postprologue_srcline = dwarf_onesrcline(lines, postprologue_srcline_idx); Dwarf_Addr lineaddr = DWARF_LINEADDR(postprologue_srcline); const char* linesrc = DWARF_LINESRC(postprologue_srcline); int lineno = DWARF_LINENO(postprologue_srcline); bool lineprologue_end = DWARF_LINEPROLOGUEEND(postprologue_srcline); if (sess.verbose>2) clog << _F("checking line record %#" PRIx64 "@%s:%d%s\n", lineaddr, linesrc, lineno, lineprologue_end ? " (marked)" : ""); // have we passed the function? if (dwarf_haspc (& it->die, lineaddr) != 1) break; // is there an explicit prologue_end marker? if (lineprologue_end) break; // is it a different file? if (it->decl_file != string(linesrc)) break; // OK, it's the same file, but is it a different line? if (lineno != entrypc_srcline_lineno) break; // Same file and line, is this a second line record (e.g. 0-line advance)? if (postprologue_srcline_idx != entrypc_srcline_idx) break; // This is the first iteration. Is decl_line meaningful and is the // lineno past the decl_line? if (consider_decl_line && lineno != it->decl_line) break; // Let's try the next srcline. postprologue_srcline_idx ++; } // loop over srclines Dwarf_Addr postprologue_addr = DWARF_LINEADDR(postprologue_srcline); if (dwarf_haspc (& it->die, postprologue_addr) != 1) { // pick addr of previous line record Dwarf_Line *lr = dwarf_onesrcline(lines, postprologue_srcline_idx-1); postprologue_addr = DWARF_LINEADDR(lr); } it->prologue_end = postprologue_addr; if (sess.verbose>2) { clog << _F("prologue found function '%s'", it->name.to_string().c_str()); // Add a little classification datum //TRANSLATORS: Here we're adding some classification datum (ie Prologue Free) if (postprologue_addr == entrypc) clog << _(" (naked)"); //TRANSLATORS: Here we're adding some classification datum (ie we went over) if (dwarf_haspc (& it->die, DWARF_LINEADDR(postprologue_srcline)) != 1) clog << _(" (tail-call?)"); //TRANSLATORS: Here we're adding some classification datum (ie it was marked) if (DWARF_LINEPROLOGUEEND(postprologue_srcline)) clog << _(" (marked)"); clog << " = 0x" << hex << postprologue_addr << dec << "\n"; } } // loop over functions } bool dwflpp::function_entrypc (Dwarf_Addr * addr) { assert (function); // assign default value *addr = 0; // PR10574: reject 0, which tends to be eliminated COMDAT if (dwarf_entrypc (function, addr) == 0 && *addr != 0) return true; /* Assume the entry pc is the base address, or (if zero) the first address of the ranges covering this DIE. */ Dwarf_Addr start = 0, end; if (dwarf_ranges (function, 0, addr, &start, &end) >= 0) { if (*addr == 0) *addr = start; return *addr != 0; } return false; } bool dwflpp::die_entrypc (Dwarf_Die * die, Dwarf_Addr * addr) { int rc = 0; string lookup_method; * addr = 0; lookup_method = "dwarf_entrypc"; rc = dwarf_entrypc (die, addr); if (rc) { lookup_method = "dwarf_ranges"; Dwarf_Addr base; Dwarf_Addr begin; Dwarf_Addr end; ptrdiff_t offset = dwarf_ranges (die, 0, &base, &begin, &end); if (offset < 0) rc = -1; else if (offset > 0) { * addr = begin; rc = 0; // Now we need to check that there are no more ranges // associated with this function, which could conceivably // happen if a function is inlined, then pieces of it are // split amongst different conditional branches. It's not // obvious which of them to favour. As a heuristic, we // pick the beginning of the first range, and ignore the // others (but with a warning). unsigned extra = 0; while ((offset = dwarf_ranges (die, offset, &base, &begin, &end)) > 0) extra ++; if (extra) lookup_method += _F(", ignored %s more", lex_cast(extra).c_str()); } } // PR10574: reject subprograms where the entrypc address turns out // to be 0, since they tend to correspond to duplicate-eliminated // COMDAT copies of C++ functions. if (rc == 0 && *addr == 0) { lookup_method += _(" (skip comdat)"); rc = 1; } if (sess.verbose > 2) clog << _F("entry-pc lookup (%s dieoffset: %s) = %#" PRIx64 " (rc %d)", lookup_method.c_str(), lex_cast_hex(dwarf_dieoffset(die)).c_str(), *addr, rc) << endl; return (rc == 0); } void dwflpp::function_die (Dwarf_Die *d) { assert (function); *d = *function; } void dwflpp::function_file (char const ** c) { assert (function); assert (c); *c = dwarf_decl_file (function); if (*c == NULL) { // The line table might know. Dwarf_Addr pc; if (dwarf_lowpc(function, &pc) == 0) *c = pc_line (pc, NULL, NULL); if (*c == NULL) *c = ""; } } void dwflpp::function_line (int *linep) { assert (function); if (dwarf_decl_line (function, linep) != 0) { // The line table might know. Dwarf_Addr pc; if (dwarf_lowpc(function, &pc) == 0) pc_line (pc, linep, NULL); } } bool dwflpp::die_has_pc (Dwarf_Die & die, Dwarf_Addr pc) { int res = dwarf_haspc (&die, pc); // dwarf_ranges will return -1 if a function die has no DW_AT_ranges // if (res == -1) // DWARF_ASSERT ("dwarf_haspc", res); return res == 1; } bool dwflpp::inner_die_containing_pc(Dwarf_Die& scope, Dwarf_Addr addr, Dwarf_Die& result) { result = scope; // Sometimes we're in a bad scope to begin with -- just let it be. This can // happen for example if the compiler outputs a label PC that's just outside // the lexical scope. We can't really do anything about that, but variables // will probably not be accessible in this case. if (!die_has_pc(scope, addr)) return false; Dwarf_Die child, import; int rc = dwarf_child(&result, &child); while (rc == 0) { switch (dwarf_tag (&child)) { case DW_TAG_imported_unit: // The children of the imported unit need to be treated as if // they are inserted here. So look inside and set result if // found. if (dwarf_attr_die(&child, DW_AT_import, &import)) { Dwarf_Die import_result; if (inner_die_containing_pc(import, addr, import_result)) { result = import_result; return true; } } break; // lexical tags to recurse within the same starting scope // NB: this intentionally doesn't cross into inlines! case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: if (die_has_pc(child, addr)) { result = child; rc = dwarf_child(&result, &child); continue; } } rc = dwarf_siblingof(&child, &child); } return true; } void dwflpp::get_locals(vector& scopes, set& locals) { // XXX Shouldn't this be walking up to outer scopes too? get_locals_die(scopes[0], locals); } void dwflpp::get_locals_die(Dwarf_Die& die, set& locals) { // Try to get the first child of die. Dwarf_Die child, import; if (dwarf_child (&die, &child) == 0) { do { const char *name; // Output each sibling's name (that is a variable or // parameter) to 'o'. switch (dwarf_tag (&child)) { case DW_TAG_variable: case DW_TAG_formal_parameter: name = dwarf_diename (&child); if (name) locals.insert(string("$") + name); break; case DW_TAG_imported_unit: // Treat the imported unit children as if they are // children of the given DIE. if (dwarf_attr_die(&child, DW_AT_import, &import)) get_locals_die (import, locals); break; default: break; } } while (dwarf_siblingof (&child, &child) == 0); } } Dwarf_Attribute * dwflpp::find_variable_and_frame_base (vector& scopes, Dwarf_Addr pc, string const & local, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Attribute *fb_attr_mem, Dwarf_Die *funcdie) { Dwarf_Die *scope_die = &scopes[0]; Dwarf_Attribute *fb_attr = NULL; assert (cu); int declaring_scope = dwarf_getscopevar (&scopes[0], scopes.size(), local.c_str(), 0, NULL, 0, 0, vardie); if (declaring_scope < 0) { set locals; get_locals(scopes, locals); string sugs = levenshtein_suggest(local, locals); // probably not that many, so no limit if (pc) throw SEMANTIC_ERROR (_F("unable to find local '%s', [man error::dwarf] dieoffset %s in %s, near pc %s %s %s %s (%s)", local.c_str(), lex_cast_hex(dwarf_dieoffset(scope_die)).c_str(), module_name.c_str(), lex_cast_hex(pc).c_str(), (scope_die == NULL) ? "" : _("in"), (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: ""), (sugs.empty() ? (_("")) : (_("alternatives: ") + sugs + ")")).c_str()), e->tok); else throw SEMANTIC_ERROR (_F("unable to find global '%s', [man error::dwarf] dieoffset %s in %s, %s %s %s (%s)", local.c_str(), lex_cast_hex(dwarf_dieoffset(scope_die)).c_str(), module_name.c_str(), (scope_die == NULL) ? "" : _("in"), (dwarf_diename(scope_die) ?: ""), cu_name().c_str(), (sugs.empty() ? (_("")) : (_("alternatives: ") + sugs + ")")).c_str()), e->tok); } *funcdie = scopes[declaring_scope]; /* Some GCC versions would output duplicate external variables, one without a location attribute. If so, try to find the other if it exists in the same scope. See GCC PR51410. */ Dwarf_Attribute attr_mem; if (dwarf_attr_integrate (vardie, DW_AT_const_value, &attr_mem) == NULL && dwarf_attr_integrate (vardie, DW_AT_location, &attr_mem) == NULL && dwarf_attr_integrate (vardie, DW_AT_external, &attr_mem) != NULL && dwarf_tag(&scopes[declaring_scope]) == DW_TAG_compile_unit) { Dwarf_Die orig_vardie = *vardie; bool alt_found = false; if (dwarf_child(&scopes[declaring_scope], vardie) == 0) do { // Note, not handling DW_TAG_imported_unit, assuming GCC // version is recent enough to not need this workaround if // we would see an imported unit. if (dwarf_tag (vardie) == DW_TAG_variable && strcmp (dwarf_diename (vardie), local.c_str ()) == 0 && (dwarf_attr_integrate (vardie, DW_AT_external, &attr_mem) != NULL) && ((dwarf_attr_integrate (vardie, DW_AT_const_value, &attr_mem) != NULL) || (dwarf_attr_integrate (vardie, DW_AT_location, &attr_mem) != NULL))) alt_found = true; } while (!alt_found && dwarf_siblingof(vardie, vardie) == 0); if (! alt_found) *vardie = orig_vardie; } // Global vars don't need (cannot use) frame base in location descriptor. if (pc == 0) return NULL; /* We start out walking the "lexical scopes" as returned by * as returned by dwarf_getscopes for the address, starting with the * declaring_scope that the variable was found in. */ vector physcopes, *fbscopes = &scopes; for (size_t inner = declaring_scope; inner < fbscopes->size() && fb_attr == NULL; ++inner) { Dwarf_Die& scope = (*fbscopes)[inner]; switch (dwarf_tag (&scope)) { default: continue; case DW_TAG_subprogram: case DW_TAG_entry_point: fb_attr = dwarf_attr_integrate (&scope, DW_AT_frame_base, fb_attr_mem); break; case DW_TAG_inlined_subroutine: /* Unless we already are going through the "pyshical die tree", * we now need to start walking the die tree where this * subroutine is inlined to find the appropriate frame base. */ if (declaring_scope != -1) { physcopes = getscopes_die(&scope); if (physcopes.empty()) throw SEMANTIC_ERROR (_F("unable to get die scopes for '%s' in an inlined subroutine", local.c_str()), e->tok); fbscopes = &physcopes; inner = 0; // zero is current scope, for look will increase. declaring_scope = -1; } break; } } return fb_attr; } /* Returns a human readable string with suggested locations where a DIE attribute is valid. */ static string suggested_locations_string(Dwarf_Attribute *attr) { string locsstr; if (attr == NULL) locsstr = ""; else { #if _ELFUTILS_PREREQ (0, 158) Dwarf_Op *expr; size_t exprlen; Dwarf_Addr base, start, end; ptrdiff_t off = 0; off = dwarf_getlocations (attr, off, &base, &start, &end, &expr, &exprlen); if (off > 0) { locsstr = _("alternative locations: "); while (off > 0) { locsstr += "["; locsstr += lex_cast_hex(start); locsstr += ","; locsstr += lex_cast_hex(end); locsstr += "]"; off = dwarf_getlocations (attr, off, &base, &start, &end, &expr, &exprlen); if (off > 0) locsstr += ", "; } } else if (off == 0) locsstr = _(""); else locsstr = _F("", dwarf_errmsg(-1)); #else locsstr = ""; #endif /* _ELFUTILS_PREREQ (0, 158) */ } return locsstr; } /* Produce a human readable name for a DIE. */ static string die_name_string (Dwarf_Die *die) { string res; const char *name = dwarf_linkage_name(die); if (name == NULL) name = dwarf_diename (die); size_t demangle_buffer_len = 0; char *demangle_buffer = NULL; if (name != NULL && name[0] == '_' && name[1] == 'Z') { int status = -1; char *dsymname = abi::__cxa_demangle (name, demangle_buffer, &demangle_buffer_len, &status); if (status == 0) name = demangle_buffer = dsymname; } if (name != NULL) res = name; else res = _(" 0) { linestr += ":" + lex_cast(lineno); if (col > 0) linestr += ":" + lex_cast(col); } } else linestr += _("unknown source"); return linestr; } /* Returns a human readable DIE offset for use in error messages. Includes DIE offset and DWARF file used. */ string dwflpp::die_location_as_string(Dwarf_Die *die) { string locstr; /* DIE offset */ locstr += _("dieoffset: "); locstr += lex_cast_hex(dwarf_dieoffset(die)); /* DWARF file */ const char *mainfile, *debugfile; locstr += _(" from "); if (dwfl_module_info (module, NULL, NULL, NULL, NULL, NULL, &mainfile, &debugfile) == NULL || (mainfile == NULL && debugfile == NULL)) { locstr += _("unknown debug file for "); locstr += module_name; } else { if (debugfile != NULL) locstr += debugfile; else locstr += mainfile; } return locstr; } /* Returns a human readable (inlined) function and source file/line location for a pc location. */ string dwflpp::pc_location_as_function_string(Dwarf_Addr pc) { string locstr; locstr = _("function: "); /* Find the first function-like DIE with a name in scope. */ Dwarf_Die funcdie_mem; Dwarf_Die *funcdie = NULL; string funcname = ""; Dwarf_Die *scopes = NULL; int nscopes = dwarf_getscopes (cu, pc, &scopes); for (int i = 0; funcname == "" && i < nscopes; i++) { Dwarf_Die *scope = &scopes[i]; int tag = dwarf_tag (scope); if (tag == DW_TAG_subprogram || tag == DW_TAG_inlined_subroutine || tag == DW_TAG_entry_point) funcname = die_name_string (scope); if (funcname != "") { funcdie_mem = *scope; funcdie = &funcdie_mem; } } free (scopes); /* source location */ if (funcname == "") locstr += _(" at ") + pc_die_line_string (pc, NULL); else { int nscopes = dwarf_getscopes_die (funcdie, &scopes); if (nscopes > 0) { /* scopes[0] == funcdie, the lowest level, for which we already have the name. This is the actual source location where it happened. */ locstr += funcname; locstr += _(" at "); locstr += pc_die_line_string (pc, NULL); /* last_scope is the source location where the next inlined frame/function call was done. */ Dwarf_Die *last_scope = &scopes[0]; for (int i = 1; i < nscopes; i++) { Dwarf_Die *scope = &scopes[i]; int tag = dwarf_tag (scope); if (tag != DW_TAG_inlined_subroutine && tag != DW_TAG_entry_point && tag != DW_TAG_subprogram) continue; locstr += _(" inlined by "); locstr += die_name_string (scope); locstr += _(" at "); locstr += pc_die_line_string (pc, last_scope); /* Found the "top-level" in which everything was inlined. */ if (tag == DW_TAG_subprogram) break; last_scope = scope; } } else { locstr += funcname; locstr += _(" at "); locstr += pc_die_line_string (pc, NULL); } free (scopes); } return locstr; } struct location * dwflpp::translate_location(location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Addr pc, Dwarf_Attribute *fb_attr, const target_symbol *e, location *input) { /* DW_AT_data_member_location, can be either constant offsets (struct member fields), or full blown location expressions. */ /* There is no location expression, but a constant value instead. */ if (dwarf_whatattr (attr) == DW_AT_const_value) return ctx->translate_constant (attr); Dwarf_Op *expr; size_t len; /* PR9768: formerly, we added pc+module_bias here. However, that bias value is not present in the pc value by the time we get it, so adding it would result in false negatives of variable reachibility. In other instances further below, the c_translate_FOO functions, the module_bias value used to be passed in, but instead should now be zero for the same reason. */ retry: switch (dwarf_getlocation_addr (attr, pc /*+ module_bias*/, &expr, &len, 1)) { case 1: /* Should always happen. */ if (len > 0) break; /* Fall through. */ case 0: /* Shouldn't happen.... but can, e.g. due to PR15123. */ { Dwarf_Addr pc2 = pr15123_retry_addr (pc, die); if (pc2 != 0) { pc = pc2; goto retry; } } /* FALLTHROUGH */ { string msg = _F("not accessible at this address (pc: %s) [man error::dwarf]", lex_cast_hex(pc).c_str()); semantic_error err(ERR_SRC, msg, e->tok); err.details.push_back(die_location_as_string(die)); err.details.push_back(pc_location_as_function_string(pc)); err.details.push_back(suggested_locations_string(attr)); throw err; } default: /* Shouldn't happen. */ case -1: { string msg = _F("dwarf_getlocation_addr failed at this address (pc: %s) [man error::dwarf]", lex_cast_hex(pc).c_str()); semantic_error err(ERR_SRC, msg, e->tok); string dwarf_err = _F("dwarf_error: %s", dwarf_errmsg(-1)); err.details.push_back(dwarf_err); err.details.push_back(die_location_as_string(die)); err.details.push_back(pc_location_as_function_string(pc)); err.details.push_back(suggested_locations_string(attr)); throw err; } } Dwarf_Op *cfa_ops = NULL; // pc is in the dw address space of the current module, which is what // c_translate_location expects. get_cfa_ops wants the global dwfl address. // cfa_ops only make sense for locals. if (pc) { Dwarf_Addr addr = pc + module_bias; cfa_ops = get_cfa_ops (addr); } // ??? Reset these afterward. ctx->cfa_ops = cfa_ops; ctx->fb_attr = fb_attr; ctx->pc = pc; ctx->dw = this; return ctx->translate_location (expr, len, input); } void dwflpp::get_members(Dwarf_Die *typedie, set& members, set &dupes) { const int typetag = dwarf_tag (typedie); /* compile and partial unit included for recursion through imported_unit below. */ if (typetag != DW_TAG_structure_type && typetag != DW_TAG_class_type && typetag != DW_TAG_union_type && typetag != DW_TAG_compile_unit && typetag != DW_TAG_partial_unit) { throw SEMANTIC_ERROR(_F("Type %s isn't a struct/class/union", dwarf_type_name(typedie).c_str())); } // Try to get the first child of vardie. Dwarf_Die die_mem, import; Dwarf_Die *die = &die_mem; switch (dwarf_child (typedie, die)) { case 1: // No children. throw SEMANTIC_ERROR(_F("Type %s is empty", dwarf_type_name(typedie).c_str())); case -1: // Error. default: // Shouldn't happen. throw SEMANTIC_ERROR(_F("Type %s: %s", dwarf_type_name(typedie).c_str(), dwarf_errmsg(-1))); case 0: // Success. break; } // Add each sibling's name to members set do { int tag = dwarf_tag(die); /* The children of an imported_unit should be treated as members too. */ if (tag == DW_TAG_imported_unit && dwarf_attr_die(die, DW_AT_import, &import)) get_members(&import, members, dupes); if (tag != DW_TAG_member && tag != DW_TAG_inheritance) continue; const char *member = dwarf_diename (die) ; if ( tag == DW_TAG_member && member != NULL ) { // Only output if this is new, to avoid inheritance dupes. if (dupes.insert(member).second) members.insert(member); } else { Dwarf_Die temp_die; if (!dwarf_attr_die (die, DW_AT_type, &temp_die)) { string source = dwarf_decl_file(die) ?: ""; int line = -1; dwarf_decl_line(die, &line); throw SEMANTIC_ERROR(_F("Couldn't obtain type attribute for anonymous " "member at %s:%d", source.c_str(), line)); } get_members(&temp_die, members, dupes); } } while (dwarf_siblingof (die, die) == 0); } bool dwflpp::find_struct_member(const target_symbol::component& c, Dwarf_Die *parentdie, Dwarf_Die *memberdie, vector& dies, vector& locs) { Dwarf_Attribute attr; Dwarf_Die die; /* With inheritance, a subclass may mask member names of parent classes, so * our search among the inheritance tree must be breadth-first rather than * depth-first (recursive). The parentdie is still our starting point. */ deque inheritees(1, *parentdie); for (; !inheritees.empty(); inheritees.pop_front()) { switch (dwarf_child (&inheritees.front(), &die)) { case 0: /* First child found. */ break; case 1: /* No children. */ continue; case -1: /* Error. */ default: /* Shouldn't happen */ throw SEMANTIC_ERROR (dwarf_type_name(&inheritees.front()) + ": " + string (dwarf_errmsg (-1)), c.tok); } do { int tag = dwarf_tag(&die); /* recurse into imported units as if they are anonymoust structs */ Dwarf_Die import; if (tag == DW_TAG_imported_unit && dwarf_attr_die(&die, DW_AT_import, &import) && find_struct_member(c, &import, memberdie, dies, locs)) goto success; if (tag != DW_TAG_member && tag != DW_TAG_inheritance) continue; const char *name = dwarf_diename(&die); if (tag == DW_TAG_inheritance) { /* Remember inheritee for breadth-first search. */ Dwarf_Die inheritee; if (dwarf_attr_die (&die, DW_AT_type, &inheritee)) inheritees.push_back(inheritee); } else if (name == NULL) { /* Need to recurse for anonymous structs/unions. */ Dwarf_Die subdie; if (dwarf_attr_die (&die, DW_AT_type, &subdie) && find_struct_member(c, &subdie, memberdie, dies, locs)) goto success; } else if (name == c.member) { *memberdie = die; goto success; } } while (dwarf_siblingof (&die, &die) == 0); } return false; success: /* As we unwind the recursion, we need to build the chain of * locations that got to the final answer. */ if (dwarf_attr_integrate (&die, DW_AT_data_member_location, &attr)) { dies.insert(dies.begin(), die); locs.insert(locs.begin(), attr); } /* Union members don't usually have a location, * but just use the containing union's location. */ else if (dwarf_tag(parentdie) != DW_TAG_union_type) throw SEMANTIC_ERROR (_F("no location for field '%s':%s", c.member.c_str(), dwarf_errmsg(-1)), c.tok); return true; } static inline void dwarf_die_type (Dwarf_Die *die, Dwarf_Die *typedie_mem, const token *tok=NULL) { if (!dwarf_attr_die (die, DW_AT_type, typedie_mem)) throw SEMANTIC_ERROR (_F("cannot get type of field: %s", dwarf_errmsg(-1)), tok); } void dwflpp::translate_components(location_context *ctx, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Die *typedie, bool lvalue, unsigned first) { unsigned i = first; while (i < e->components.size()) { const target_symbol::component& c = e->components[i]; switch (dwarf_tag (typedie)) { case DW_TAG_typedef: case DW_TAG_const_type: case DW_TAG_volatile_type: case DW_TAG_restrict_type: /* Just iterate on the referent type. */ dwarf_die_type (typedie, typedie, c.tok); break; case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: translate_pointer (*ctx, typedie, lvalue); dwarf_die_type (typedie, typedie, c.tok); break; case DW_TAG_pointer_type: /* A pointer with no type is a void* -- can't dereference it. */ if (!dwarf_hasattr_integrate (typedie, DW_AT_type)) throw SEMANTIC_ERROR (_F("invalid access '%s' vs '%s'", lex_cast(c).c_str(), dwarf_type_name(typedie).c_str()), c.tok); if (!ctx->locations.empty()) translate_pointer (*ctx, typedie, lvalue); if (c.type != target_symbol::comp_literal_array_index && c.type != target_symbol::comp_expression_array_index) { dwarf_die_type (typedie, typedie, c.tok); break; } /* Fallthrough */ /* else an array access */ case DW_TAG_array_type: if (c.type == target_symbol::comp_literal_array_index) { if (c.num_index != 0 && !ctx->locations.empty()) ctx->translate_array(typedie, ctx->locations.back(), new literal_number(c.num_index)); } else if (c.type == target_symbol::comp_expression_array_index) { if (!ctx->locations.empty()) ctx->translate_array(typedie, ctx->locations.back(), c.expr_index); } else throw SEMANTIC_ERROR (_F("invalid access '%s' for array type", lex_cast(c).c_str()), c.tok); dwarf_die_type (typedie, typedie, c.tok); *vardie = *typedie; ++i; break; case DW_TAG_structure_type: case DW_TAG_union_type: case DW_TAG_class_type: if (c.type != target_symbol::comp_struct_member) throw SEMANTIC_ERROR (_F("invalid access '%s' for %s", lex_cast(c).c_str(), dwarf_type_name(typedie).c_str())); if (dwarf_hasattr(typedie, DW_AT_declaration)) { Dwarf_Die *tmpdie = declaration_resolve(typedie); if (tmpdie == NULL) throw SEMANTIC_ERROR (_F("unresolved %s", dwarf_type_name(typedie).c_str()), c.tok); *typedie = *tmpdie; } { vector dies; vector locs; if (!find_struct_member(c, typedie, vardie, dies, locs)) { /* Add a file:line hint for anonymous types */ string source; if (!dwarf_hasattr_integrate(typedie, DW_AT_name)) { int line; const char *file = dwarf_decl_file(typedie); if (file && dwarf_decl_line(typedie, &line) == 0) source = " (" + string(file) + ":" + lex_cast(line) + ")"; } set members, member_dupes; get_members(typedie, members, member_dupes); string sugs = levenshtein_suggest(c.member, members); if (!sugs.empty()) sugs = " (alternatives: " + sugs + ")"; throw SEMANTIC_ERROR(_F("unable to find member '%s' for %s%s%s", c.member.c_str(), dwarf_type_name(typedie).c_str(), source.c_str(), sugs.c_str()), c.tok); } if (!ctx->locations.empty()) { location *n = ctx->locations.back(); for (unsigned j = 0; j < locs.size(); ++j) n = translate_location (ctx, &locs[j], &dies[j], pc, NULL, e, n); ctx->locations.push_back(n); } } dwarf_die_type (vardie, typedie, c.tok); ++i; break; case DW_TAG_enumeration_type: case DW_TAG_base_type: throw SEMANTIC_ERROR (_F("invalid access '%s' vs. %s", lex_cast(c).c_str(), dwarf_type_name(typedie).c_str()), c.tok); break; case -1: throw SEMANTIC_ERROR (_F("cannot find type: %s", dwarf_errmsg(-1)), c.tok); break; default: throw SEMANTIC_ERROR (_F("%s: unexpected type tag %s", dwarf_type_name(typedie).c_str(), lex_cast(dwarf_tag(typedie)).c_str()), c.tok); break; } } } void dwflpp::resolve_unqualified_inner_typedie (Dwarf_Die *typedie, Dwarf_Die *innerdie, const target_symbol *e) { int typetag = dwarf_tag (typedie); *innerdie = *typedie; while (typetag == DW_TAG_typedef || typetag == DW_TAG_const_type || typetag == DW_TAG_volatile_type || typetag == DW_TAG_restrict_type) { if (!dwarf_attr_die (innerdie, DW_AT_type, innerdie)) throw SEMANTIC_ERROR (_F("cannot get type of pointee: %s", dwarf_errmsg(-1)), e->tok); typetag = dwarf_tag (innerdie); } } static void get_bitfield (const target_symbol *e, Dwarf_Die *die, Dwarf_Word byte_size, Dwarf_Word *bit_offset, Dwarf_Word *bit_size) { Dwarf_Attribute attr_mem; if (dwarf_attr_integrate (die, DW_AT_bit_offset, &attr_mem) == NULL || dwarf_formudata (&attr_mem, bit_offset) != 0 || dwarf_attr_integrate (die, DW_AT_bit_size, &attr_mem) == NULL || dwarf_formudata (&attr_mem, bit_size) != 0) throw SEMANTIC_ERROR (_F("cannot get bit field parameters: %s", dwarf_errmsg(-1)), e->tok); /* Convert the big-bit-endian numbers from Dwarf to little-endian. This means we can avoid having to propagate byte_size further. */ *bit_offset = byte_size * 8 - *bit_offset - *bit_size; } void dwflpp::translate_base_ref (location_context &ctx, Dwarf_Word byte_size, bool signed_p, bool lvalue_p) { location *loc = ctx.locations.back (); restart: switch (loc->type) { case loc_value: // The existing program is the value. break; case loc_address: { target_deref *d = new target_deref; d->tok = ctx.e->tok; d->addr = loc->program; d->size = byte_size; d->signed_p = signed_p; d->userspace_p = ctx.userspace_p; loc = ctx.new_location(loc_value); loc->program = d; loc->byte_size = byte_size; // ??? There is code in *translate.cxx to handle the sign- // (or implicit zero-) extension during the load. We might // be better off falling through to the shared code below. return; } case loc_register: if (loc->offset != 0) throw SEMANTIC_ERROR (_("cannot handle offset into register"), ctx.e->tok); // The existing program is the value. break; case loc_constant: { if (loc->byte_size < byte_size) throw SEMANTIC_ERROR (_("requested size larger than constant"), ctx.e->tok); /* ??? Byte ordering. */ int64_t val; switch (byte_size) { case 1: if (signed_p) val = *(int8_t *)loc->constant_block; else val = *(uint8_t *)loc->constant_block; break; case 2: if (signed_p) val = *(int16_t *)loc->constant_block; else val = *(uint16_t *)loc->constant_block; break; case 4: if (signed_p) val = *(int32_t *)loc->constant_block; else val = *(uint32_t *)loc->constant_block; break; case 8: val = *(int64_t *)loc->constant_block; break; default: throw SEMANTIC_ERROR (_("unhandled constant size"), ctx.e->tok); } loc = ctx.new_location(loc_value); loc->program = new literal_number(val); loc->byte_size = byte_size; return; } case loc_noncontiguous: loc = loc->pieces; if (loc && loc->byte_size <= byte_size) { ctx.locations.push_back(loc); goto restart; } throw SEMANTIC_ERROR (_("noncontiguous location for base fetch"), ctx.e->tok); case loc_implicit_pointer: if (loc->offset != 0) throw SEMANTIC_ERROR (_("cannot handle offset into implicit pointer"), ctx.e->tok); loc = loc->target; if (loc) { ctx.locations.push_back(loc); goto restart; } throw SEMANTIC_ERROR (_("pointer optimized out"), ctx.e->tok); case loc_unavailable: throw SEMANTIC_ERROR (_("location not available"), ctx.e->tok); default: abort(); } // Normalize LOC from the sign and width of the type to int64_t. // ??? We might require extending when assigning to a target_register. // Give this a try first... if (byte_size < 8 && !lvalue_p) { binary_expression *out = new binary_expression; out->tok = ctx.e->tok; if (signed_p) { int shift = 64 - 8 * byte_size; binary_expression *shl = new binary_expression; shl->tok = ctx.e->tok; shl->op = "<<"; shl->left = loc->program; shl->right = new literal_number(shift); out->op = ">>"; out->left = shl; out->right = new literal_number(shift); } else { out->op = "&"; out->left = loc->program; out->right = new literal_number((1ull << (byte_size * 8)) - 1); } loc = ctx.new_location(loc_value); loc->program = out; loc->byte_size = byte_size; } } void dwflpp::translate_bitfield(location_context &ctx, Dwarf_Word byte_size, Dwarf_Word bit_offset, Dwarf_Word bit_size, bool signed_p) { location *loc = ctx.locations.back (); target_bitfield *bf = new target_bitfield; bf->tok = ctx.e->tok; bf->base = loc->program; bf->offset = bit_offset; bf->size = bit_size; bf->signed_p = signed_p; loc = ctx.new_location(loc_value); loc->program = bf; loc->byte_size = byte_size; ctx.locations.push_back(loc); } // As usual, leave the result as the last location in ctx. void dwflpp::translate_final_fetch_or_store (location_context &ctx, Dwarf_Die *vardie, Dwarf_Die *start_typedie, bool lvalue, Dwarf_Die *typedie) { const target_symbol *e = ctx.e; /* First boil away any qualifiers associated with the type DIE of the final location to be accessed. */ resolve_unqualified_inner_typedie (start_typedie, typedie, e); /* If we're looking for an address, then we can just provide what we computed to this point, without using a fetch/store. */ if (ctx.e->addressof) { if (lvalue) throw SEMANTIC_ERROR (_("cannot write to member address"), e->tok); if (dwarf_hasattr_integrate (vardie, DW_AT_bit_offset) || dwarf_hasattr_integrate (vardie, DW_AT_data_bit_offset)) throw SEMANTIC_ERROR (_("cannot take the address of a bit field"), e->tok); switch (ctx.locations.back()->type) { case loc_address: /* do nothing, we're done */ break; case loc_register: throw SEMANTIC_ERROR (_("cannot take address of object in register"), e->tok); break; case loc_noncontiguous: throw SEMANTIC_ERROR (_("cannot take address of noncontiguous object"), e->tok); break; case loc_value: throw SEMANTIC_ERROR (_("cannot take address of computed value"), e->tok); break; case loc_constant: throw SEMANTIC_ERROR (_("cannot take address of constant value"), e->tok); break; case loc_unavailable: throw SEMANTIC_ERROR (_("cannot take address of unavailable value"), e->tok); break; case loc_implicit_pointer: throw SEMANTIC_ERROR (_("cannot take address of implicit pointer"), e->tok); break; default: abort (); break; } return; } /* Then switch behavior depending on the type of fetch/store we want, and the type and pointer-ness of the final location. */ int typetag = dwarf_tag (typedie); switch (typetag) { default: throw SEMANTIC_ERROR (_F("unsupported type tag %s for %s", lex_cast(typetag).c_str(), dwarf_type_name(typedie).c_str()), e->tok); case DW_TAG_structure_type: case DW_TAG_class_type: case DW_TAG_union_type: { string type_name = dwarf_type_name(typedie); string decl_file = dwarf_decl_file(typedie) ?: ""; int decl_line = 0; (void) dwarf_decl_line(typedie, &decl_line); string decl_source; // PR20423: assemble an error message at least as informative // as bad-member message in translate_components() if (decl_file[0] && decl_line > 0) decl_source = " (" + decl_file + ":" + lex_cast(decl_line) + ")"; string a_member; try { set members; set dupes; get_members (typedie, members, dupes); if (members.begin() != members.end()) { a_member = " such as '->" + (*members.begin()) + "'"; } } catch (...) { // leave a_member empty } throw SEMANTIC_ERROR (_F("'%s'%s is being accessed instead of a member%s", type_name.c_str(), decl_source.c_str(), a_member.c_str()), (e->components.size() > 0 ? (e->components[e->components.size()-1].tok) : (e->tok))); } case DW_TAG_base_type: case DW_TAG_enumeration_type: // Reject types we can't handle in systemtap { bool signed_p = false; if (typetag == DW_TAG_base_type) { Dwarf_Attribute encoding_attr; Dwarf_Word encoding = (Dwarf_Word) -1; dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, &encoding_attr), &encoding); if (encoding == (Dwarf_Word) -1) { throw (SEMANTIC_ERROR (_F("unsupported type (mystery encoding %s for %s", lex_cast(encoding).c_str(), dwarf_type_name(typedie).c_str()), e->tok)); } if (encoding == DW_ATE_float || encoding == DW_ATE_complex_float /* XXX || many others? */) { throw (SEMANTIC_ERROR (_F("unsupported type (encoding %s) for %s", lex_cast(encoding).c_str(), dwarf_type_name(typedie).c_str()), e->tok)); } signed_p = (encoding == DW_ATE_signed || encoding == DW_ATE_signed_char); } Dwarf_Attribute size_attr; Dwarf_Word byte_size; if (dwarf_attr_integrate (typedie, DW_AT_byte_size, &size_attr) == NULL || dwarf_formudata (&size_attr, &byte_size) != 0) { throw (SEMANTIC_ERROR (_F("cannot get byte_size attribute for type %s: %s", dwarf_diename (typedie) ?: "", dwarf_errmsg (-1)), e->tok)); } translate_base_ref (ctx, byte_size, signed_p, lvalue); if (dwarf_hasattr_integrate (vardie, DW_AT_bit_offset)) { Dwarf_Word bit_offset = 0; Dwarf_Word bit_size = 0; get_bitfield (e, vardie, byte_size, &bit_offset, &bit_size); translate_bitfield (ctx, byte_size, bit_offset, bit_size, signed_p); } } break; case DW_TAG_array_type: case DW_TAG_pointer_type: case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: if (lvalue) { if (typetag == DW_TAG_array_type) throw SEMANTIC_ERROR (_("cannot write to array address"), e->tok); if (typetag == DW_TAG_reference_type || typetag == DW_TAG_rvalue_reference_type) throw SEMANTIC_ERROR (_("cannot write to reference"), e->tok); assert (typetag == DW_TAG_pointer_type); } if (typetag != DW_TAG_array_type) translate_pointer (ctx, typedie, lvalue); break; } } void dwflpp::translate_pointer(location_context &ctx, Dwarf_Die *typedie, bool lvalue) { // ??? We also get DW_TAG_array_type here. // assert (dwarf_tag (typedie) == DW_TAG_pointer_type || // dwarf_tag (typedie) == DW_TAG_reference_type || // dwarf_tag (typedie) == DW_TAG_rvalue_reference_type); location *loc = ctx.locations.back (); if (loc->type != loc_implicit_pointer) { Dwarf_Word byte_size; if (dwarf_aggregate_size (typedie, &byte_size) != 0) throw SEMANTIC_ERROR (_F("cannot get size for type %s: %s", dwarf_diename (typedie) ?: "", dwarf_errmsg (-1)), ctx.e->tok); /* We know this is a pointer, therefore the signedness is irrelevant. */ translate_base_ref (ctx, byte_size, false, lvalue); /* We're going to want to dereference this pointer. Therefore note that this is an address. */ loc = ctx.locations.back (); loc->type = loc_address; } } Dwarf_Addr dwflpp::vardie_from_symtable (Dwarf_Die *vardie, Dwarf_Addr *addr) { const char *name = dwarf_linkage_name (vardie) ?: dwarf_diename (vardie); if (sess.verbose > 2) clog << _F("finding symtable address for %s\n", name); *addr = 0; int syms = dwfl_module_getsymtab (module); DWFL_ASSERT (_("Getting symbols"), syms >= 0); for (int i = 0; *addr == 0 && i < syms; i++) { GElf_Sym sym; GElf_Word shndxp; const char *symname = dwfl_module_getsym(module, i, &sym, &shndxp); if (symname && ! strcmp (name, symname) && sym.st_shndx != SHN_UNDEF && (GELF_ST_TYPE (sym.st_info) == STT_NOTYPE // PR13284 || GELF_ST_TYPE (sym.st_info) == STT_OBJECT)) *addr = sym.st_value; } // Don't relocate for the kernel, or kernel modules we handle those // specially in emit_address. if (dwfl_module_relocations (module) == 1 && module_name != TOK_KERNEL) dwfl_module_relocate_address (module, addr); if (sess.verbose > 2) clog << _F("found %s @%#" PRIx64 "\n", name, *addr); return *addr; } bool dwflpp::literal_stmt_for_local (location_context &ctx, vector& scopes, string const & local, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem) { Dwarf_Die vardie, funcdie; Dwarf_Attribute fb_attr_mem, *fb_attr = NULL; // NB: when addr_loc is used for a synthesized DW_OP_addr below, then it // needs to remain valid until express_as_string() has finished with it. Dwarf_Op addr_loc; fb_attr = find_variable_and_frame_base (scopes, ctx.pc, local, e, &vardie, &fb_attr_mem, &funcdie); if (sess.verbose>2) { if (ctx.pc) clog << _F("finding location for local '%s' near address %#" PRIx64 ", module bias %#" PRIx64 "\n", local.c_str(), ctx.pc, module_bias); else clog << _F("finding location for global '%s' in CU '%s'\n", local.c_str(), cu_name().c_str()); } /* Given $foo->bar->baz[NN], translate the location of foo. */ Dwarf_Attribute attr_mem; ctx.attr = &attr_mem; ctx.fb_attr = fb_attr; ctx.dw = this; ctx.function = &funcdie; if (dwarf_attr_integrate (&vardie, DW_AT_const_value, &attr_mem) == NULL && dwarf_attr_integrate (&vardie, DW_AT_location, &attr_mem) == NULL) { memset(&addr_loc, 0, sizeof(Dwarf_Op)); addr_loc.atom = DW_OP_addr; // If it is an external variable try the symbol table. PR10622. if (dwarf_attr_integrate (&vardie, DW_AT_external, &attr_mem) != NULL && vardie_from_symtable (&vardie, &addr_loc.number) != 0) { ctx.translate_location (&addr_loc, 1, NULL); } else { string msg = _F("failed to retrieve location attribute for '%s' [man error::dwarf]", local.c_str()); semantic_error err(ERR_SRC, msg, e->tok); err.details.push_back(die_location_as_string(&vardie)); err.details.push_back(pc_location_as_function_string(ctx.pc)); throw err; } } else translate_location (&ctx, &attr_mem, &vardie, ctx.pc, fb_attr, e, NULL); /* Translate the ->bar->baz[NN] parts. */ Dwarf_Die typedie; if (dwarf_attr_die (&vardie, DW_AT_type, &typedie) == NULL) { string msg = _F("failed to retrieve type attribute for '%s' [man error::dwarf]", local.c_str()); semantic_error err(ERR_SRC, msg, e->tok); err.details.push_back(die_location_as_string(&vardie)); err.details.push_back(pc_location_as_function_string(ctx.pc)); throw err; } translate_components (&ctx, ctx.pc, e, &vardie, &typedie, lvalue, 0); /* Translate the assignment part, either x = $foo->bar->baz[NN] or $foo->bar->baz[NN] = x */ translate_final_fetch_or_store (ctx, &vardie, &typedie, lvalue, die_mem); return true; } struct location * dwflpp::translate_call_site_value (location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Die *funcdie, Dwarf_Addr pc) { Dwarf_Attribute fb_attr_mem, *fb_attr = NULL; vector scopes = getscopes (funcdie); vector physcopes, *fbscopes = &scopes; int declaring_scope = 0; for (size_t inner = declaring_scope; inner < fbscopes->size() && fb_attr == NULL; ++inner) { Dwarf_Die& scope = (*fbscopes)[inner]; switch (dwarf_tag (&scope)) { default: continue; case DW_TAG_subprogram: fb_attr = dwarf_attr_integrate (&scope, DW_AT_frame_base, &fb_attr_mem); break; case DW_TAG_inlined_subroutine: if (declaring_scope != -1) { physcopes = getscopes_die(&scope); if (physcopes.empty()) throw SEMANTIC_ERROR (_F("unable to get die scopes for '%s' in an inlined subroutine", ctx->e->sym_name().c_str()), ctx->e->tok); fbscopes = &physcopes; inner = 0; declaring_scope = -1; } break; } } return translate_location (ctx, attr, die, pc, fb_attr, ctx->e, NULL); } Dwarf_Die* dwflpp::type_die_for_local (vector& scopes, Dwarf_Addr pc, string const & local, const target_symbol *e, Dwarf_Die *typedie, bool lvalue) { Dwarf_Die vardie, funcdie; Dwarf_Attribute attr_mem; find_variable_and_frame_base (scopes, pc, local, e, &vardie, &attr_mem, &funcdie); if (dwarf_attr_die (&vardie, DW_AT_type, typedie) == NULL) throw SEMANTIC_ERROR(_F("failed to retrieve type attribute for '%s' [man error::dwarf]", local.c_str()), e->tok); location_context ctx(const_cast(e)); ctx.pc = pc; ctx.dw = this; translate_components (&ctx, pc, e, &vardie, typedie, lvalue); return typedie; } bool dwflpp::literal_stmt_for_return (location_context &ctx, Dwarf_Die *scope_die, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem) { if (sess.verbose>2) clog << _F("literal_stmt_for_return: finding return value for %s (%s)\n", (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: "")); /* Given $return->bar->baz[NN], translate the location of return. */ const Dwarf_Op *locops; int nlocops = dwfl_module_return_value_location (module, scope_die, &locops); if (nlocops < 0) throw SEMANTIC_ERROR(_F("failed to retrieve return value location for %s [man error::dwarf] (%s)", (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); // the function has no return value (e.g. "void" in C) else if (nlocops == 0) throw SEMANTIC_ERROR(_F("function %s (%s) has no return value", (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); ctx.translate_location (locops, nlocops, NULL); /* Translate the ->bar->baz[NN] parts. */ Dwarf_Die vardie = *scope_die, typedie; if (dwarf_attr_die (&vardie, DW_AT_type, &typedie) == NULL) throw SEMANTIC_ERROR(_F("failed to retrieve return value type attribute for %s [man error::dwarf] (%s)", (dwarf_diename(&vardie) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); translate_components (&ctx, ctx.pc, e, &vardie, &typedie, lvalue); /* Translate the assignment part, either x = $return->bar->baz[NN] or $return->bar->baz[NN] = x */ translate_final_fetch_or_store (ctx, &vardie, &typedie, lvalue, die_mem); return true; } Dwarf_Die* dwflpp::type_die_for_return (Dwarf_Die *scope_die, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *typedie, bool lvalue) { Dwarf_Die vardie = *scope_die; if (dwarf_attr_die (&vardie, DW_AT_type, typedie) == NULL) throw SEMANTIC_ERROR(_F("failed to retrieve return value type attribute for %s [man error::dwarf] (%s)", (dwarf_diename(&vardie) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); translate_components (NULL, pc, e, &vardie, typedie, lvalue); return typedie; } bool dwflpp::literal_stmt_for_pointer (location_context &ctx, Dwarf_Die *start_typedie, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem) { if (sess.verbose>2) clog << _F("literal_stmt_for_pointer: finding value for %s (%s)\n", dwarf_type_name(start_typedie).c_str(), (dwarf_diename(cu) ?: "")); assert(ctx.pointer != NULL); location *tail = ctx.translate_argument (ctx.pointer); /* Translate the ->bar->baz[NN] parts. */ unsigned first = 0; Dwarf_Die typedie = *start_typedie, vardie = typedie; /* As a special case when typedie is not an array or pointer, we can * allow array indexing on STAP_ARG_pointer instead (since we do * know the pointee type and can determine its size). PR11556. */ const target_symbol::component* c = e->components.empty() ? NULL : &e->components[0]; if (c && (c->type == target_symbol::comp_literal_array_index || c->type == target_symbol::comp_expression_array_index)) { resolve_unqualified_inner_typedie (&typedie, &typedie, e); int typetag = dwarf_tag (&typedie); if (typetag != DW_TAG_pointer_type && typetag != DW_TAG_array_type) { if (c->type == target_symbol::comp_literal_array_index) tail = ctx.translate_array_pointer (&typedie, tail, new literal_number (c->num_index)); else tail = ctx.translate_array_pointer (&typedie, tail, ctx.indicies[0]); ++first; } } /* Now translate the rest normally. */ translate_components (&ctx, 0, e, &vardie, &typedie, lvalue, first); /* Translate the assignment part, either x = (STAP_ARG_pointer)->bar->baz[NN] or (STAP_ARG_pointer)->bar->baz[NN] = x */ translate_final_fetch_or_store (ctx, &vardie, &typedie, lvalue, die_mem); return true; } Dwarf_Die* dwflpp::type_die_for_pointer (Dwarf_Die *start_typedie, const target_symbol *e, Dwarf_Die *typedie, bool lvalue) { unsigned first = 0; *typedie = *start_typedie; Dwarf_Die vardie = *typedie; /* Handle the same PR11556 case as above. */ const target_symbol::component* c = e->components.empty() ? NULL : &e->components[0]; if (c && (c->type == target_symbol::comp_literal_array_index || c->type == target_symbol::comp_expression_array_index)) { resolve_unqualified_inner_typedie (typedie, typedie, e); int typetag = dwarf_tag (typedie); if (typetag != DW_TAG_pointer_type && typetag != DW_TAG_array_type) ++first; } location_context ctx(const_cast(e)); ctx.dw = this; translate_components (&ctx, 0, e, &vardie, typedie, lvalue, first); return typedie; } static bool in_kprobes_function(systemtap_session& sess, Dwarf_Addr addr) { if (sess.sym_kprobes_text_start != 0 && sess.sym_kprobes_text_end != 0) { // If the probe point address is anywhere in the __kprobes // address range, we can't use this probe point. if (addr >= sess.sym_kprobes_text_start && addr < sess.sym_kprobes_text_end) return true; } return false; } enum dwflpp::blacklisted_type dwflpp::blacklisted_p(interned_string funcname, interned_string filename, int, interned_string module, Dwarf_Addr addr, bool has_return) { if (!blacklist_enabled) return dwflpp::blacklisted_none; enum dwflpp::blacklisted_type blacklisted = dwflpp::blacklisted_none; // check against section blacklist string section = get_blacklist_section(addr); // PR6503: modules don't need special init/exit treatment if (module == TOK_KERNEL && !regexec (&blacklist_section, section.c_str(), 0, NULL, 0)) blacklisted = dwflpp::blacklisted_section; // Check for function marked '__kprobes'. else if (module == TOK_KERNEL && in_kprobes_function(sess, addr)) blacklisted = dwflpp::blacklisted_kprobes; // Check probe point against function blacklist else if (!regexec(&blacklist_func, funcname.to_string().c_str(), 0, NULL, 0)) blacklisted = dwflpp::blacklisted_function; // Check probe point against function return blacklist else if (has_return && !regexec(&blacklist_func_ret, funcname.to_string().c_str(), 0, NULL, 0)) blacklisted = dwflpp::blacklisted_function_return; // Check probe point against file blacklist else if (!regexec(&blacklist_file, filename.to_string().c_str(), 0, NULL, 0)) blacklisted = dwflpp::blacklisted_file; if (blacklisted) { if (sess.verbose>1) clog << _(" - blacklisted"); if (sess.guru_mode) { blacklisted = dwflpp::blacklisted_none; if (sess.verbose>1) clog << _(" but not skipped (guru mode enabled)"); } } // This probe point is not blacklisted. return blacklisted; } void dwflpp::build_kernel_blacklist() { // We build up the regexps in these strings // Add ^ anchors at the front; $ will be added just before regcomp. string blfn = "^("; string blfn_ret = "^("; string blfile = "^("; string blsection = "^("; blsection += "\\.init\\."; // first alternative, no "|" blsection += "|\\.exit\\."; blsection += "|\\.devinit\\."; blsection += "|\\.devexit\\."; blsection += "|\\.cpuinit\\."; blsection += "|\\.cpuexit\\."; blsection += "|\\.meminit\\."; blsection += "|\\.memexit\\."; /* NOTE all include/asm .h blfile patterns might need "full path" so prefix those with '.*' - see PR13108 and PR13112. */ blfile += "kernel/kprobes\\.c"; // first alternative, no "|" blfile += "|arch/.*/kernel/kprobes\\.c"; blfile += "|.*/include/asm/io\\.h"; blfile += "|.*/include/asm/io-defs\\.h"; blfile += "|.*/include/asm/io_64\\.h"; blfile += "|.*/include/asm/bitops\\.h"; blfile += "|drivers/ide/ide-iops\\.c"; // paravirt ops blfile += "|arch/.*/kernel/paravirt\\.c"; blfile += "|.*/include/asm/paravirt\\.h"; // XXX: it would be nice if these blacklisted functions were pulled // in dynamically, instead of being statically defined here. // Perhaps it could be populated from script files. A "noprobe // kernel.function("...")" construct might do the trick. // Most of these are marked __kprobes in newer kernels. We list // them here (anyway) so the translator can block them on older // kernels that don't have the __kprobes function decorator. This // also allows detection of problems at translate- rather than // run-time. blfn += "atomic_notifier_call_chain"; // first blfn; no "|" blfn += "|default_do_nmi"; blfn += "|__die"; blfn += "|die_nmi"; blfn += "|do_debug"; blfn += "|do_general_protection"; blfn += "|do_int3"; blfn += "|do_IRQ"; blfn += "|do_page_fault"; blfn += "|do_sparc64_fault"; blfn += "|do_trap"; blfn += "|dummy_nmi_callback"; blfn += "|flush_icache_range"; blfn += "|ia64_bad_break"; blfn += "|ia64_do_page_fault"; blfn += "|ia64_fault"; blfn += "|io_check_error"; blfn += "|mem_parity_error"; blfn += "|nmi_watchdog_tick"; blfn += "|notifier_call_chain"; blfn += "|oops_begin"; blfn += "|oops_end"; blfn += "|program_check_exception"; blfn += "|single_step_exception"; blfn += "|sync_regs"; blfn += "|unhandled_fault"; blfn += "|unknown_nmi_error"; blfn += "|xen_[gs]et_debugreg"; blfn += "|xen_irq_.*"; blfn += "|xen_.*_fl_direct.*"; blfn += "|check_events"; blfn += "|xen_adjust_exception_frame"; blfn += "|xen_iret.*"; blfn += "|xen_sysret64.*"; blfn += "|test_ti_thread_flag.*"; blfn += "|inat_get_opcode_attribute"; blfn += "|system_call_after_swapgs"; blfn += "|HYPERVISOR_[gs]et_debugreg"; blfn += "|HYPERVISOR_event_channel_op"; blfn += "|hash_64"; blfn += "|hash_ptr"; blfn += "|native_set_pte"; // Lots of locks blfn += "|.*raw_.*_lock.*"; blfn += "|.*raw_.*_unlock.*"; blfn += "|.*raw_.*_trylock.*"; blfn += "|.*read_lock.*"; blfn += "|.*read_unlock.*"; blfn += "|.*read_trylock.*"; blfn += "|.*write_lock.*"; blfn += "|.*write_unlock.*"; blfn += "|.*write_trylock.*"; blfn += "|.*write_seqlock.*"; blfn += "|.*write_sequnlock.*"; blfn += "|.*spin_lock.*"; blfn += "|.*spin_unlock.*"; blfn += "|.*spin_trylock.*"; blfn += "|.*spin_is_locked.*"; blfn += "|rwsem_.*lock.*"; blfn += "|.*mutex_.*lock.*"; // atomic functions blfn += "|atomic_.*"; blfn += "|atomic64_.*"; // few other problematic cases blfn += "|get_bh"; blfn += "|put_bh"; // Experimental blfn += "|.*apic.*|.*APIC.*"; blfn += "|.*softirq.*"; blfn += "|.*IRQ.*"; blfn += "|.*_intr.*"; blfn += "|__delay"; blfn += "|.*kernel_text.*"; blfn += "|get_current"; blfn += "|current_.*"; blfn += "|.*exception_tables.*"; blfn += "|.*setup_rt_frame.*"; // PR 5759, CONFIG_PREEMPT kernels blfn += "|.*preempt_count.*"; blfn += "|preempt_schedule"; // These functions don't return, so return probes would never be recovered blfn_ret += "do_exit"; // no "|" blfn_ret += "|sys_exit"; blfn_ret += "|sys_exit_group"; // __switch_to changes "current" on x86_64 and i686, so return probes // would cause kernel panic, and it is marked as "__kprobes" on x86_64 if (sess.architecture == "x86_64") blfn += "|__switch_to"; if (sess.architecture == "i686") blfn_ret += "|__switch_to"; // RHEL6 pre-beta 2.6.32-19.el6 blfn += "|special_mapping_.*"; blfn += "|.*_pte_.*"; // or "|smaps_pte_range"; blfile += "|fs/seq_file\\.c"; blfn += ")$"; blfn_ret += ")$"; blfile += ")$"; blsection += ")"; // NB: no $, sections match just the beginning if (sess.verbose > 2) { clog << _("blacklist regexps:") << endl; clog << "blfn: " << blfn << endl; clog << "blfn_ret: " << blfn_ret << endl; clog << "blfile: " << blfile << endl; clog << "blsection: " << blsection << endl; } int rc = regcomp (& blacklist_func, blfn.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_func regcomp failed")); rc = regcomp (& blacklist_func_ret, blfn_ret.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_func_ret regcomp failed")); rc = regcomp (& blacklist_file, blfile.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_file regcomp failed")); rc = regcomp (& blacklist_section, blsection.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_section regcomp failed")); blacklist_enabled = true; } void dwflpp::build_user_blacklist() { // We build up the regexps in these strings // Add ^ anchors at the front; $ will be added just before regcomp. string blfn = "^("; string blfn_ret = "^("; string blfile = "^("; string blsection = "^("; // Non-matching placeholders until we have real things to match blfn += ".^"; blfile += ".^"; blsection += ".^"; // These functions don't use the normal function-entry ABI, so can't be .return probed safely blfn_ret += "_start"; blfn += ")$"; blfn_ret += ")$"; blfile += ")$"; blsection += ")"; // NB: no $, sections match just the beginning if (sess.verbose > 2) { clog << _("blacklist regexps:") << endl; clog << "blfn: " << blfn << endl; clog << "blfn_ret: " << blfn_ret << endl; clog << "blfile: " << blfile << endl; clog << "blsection: " << blsection << endl; } int rc = regcomp (& blacklist_func, blfn.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_func regcomp failed")); rc = regcomp (& blacklist_func_ret, blfn_ret.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_func_ret regcomp failed")); rc = regcomp (& blacklist_file, blfile.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_file regcomp failed")); rc = regcomp (& blacklist_section, blsection.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blacklist_section regcomp failed")); blacklist_enabled = true; } string dwflpp::get_blacklist_section(Dwarf_Addr addr) { string blacklist_section; Dwarf_Addr bias; // We prefer dwfl_module_getdwarf to dwfl_module_getelf here, // because dwfl_module_getelf can force costly section relocations // we don't really need, while either will do for this purpose. Elf* elf = (dwarf_getelf (dwfl_module_getdwarf (module, &bias)) ?: dwfl_module_getelf (module, &bias)); Dwarf_Addr offset = addr - bias; if (elf) { Elf_Scn* scn = 0; size_t shstrndx; DWFL_ASSERT ("getshdrstrndx", elf_getshdrstrndx (elf, &shstrndx)); while ((scn = elf_nextscn (elf, scn)) != NULL) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (! shdr) continue; // XXX error? if (!(shdr->sh_flags & SHF_ALLOC)) continue; GElf_Addr start = shdr->sh_addr; GElf_Addr end = start + shdr->sh_size; if (! (offset >= start && offset < end)) continue; blacklist_section = elf_strptr (elf, shstrndx, shdr->sh_name); break; } } return blacklist_section; } /* Find the section named 'section_name' in the current module * returning the section header using 'shdr_mem' */ GElf_Shdr * dwflpp::get_section(string section_name, GElf_Shdr *shdr_mem, Elf **elf_ret) { GElf_Shdr *shdr = NULL; Elf* elf; Dwarf_Addr bias; size_t shstrndx; // Explicitly look in the main elf file first. elf = dwfl_module_getelf (module, &bias); Elf_Scn *probe_scn = NULL; DWFL_ASSERT ("getshdrstrndx", elf_getshdrstrndx (elf, &shstrndx)); bool have_section = false; while ((probe_scn = elf_nextscn (elf, probe_scn))) { shdr = gelf_getshdr (probe_scn, shdr_mem); assert (shdr != NULL); if (elf_strptr (elf, shstrndx, shdr->sh_name) == section_name) { have_section = true; break; } } // Older versions may put the section in the debuginfo dwarf file, // so check if it actually exists, if not take a look in the debuginfo file if (! have_section || (have_section && shdr->sh_type == SHT_NOBITS)) { elf = dwarf_getelf (dwfl_module_getdwarf (module, &bias)); if (! elf) return NULL; DWFL_ASSERT ("getshdrstrndx", elf_getshdrstrndx (elf, &shstrndx)); probe_scn = NULL; while ((probe_scn = elf_nextscn (elf, probe_scn))) { shdr = gelf_getshdr (probe_scn, shdr_mem); if (elf_strptr (elf, shstrndx, shdr->sh_name) == section_name) { have_section = true; break; } } } if (!have_section) return NULL; if (elf_ret) *elf_ret = elf; return shdr; } Dwarf_Addr dwflpp::relocate_address(Dwarf_Addr dw_addr, interned_string& reloc_section) { // PR10273 // libdw address, so adjust for bias gotten from dwfl_module_getdwarf Dwarf_Addr reloc_addr = dw_addr + module_bias; if (!module) { assert(module_name == TOK_KERNEL); reloc_section = ""; } else if (dwfl_module_relocations (module) > 0) { // This is a relocatable module; libdwfl already knows its // sections, so we can relativize addr. int idx = dwfl_module_relocate_address (module, &reloc_addr); const char* r_s = dwfl_module_relocation_info (module, idx, NULL); if (r_s) reloc_section = r_s; if (reloc_section == "" && dwfl_module_relocations (module) == 1) reloc_section = ".dynamic"; } else reloc_section = ".absolute"; return reloc_addr; } /* Returns the call frame address operations for the given program counter * in the libdw address space. */ Dwarf_Op * dwflpp::get_cfa_ops (Dwarf_Addr pc) { Dwarf_Op *cfa_ops = NULL; if (sess.verbose > 2) clog << "get_cfa_ops @0x" << hex << pc << dec << ", module_start @0x" << hex << module_start << dec << endl; // Try debug_frame first, then fall back on eh_frame. size_t cfa_nops = 0; Dwarf_Addr bias = 0; Dwarf_Frame *frame = NULL; Dwarf_CFI *cfi = dwfl_module_dwarf_cfi (module, &bias); if (cfi != NULL) { if (sess.verbose > 3) clog << "got dwarf cfi bias: 0x" << hex << bias << dec << endl; if (dwarf_cfi_addrframe (cfi, pc - bias, &frame) == 0) dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops); else if (sess.verbose > 3) clog << "dwarf_cfi_addrframe failed: " << dwarf_errmsg(-1) << endl; } else if (sess.verbose > 3) clog << "dwfl_module_dwarf_cfi failed: " << dwfl_errmsg(-1) << endl; if (cfa_ops == NULL) { cfi = dwfl_module_eh_cfi (module, &bias); if (cfi != NULL) { if (sess.verbose > 3) clog << "got eh cfi bias: 0x" << hex << bias << dec << endl; Dwarf_Frame *frame = NULL; if (dwarf_cfi_addrframe (cfi, pc - bias, &frame) == 0) dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops); else if (sess.verbose > 3) clog << "dwarf_cfi_addrframe failed: " << dwarf_errmsg(-1) << endl; } else if (sess.verbose > 3) clog << "dwfl_module_eh_cfi failed: " << dwfl_errmsg(-1) << endl; } if (sess.verbose > 2) { if (cfa_ops == NULL) clog << _("not found cfa") << endl; else { Dwarf_Addr frame_start, frame_end; bool frame_signalp; int info = dwarf_frame_info (frame, &frame_start, &frame_end, &frame_signalp); clog << _F("found cfa, info: %d [start: %#" PRIx64 ", end: %#" PRIx64 ", nops: %zu", info, frame_start, frame_end, cfa_nops) << endl; } } return cfa_ops; } int dwflpp::add_module_build_id_to_hash (Dwfl_Module *m, void **userdata __attribute__ ((unused)), const char *name, Dwarf_Addr, void *arg) { string modname = name; systemtap_session * s = (systemtap_session *)arg; if (pending_interrupts) return DWARF_CB_ABORT; // Extract the build ID const unsigned char *bits; GElf_Addr vaddr; int bits_length = dwfl_module_build_id(m, &bits, &vaddr); if(bits_length > 0) { // Convert the binary bits to a hex string string hex = hex_dump(bits, bits_length); // Store the build ID in the session s->build_ids.push_back(hex); } return DWARF_CB_OK; } static int cu_entry_pc_caching_callback (Dwarf_Die *func, pair *data) { auto& dw = data->first; auto& cache = data->second; Dwarf_Addr entry_pc; if (dw.die_entrypc (func, &entry_pc)) cache.insert (entry_pc); return DWARF_CB_OK; } bool dwflpp::check_cu_entry_pc (Dwarf_Die *cu, Dwarf_Addr pc) { auto& entry_pcs = cu_entry_pc_cache[cu->addr]; if (!entry_pcs) { save_and_restore saved_cu(&this->cu, cu); entry_pcs = new entry_pc_cache_t; pair data (*this, *entry_pcs); int rc = iterate_over_functions (cu_entry_pc_caching_callback, &data, "*"); if (rc != DWARF_CB_OK) return false; } return entry_pcs->count(pc) != 0; } // Perform PR15123 heuristic for given variable at given address. // Return alternate pc address to do location-list lookup at, or 0 if // inapplicable. // Dwarf_Addr dwflpp::pr15123_retry_addr (Dwarf_Addr pc, Dwarf_Die* die) { // For PR15123, we'd like to detect the situation where the // incoming PC may point to a couple-of-byte instruction // sequence that gcc emits for CFLAGS=-mfentry, and where // context variables are in fact available throughout, *but* due // to the bug, the dwarf debuginfo location-list only starts a // few instructions later. Prologue searching does not resolve // this as a line-record is in place at the -mfentry prologue. // // Detecting this is complicated because ... // - we only want to do this if -mfentry was actually used // - if points to the a function entry point // - if the architecture is familiar enough that we can have a // hard-coded constant to skip over the prologue. // // Otherwise, we could give a false-positive - return corrupted // data. // // Use of -mfentry is detectable only if CFLAGS=-grecord-gcc-switches // was used. Without it, set the PR15123_ASSUME_MFENTRY environment // variable to override the -mfentry test. if (getenv ("PR15123_DISABLE")) return 0; Dwarf_Die cudie; dwarf_diecu (die, &cudie, NULL, NULL); if (!getenv ("PR15123_ASSUME_MFENTRY")) { string producer, version; if (!is_gcc_producer(&cudie, producer, version)) return 0; if (producer.find("-mfentry") == string::npos) return 0; } // Determine if this pc maps to the beginning of a // real function (not some inlined doppelganger. This // is made tricker by this->function may not be // pointing at the right DIE (say e.g. stap encountered // the inlined copy first, so was focus_on_function'd). if (!check_cu_entry_pc (&cudie, pc)) return 0; // (will fail on retry, so we won't loop more than once) if (sess.architecture == "i386" || sess.architecture == "x86_64") { /* pull the trigger */ if (sess.verbose > 2) clog << _("retrying variable location-list lookup at address pc+5\n"); return pc + 5; } return 0; } bool dwflpp::has_gnu_debugdata () { Dwarf_Addr load_addr; // Note we really want the actual elf file, not the dwarf .debug file. Elf* elf = dwfl_module_getelf (module, &load_addr); size_t shstrndx; assert (elf_getshdrstrndx (elf, &shstrndx) >= 0); // Get the gnu_debugdata section header Elf_Scn *scn = NULL; GElf_Shdr *gnu_debugdata_shdr = NULL; GElf_Shdr gnu_debugdata_shdr_mem; while ((scn = elf_nextscn (elf, scn))) { gnu_debugdata_shdr = gelf_getshdr (scn, &gnu_debugdata_shdr_mem); assert (gnu_debugdata_shdr != NULL); if (strcmp (elf_strptr (elf, shstrndx, gnu_debugdata_shdr->sh_name), ".gnu_debugdata") == 0) return true; } return false; } // If not GCC, return false. Otherwise, return true and set vers. bool dwflpp::is_gcc_producer(Dwarf_Die *cudie, string& producer, string& version) { Dwarf_Attribute producer_attr; if (!dwarf_attr_integrate(cudie, DW_AT_producer, &producer_attr)) return false; // GNU {C|C++|...} x.x.x YYYYMMDD ... const char *cproducer = dwarf_formstring(&producer_attr); if (!cproducer) return false; producer = cproducer; vector tokens; tokenize(producer, tokens); if (tokens.size() < 3 || tokens[0] != "GNU" || tokens[2].find_first_not_of(".0123456789") != string::npos) return false; version = tokens[2]; return true; } static bool die_has_loclist(Dwarf_Die *begin_die) { Dwarf_Die die; Dwarf_Attribute loc; if (dwarf_child(begin_die, &die) != 0) return false; do { switch (dwarf_tag(&die)) { case DW_TAG_formal_parameter: case DW_TAG_variable: if (dwarf_attr_integrate(&die, DW_AT_location, &loc) && dwarf_whatform(&loc) == DW_FORM_sec_offset) return true; break; default: if (dwarf_haschildren (&die)) if (die_has_loclist(&die)) return true; break; } } while (dwarf_siblingof (&die, &die) == 0); return false; } bool dwflpp::has_valid_locs () { assert(cu); // The current CU has valid location info (implying we do not need to skip the // prologue) if // - it was compiled with -O2 -g (in which case, GCC outputs proper location // info for the prologue), and // - it was compiled by GCC >= 4.5 (previous versions could have had invalid // debug info in the prologue, see GDB's PR13777) // Note that clang behaves similarly to GCC here: non-optimized code does not // have location lists, while optimized code does. In the check below, even if // the producer is not GCC, we assume that it is valid to do the loclist check // afterwards (which it is for clang). string prod, vers; if (is_gcc_producer(cu, prod, vers) && strverscmp(vers.c_str(), "4.5") < 0) return false; // We determine if the current CU has been optimized with -O2 -g by looking // for any data objects whose DW_AT_location is a location list. This is also // how GDB determines whether to skip the prologue or not. See GDB's PR12573 // and also RHBZ612253#c6. if (!die_has_loclist(cu)) return false; if (sess.verbose > 2) clog << _F("CU '%s' in module '%s' has valid locs", cu_name().c_str(), module_name.c_str()) << endl; return true; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/dwflpp.h000066400000000000000000000753111356460210500150660ustar00rootroot00000000000000// C++ interface to dwfl // Copyright (C) 2005-2019 Red Hat Inc. // Copyright (C) 2005-2007 Intel Corporation. // Copyright (C) 2008 James.Bottomley@HansenPartnership.com // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef DWFLPP_H #define DWFLPP_H #include "config.h" #include "dwarf_wrappers.h" #include "elaborate.h" #include "session.h" #include "setupdwfl.h" #include "stringtable.h" #include #include #include #include #include #include #include #include // Old elf.h doesn't know about this machine type. #ifndef EM_AARCH64 #define EM_AARCH64 183 #endif extern "C" { #include #include } struct base_func_info; struct func_info; struct inline_instance_info; struct symbol_table; struct base_query; struct external_function_query; struct expression; enum lineno_t { ABSOLUTE, RELATIVE, WILDCARD, ENUMERATED }; enum info_status { info_unknown, info_present, info_absent }; // module -> cu die[] typedef std::unordered_map*> module_cu_cache_t; // An instance of this type tracks whether the type units for a given // Dwarf have been read. typedef std::set module_tus_read_t; // typename -> die typedef std::unordered_map cu_type_cache_t; // cu die -> (typename -> die) typedef std::unordered_map mod_cu_type_cache_t; // function -> die typedef std::unordered_multimap cu_function_cache_t; // cu die -> (function -> die) typedef std::unordered_map mod_cu_function_cache_t; // module -> (function -> die) typedef std::unordered_map mod_function_cache_t; // inline function die -> instance die[] typedef std::unordered_map*> cu_inl_function_cache_t; // function die -> [call site die, call site function die] typedef std::pair call_site_cache_t; typedef std::unordered_map*> cu_call_sites_cache_t; // die -> parent die typedef std::unordered_map cu_die_parent_cache_t; // cu die -> (die -> parent die) typedef std::unordered_map mod_cu_die_parent_cache_t; // Dwarf_Line[] (sorted by lineno) typedef std::vector lines_t; typedef std::pair lines_range_t; // srcfile -> Dwarf_Line[] typedef std::unordered_map srcfile_lines_cache_t; // cu die -> (srcfile -> Dwarf_Line[]) typedef std::unordered_map cu_lines_cache_t; // cu die -> {entry pcs} typedef std::unordered_set entry_pc_cache_t; typedef std::unordered_map cu_entry_pc_cache_t; typedef std::vector base_func_info_map_t; typedef std::vector func_info_map_t; typedef std::vector inline_instance_map_t; struct module_info { Dwfl_Module* mod; const char* name; std::string elf_path; Dwarf_Addr addr; Dwarf_Addr bias; symbol_table *sym_table; info_status dwarf_status; // module has dwarf info? info_status symtab_status; // symbol table cached? std::set inlined_funcs; std::set plt_funcs; std::set > marks; /* */ void get_symtab(); void update_symtab(cu_function_cache_t *funcs); module_info(const char *name) : mod(NULL), name(name), addr(0), bias(0), sym_table(NULL), dwarf_status(info_unknown), symtab_status(info_unknown) {} ~module_info(); }; struct module_cache { std::map cache; bool paths_collected; bool dwarf_collected; module_cache() : paths_collected(false), dwarf_collected(false) {} ~module_cache(); }; struct base_func_info { base_func_info() : decl_line(-1), entrypc(0) { std::memset(&die, 0, sizeof(die)); } interned_string name; interned_string decl_file; int decl_line; Dwarf_Die die; Dwarf_Addr entrypc; }; struct func_info : base_func_info { func_info() : addr(0), prologue_end(0), weak(false), descriptor(false) {} Dwarf_Addr addr; Dwarf_Addr prologue_end; bool weak, descriptor; }; struct inline_instance_info : base_func_info { inline_instance_info() {} bool operator<(const inline_instance_info& other) const; }; struct location; struct location_context; struct dwflpp { systemtap_session & sess; // These are "current" values we focus on. Dwfl_Module * module; Dwarf_Addr module_bias; module_info * mod_info; // These describe the current module's PC address range Dwarf_Addr module_start; Dwarf_Addr module_end; Dwarf_Die * cu; std::string module_name; std::string function_name; dwflpp(systemtap_session & session, const std::string& user_module, bool kernel_p); dwflpp(systemtap_session & session, const std::vector& user_modules, bool kernel_p); ~dwflpp(); void get_module_dwarf(bool required = false, bool report = true); void focus_on_module(Dwfl_Module * m, module_info * mi); void focus_on_cu(Dwarf_Die * c); void focus_on_function(Dwarf_Die * f); std::string cu_name(void); Dwarf_Die *query_cu_containing_address(Dwarf_Addr a); bool module_name_matches(const std::string& pattern); static bool name_has_wildcard(const std::string& pattern); bool module_name_final_match(const std::string& pattern); bool function_name_matches_pattern(const std::string& name, const std::string& pattern); bool function_name_matches(const std::string& pattern); bool function_scope_matches(const std::vector& scopes); template void iterate_over_modules(int (* callback)(Dwfl_Module*, void**, const char*, Dwarf_Addr, T*), T *data) { /* We're using templates here to enforce type-safety between the data arg * we're requested to pass to callback, and the data arg that the callback * actually takes. Rather than putting the implementation here, we simply * call the specialization, which does the real work. * As a result, we need to cast the data arg in the callback signature * and the one passed to void* (which is what elfutils also works with). * */ iterate_over_modules((int (*)(Dwfl_Module*, void**, const char*, Dwarf_Addr, void *))callback, (void*)data); } template void iterate_over_cus(int (* callback)(Dwarf_Die*, T*), T *data, bool want_types) { // See comment block in iterate_over_modules() iterate_over_cus((int (*)(Dwarf_Die*, void*))callback, (void*)data, want_types); } bool func_is_inline(); bool func_is_exported(); template void iterate_over_inline_instances(int (* callback)(Dwarf_Die*, T*), T *data) { // See comment block in iterate_over_modules() iterate_over_inline_instances((int (*)(Dwarf_Die*, void*))callback, (void*)data); } template void iterate_over_call_sites(int (* callback)(Dwarf_Die*, Dwarf_Die*, T*), T *data) { // See comment block in iterate_over_modules() iterate_over_call_sites((int (*)(Dwarf_Die*, Dwarf_Die*, void*))callback, (void*)data); } std::vector getscopes_die(Dwarf_Die* die); std::vector getscopes(Dwarf_Die* die); std::vector getscopes(Dwarf_Addr pc); Dwarf_Die *declaration_resolve(Dwarf_Die *type); Dwarf_Die *declaration_resolve(const std::string& name); Dwarf_Die *declaration_resolve_other_cus(const std::string& name); template int iterate_over_functions (int (* callback)(Dwarf_Die*, T*), T *data, const std::string& function) { // See comment block in iterate_over_modules() return iterate_over_functions((int (*)(Dwarf_Die*, void*))callback, (void*)data, function); } template int iterate_single_function (int (* callback)(Dwarf_Die*, T*), T *data, const std::string& function) { // See comment block in iterate_over_modules() return iterate_single_function((int (*)(Dwarf_Die*, void*))callback, (void*)data, function); } template int iterate_over_notes (T *object, void (* callback)(T*, const std::string&, const std::string&, int, const char*, size_t)) { // See comment block in iterate_over_modules() return iterate_over_notes((void*)object, (void (*)(void*, const std::string&, const std::string&, int, const char*, size_t))callback); } template void iterate_over_libraries (void (*callback)(T*, const char*), T *data) { // See comment block in iterate_over_modules() iterate_over_libraries((void (*)(void*, const char*))callback, (void*)data); } template int iterate_over_plt (T *object, void (*callback)(T*, const char*, size_t)) { // See comment block in iterate_over_modules() return iterate_over_plt((void*)object, (void (*)(void*, const char*, size_t))callback); } template void iterate_over_srcfile_lines (char const * srcfile, const std::vector& linenos, enum lineno_t lineno_type, base_func_info_map_t& funcs, void (*callback) (Dwarf_Addr, int, T*), bool has_nearest, T *data) { // See comment block in iterate_over_modules() iterate_over_srcfile_lines(srcfile, linenos, lineno_type, funcs, (void (*)(Dwarf_Addr, int, void*))callback, has_nearest, (void*)data); } template void iterate_over_labels (Dwarf_Die *begin_die, const std::string& sym, const base_func_info& function, const std::vector& linenos, enum lineno_t lineno_type, T *data, void (* callback)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, T*)) { // See comment block in iterate_over_modules() iterate_over_labels(begin_die, sym, function, linenos, lineno_type, (void*)data, (void (*)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, void*))callback); } template void iterate_over_callees (Dwarf_Die *begin_die, const std::string& sym, int64_t recursion_depth, T *data, void (* callback)(base_func_info&, base_func_info&, std::stack*, T*), base_func_info& caller, std::stack*callers=NULL) { // See comment block in iterate_over_modules() iterate_over_callees(begin_die, sym, recursion_depth, (void*)data, (void (*)(base_func_info&, base_func_info&, std::stack*, void*))callback, caller, callers); } template static int iterate_over_globals (Dwarf_Die *cu_die, int (* callback)(Dwarf_Die*, bool, const std::string&, T*), T *data) { // See comment block in iterate_over_modules() return iterate_over_globals(cu_die, (int (*)(Dwarf_Die*, bool, const std::string&, void*))callback, (void*)data); } GElf_Shdr * get_section(std::string section_name, GElf_Shdr *shdr_mem, Elf **elf_ret=NULL); void collect_srcfiles_matching (std::string const & pattern, std::set & filtered_srcfiles); void resolve_prologue_endings (func_info_map_t & funcs); bool function_entrypc (Dwarf_Addr * addr) __attribute__((warn_unused_result)); bool die_entrypc (Dwarf_Die * die, Dwarf_Addr * addr) __attribute__((warn_unused_result)); void function_die (Dwarf_Die *d); void function_file (char const ** c); void function_line (int *linep); bool die_has_pc (Dwarf_Die & die, Dwarf_Addr pc); bool inner_die_containing_pc(Dwarf_Die& scope, Dwarf_Addr addr, Dwarf_Die& result); bool literal_stmt_for_local (location_context &ctx, std::vector& scopes, std::string const & local, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem); Dwarf_Die* type_die_for_local (std::vector& scopes, Dwarf_Addr pc, std::string const & local, const target_symbol *e, Dwarf_Die *die_mem, bool lvalue); bool literal_stmt_for_return (location_context &ctx, Dwarf_Die *scope_die, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem); Dwarf_Die* type_die_for_return (Dwarf_Die *scope_die, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *die_mem, bool lvalue); bool literal_stmt_for_pointer (location_context &ctx, Dwarf_Die *type_die, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem); Dwarf_Die* type_die_for_pointer (Dwarf_Die *type_die, const target_symbol *e, Dwarf_Die *die_mem, bool lvalue); enum blacklisted_type { blacklisted_none, // not blacklisted blacklisted_section, blacklisted_kprobes, blacklisted_function, blacklisted_function_return, blacklisted_file }; blacklisted_type blacklisted_p(interned_string funcname, interned_string filename, int line, interned_string module, Dwarf_Addr addr, bool has_return); Dwarf_Addr relocate_address(Dwarf_Addr addr, interned_string& reloc_section); void resolve_unqualified_inner_typedie (Dwarf_Die *typedie, Dwarf_Die *innerdie, const target_symbol *e); bool has_gnu_debugdata(); bool has_valid_locs(); location *translate_call_site_value (location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Die *funcdie, Dwarf_Addr pc); private: Dwfl * dwfl; // These are "current" values we focus on. Dwarf * module_dwarf; Dwarf_Die * function; void setup_kernel(const std::string& module_name, systemtap_session &s, bool debuginfo_needed = true); void setup_kernel(const std::vector& modules, bool debuginfo_needed = true); void setup_user(const std::vector& modules, bool debuginfo_needed = true); module_cu_cache_t module_cu_cache; module_tus_read_t module_tus_read; mod_cu_function_cache_t cu_function_cache; mod_function_cache_t mod_function_cache; std::set cu_inl_function_cache_done; // CUs that are already cached cu_inl_function_cache_t cu_inl_function_cache; void cache_inline_instances (Dwarf_Die* die); std::set cu_call_sites_cache_done; // CUs that are already cached cu_call_sites_cache_t cu_call_sites_cache; void cache_call_sites (Dwarf_Die* die, Dwarf_Die *function); mod_cu_die_parent_cache_t cu_die_parent_cache; void cache_die_parents(cu_die_parent_cache_t* parents, Dwarf_Die* die); cu_die_parent_cache_t *get_die_parents(); // Cache for cu lines sorted by lineno cu_lines_cache_t cu_lines_cache; // Cache for all entry_pc in each cu cu_entry_pc_cache_t cu_entry_pc_cache; bool check_cu_entry_pc(Dwarf_Die *cu, Dwarf_Addr pc); Dwarf_Die* get_parent_scope(Dwarf_Die* die); /* The global alias cache is used to resolve any DIE found in a * module that is stubbed out with DW_AT_declaration with a defining * DIE found in a different module. The current assumption is that * this only applies to structures and unions, which have a global * namespace (it deliberately only traverses program scope), so this * cache is indexed by name. If other declaration lookups were * added to it, it would have to be indexed by name and tag */ mod_cu_type_cache_t global_alias_cache; static int global_alias_caching_callback(Dwarf_Die *die, bool has_inner_types, const std::string& prefix, cu_type_cache_t *cache); static int global_alias_caching_callback_cus(Dwarf_Die *die, dwflpp *dw); template static int iterate_over_types (Dwarf_Die *top_die, bool has_inner_types, const std::string& prefix, int (* callback)(Dwarf_Die*, bool, const std::string&, T*), T *data) { // See comment block in iterate_over_modules() return iterate_over_types(top_die, has_inner_types, prefix, (int (*)(Dwarf_Die*, bool, const std::string&, void*))callback, (void*)data); } static int mod_function_caching_callback (Dwarf_Die* func, cu_function_cache_t *v); static int cu_function_caching_callback (Dwarf_Die* func, cu_function_cache_t *v); lines_t* get_cu_lines_sorted_by_lineno(const char *srcfile); void collect_lines_for_single_lineno(char const * srcfile, int lineno, bool is_relative, base_func_info_map_t& funcs, lines_t& matching_lines); void collect_all_lines(char const * srcfile, base_func_info_map_t& funcs, lines_t& matching_lines); std::pair get_nearest_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs); int get_nearest_lineno(char const * srcfile, int lineno, base_func_info_map_t& funcs); void suggest_alternative_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs); static int external_function_cu_callback (Dwarf_Die* cu, external_function_query *efq); static int external_function_func_callback (Dwarf_Die* func, external_function_query *efq); static void loc2c_error (void *, const char *fmt, ...) __attribute__ ((noreturn)); // This function generates code used for addressing computations of // target variables. void emit_address (Dwarf_Addr address); void get_locals(std::vector& scopes, std::set& locals); void get_locals_die(Dwarf_Die &die, std::set& locals); void get_members(Dwarf_Die *vardie, std::set& members, std::set &dupes); Dwarf_Attribute *find_variable_and_frame_base (std::vector& scopes, Dwarf_Addr pc, std::string const & local, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Attribute *fb_attr_mem, Dwarf_Die *funcdie); std::string die_location_as_string(Dwarf_Die*); std::string pc_location_as_function_string(Dwarf_Addr); std::string pc_die_line_string(Dwarf_Addr, Dwarf_Die*); /* source file name, line and column info for pc in current cu. */ const char *pc_line (Dwarf_Addr, int *, int *); location *translate_location(location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Addr pc, Dwarf_Attribute *fb_attr, const target_symbol *e, location *input); bool find_struct_member(const target_symbol::component& c, Dwarf_Die *parentdie, Dwarf_Die *memberdie, std::vector& dies, std::vector& locs); void translate_components(location_context *ctx, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Die *typedie, bool lvalue, unsigned first=0); void translate_base_ref (location_context &ctx, Dwarf_Word byte_size, bool signed_p, bool lvalue_p); void translate_bitfield(location_context &ctx, Dwarf_Word byte_size, Dwarf_Word bit_offset, Dwarf_Word bit_size, bool signed_p); void translate_final_fetch_or_store (location_context &ctx, Dwarf_Die *vardie, Dwarf_Die *typedie, bool lvalue, Dwarf_Die *enddie); void translate_pointer(location_context &ctx, Dwarf_Die *typedie, bool lvalue); regex_t blacklist_func; // function/statement probes regex_t blacklist_func_ret; // only for .return probes regex_t blacklist_file; // file name regex_t blacklist_section; // init/exit sections bool blacklist_enabled; void build_kernel_blacklist(); void build_user_blacklist(); std::string get_blacklist_section(Dwarf_Addr addr); // Returns the call frame address operations for the given program counter. Dwarf_Op *get_cfa_ops (Dwarf_Addr pc); Dwarf_Addr vardie_from_symtable(Dwarf_Die *vardie, Dwarf_Addr *addr); static int add_module_build_id_to_hash (Dwfl_Module *m, void **userdata __attribute__ ((unused)), const char *name, Dwarf_Addr base, void *arg); static bool is_gcc_producer(Dwarf_Die *cudie, std::string& producer, std::string& version); public: Dwarf_Addr pr15123_retry_addr (Dwarf_Addr pc, Dwarf_Die* var); }; // Template specializations for iterate_over_* functions template<> void dwflpp::iterate_over_modules(int (*callback)(Dwfl_Module*, void**, const char*, Dwarf_Addr, void*), void *data); template<> void dwflpp::iterate_over_cus(int (*callback)(Dwarf_Die*, void*), void *data, bool want_types); template<> void dwflpp::iterate_over_inline_instances(int (*callback)(Dwarf_Die*, void*), void *data); template<> void dwflpp::iterate_over_call_sites(int (*callback)(Dwarf_Die*, Dwarf_Die*, void*), void *data); template<> int dwflpp::iterate_over_functions(int (*callback)(Dwarf_Die*, void*), void *data, const std::string& function); template<> int dwflpp::iterate_single_function(int (*callback)(Dwarf_Die*, void*), void *data, const std::string& function); template<> int dwflpp::iterate_over_globals(Dwarf_Die *cu_die, int (*callback)(Dwarf_Die*, bool, const std::string&, void*), void *data); template<> int dwflpp::iterate_over_types(Dwarf_Die *top_die, bool has_inner_types, const std::string& prefix, int (* callback)(Dwarf_Die*, bool, const std::string&, void*), void *data); template<> int dwflpp::iterate_over_notes(void *object, void (*callback)(void*, const std::string&, const std::string&, int, const char*, size_t)); template<> void dwflpp::iterate_over_libraries(void (*callback)(void*, const char*), void *data); template<> int dwflpp::iterate_over_plt(void *object, void (*callback)(void*, const char*, size_t)); template<> void dwflpp::iterate_over_srcfile_lines(char const * srcfile, const std::vector& linenos, enum lineno_t lineno_type, base_func_info_map_t& funcs, void (* callback) (Dwarf_Addr, int, void*), bool has_nearest, void *data); template<> void dwflpp::iterate_over_labels(Dwarf_Die *begin_die, const std::string& sym, const base_func_info& function, const std::vector& linenos, enum lineno_t lineno_type, void *data, void (* callback)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, void*)); template<> void dwflpp::iterate_over_callees(Dwarf_Die *begin_die, const std::string& sym, int64_t recursion_depth, void *data, void (* callback)(base_func_info&, base_func_info&, std::stack*, void*), base_func_info& caller, std::stack *callers); #endif // DWFLPP_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/elaborate.cxx000066400000000000000000006717741356460210500161220ustar00rootroot00000000000000// elaboration functions // Copyright (C) 2005-2019 Red Hat Inc. // Copyright (C) 2008 Intel Corporation // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "elaborate.h" #include "translate.h" #include "parse.h" #include "tapsets.h" #include "session.h" #include "util.h" #include "task_finder.h" #include "stapregex.h" #include "stringtable.h" extern "C" { #include #include #define __STDC_FORMAT_MACROS #include } #include #include #include #include #include #include #include #include #include using namespace std; // ------------------------------------------------------------------------ // Used in probe_point condition construction. Either argument may be // NULL; if both, return NULL too. Resulting expression is a deep // copy for symbol resolution purposes. expression* add_condition (expression* a, expression* b) { if (!a && !b) return 0; if (! a) return deep_copy_visitor::deep_copy(b); if (! b) return deep_copy_visitor::deep_copy(a); logical_and_expr la; la.op = "&&"; la.left = a; la.right = b; la.tok = a->tok; // or could be b->tok return deep_copy_visitor::deep_copy(& la); } // ------------------------------------------------------------------------ derived_probe::derived_probe (probe *p, probe_point *l, bool rewrite_loc): base (p), base_pp(l), group(NULL), sdt_semaphore_addr(0), session_index((unsigned)-1) { assert (p); this->tok = p->tok; this->privileged = p->privileged; this->synthetic = p->synthetic; this->body = deep_copy_visitor::deep_copy(p->body); assert (l); // make a copy for subclasses which want to rewrite the location if (rewrite_loc) l = new probe_point(*l); this->locations.push_back (l); } void derived_probe::printsig (ostream& o, bool nest) const { probe::printsig (o); if (nest) printsig_nested (o); } void derived_probe::printsig_nested (ostream& o) const { // We'd like to enclose the probe derivation chain in a /* */ // comment delimiter. But just printing /* base->printsig() */ is // not enough, since base might itself be a derived_probe. So we, // er, "cleverly" encode our nesting state as a formatting flag for // the ostream. ios::fmtflags f = o.flags (ios::internal); if (f & ios::internal) { // already nested o << " <- "; base->printsig (o); } else { // outermost nesting o << " /* <- "; base->printsig (o); o << " */"; } // restore flags (void) o.flags (f); } void derived_probe::collect_derivation_chain (std::vector &probes_list) const { probes_list.push_back(const_cast(this)); base->collect_derivation_chain(probes_list); } void derived_probe::collect_derivation_pp_chain (std::vector &pp_list) const { pp_list.push_back(const_cast(this->sole_location())); base->collect_derivation_pp_chain(pp_list); } string derived_probe::derived_locations (bool firstFrom) { ostringstream o; vector reference_point; collect_derivation_pp_chain(reference_point); if (reference_point.size() > 0) for(unsigned i=1; i1) o << " from: "; o << reference_point[i]->str(false); // no ?,!,etc } return o.str(); } probe_point* derived_probe::sole_location () const { if (locations.size() == 0 || locations.size() > 1) throw SEMANTIC_ERROR (_N("derived_probe with no locations", "derived_probe with too many locations", locations.size()), this->tok); else return locations[0]; } probe_point* derived_probe::script_location () const { // This feeds function::pn() in the tapset, which is documented as the // script-level probe point expression, *after wildcard expansion*. vector chain; collect_derivation_pp_chain (chain); // Go backwards until we hit the first well-formed probe point for (int i=chain.size()-1; i>=0; i--) if (chain[i]->well_formed) return chain[i]; // If that didn't work, just fallback to -something-. return sole_location(); } void derived_probe::emit_privilege_assertion (translator_output* o) { // Emit code which will cause compilation to fail if it is compiled in // unprivileged mode. o->newline() << "#if ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPDEV) && \\"; o->newline() << " ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPSYS)"; o->newline() << "#error Internal Error: Probe "; probe::printsig (o->line()); o->line() << " generated in --unprivileged mode"; o->newline() << "#endif"; } void derived_probe::emit_process_owner_assertion (translator_output* o) { // Emit code which will abort should the current target not belong to the // user in unprivileged mode. o->newline() << "#if ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPDEV) && \\"; o->newline() << " ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPSYS)"; o->newline(1) << "if (! is_myproc ()) {"; o->newline(1) << "snprintf(c->error_buffer, sizeof(c->error_buffer),"; o->newline() << " \"Internal Error: Process %d does not belong to user %d in probe %s in --unprivileged mode\","; o->newline() << " current->tgid, _stp_uid, c->probe_point);"; o->newline() << "c->last_error = c->error_buffer;"; // NB: since this check occurs before probe locking, its exit should // not be a "goto out", which would attempt unlocking. o->newline() << "return;"; o->newline(-1) << "}"; o->newline(-1) << "#endif"; } void derived_probe::print_dupe_stamp_unprivileged(ostream& o) { o << _("unprivileged users: authorized") << endl; } void derived_probe::print_dupe_stamp_unprivileged_process_owner(ostream& o) { o << _("unprivileged users: authorized for process owner") << endl; } // ------------------------------------------------------------------------ // Members of derived_probe_builder void derived_probe_builder::build_with_suffix(systemtap_session &, probe *, probe_point *, literal_map_t const &, std::vector &, std::vector const &) { // XXX perhaps build the probe if suffix is empty? // if (suffix.empty()) { // build (sess, use, location, parameters, finished_results); // return; // } throw SEMANTIC_ERROR (_("invalid suffix for probe")); } bool derived_probe_builder::get_param (literal_map_t const & params, interned_string key, interned_string& value) { literal_map_t::const_iterator i = params.find (key); if (i == params.end()) return false; literal_string * ls = dynamic_cast(i->second); if (!ls) return false; value = ls->value; return true; } bool derived_probe_builder::get_param (literal_map_t const & params, interned_string key, int64_t& value) { literal_map_t::const_iterator i = params.find (key); if (i == params.end()) return false; if (i->second == NULL) return false; literal_number * ln = dynamic_cast(i->second); if (!ln) return false; value = ln->value; return true; } bool derived_probe_builder::has_null_param (literal_map_t const & params, interned_string key) { literal_map_t::const_iterator i = params.find(key); return (i != params.end() && i->second == NULL); } bool derived_probe_builder::has_param (literal_map_t const & params, interned_string key) { return (params.find(key) != params.end()); } // ------------------------------------------------------------------------ // Members of match_key. match_key::match_key(interned_string n) : name(n), have_parameter(false), parameter_type(pe_unknown) { } match_key::match_key(probe_point::component const & c) : name(c.functor), have_parameter(c.arg != NULL), parameter_type(c.arg ? c.arg->type : pe_unknown) { } match_key & match_key::with_number() { have_parameter = true; parameter_type = pe_long; return *this; } match_key & match_key::with_string() { have_parameter = true; parameter_type = pe_string; return *this; } string match_key::str() const { string n = name; if (have_parameter) switch (parameter_type) { case pe_string: return n + "(string)"; case pe_long: return n + "(number)"; default: return n + "(...)"; } return n; } bool match_key::operator<(match_key const & other) const { return ((name < other.name) || (name == other.name && have_parameter < other.have_parameter) || (name == other.name && have_parameter == other.have_parameter && parameter_type < other.parameter_type)); } // NB: these are only used in the probe point name components, where // only "*" is permitted. // // Within module("bar"), function("foo"), process("baz") strings, real // wildcards are permitted too. See also util.h:contains_glob_chars static bool isglob(interned_string str) { return(str.find('*') != str.npos); } static bool isdoubleglob(interned_string str) { return(str.find("**") != str.npos); } bool match_key::globmatch(match_key const & other) const { const string & name_str = name; const string & other_str = other.name; return ((fnmatch(name_str.c_str(), other_str.c_str(), FNM_NOESCAPE) == 0) && have_parameter == other.have_parameter && parameter_type == other.parameter_type); } // ------------------------------------------------------------------------ // Members of match_node // ------------------------------------------------------------------------ match_node::match_node() : privilege(privilege_t (pr_stapdev | pr_stapsys)) { } match_node * match_node::bind(match_key const & k) { if (k.name == "*") throw SEMANTIC_ERROR(_("invalid use of wildcard probe point component")); map::const_iterator i = sub.find(k); if (i != sub.end()) return i->second; match_node * n = new match_node(); sub.insert(make_pair(k, n)); return n; } void match_node::bind(derived_probe_builder * e) { ends.push_back (e); } match_node * match_node::bind(interned_string k) { return bind(match_key(k)); } match_node * match_node::bind_str(string const & k) { return bind(match_key(k).with_string()); } match_node * match_node::bind_num(string const & k) { return bind(match_key(k).with_number()); } match_node * match_node::bind_privilege(privilege_t p) { privilege = p; return this; } void match_node::find_and_build (systemtap_session& s, probe* p, probe_point *loc, unsigned pos, vector& results, set& builders) { save_and_restore costly(& s.suppress_costly_diagnostics, s.suppress_costly_diagnostics + (loc->optional || loc->sufficient ? 1 : 0)); assert (pos <= loc->components.size()); if (pos == loc->components.size()) // matched all probe point components so far { if (ends.empty()) { string alternatives; for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) alternatives += string(" ") + i->first.str(); throw SEMANTIC_ERROR (_F("probe point truncated (follow: %s)", alternatives.c_str()), loc->components.back()->tok); } if (! pr_contains (privilege, s.privilege)) { throw SEMANTIC_ERROR (_F("probe point is not allowed for --privilege=%s", pr_name (s.privilege)), loc->components.back()->tok); } literal_map_t param_map; for (unsigned i=0; icomponents[i]->functor] = loc->components[i]->arg; // maybe 0 unsigned int num_results = results.size(); // Iterate over all bound builders for (unsigned k=0; kbuild (s, p, loc, param_map, results); } // Collect names of builders attempted for error reporting if (results.size() == num_results) { for (unsigned k=0; kname()); } } else if (isdoubleglob(loc->components[pos]->functor)) // ** wildcard? { unsigned int num_results = results.size(); // When faced with "foo**bar", we try "foo*bar" and "foo*.**bar" const probe_point::component *comp = loc->components[pos]; string functor = comp->functor; size_t glob_start = functor.find("**"); size_t glob_end = functor.find_first_not_of('*', glob_start); string prefix = functor.substr(0, glob_start); string suffix = ((glob_end != string::npos) ? functor.substr(glob_end) : ""); // Synthesize "foo*bar" probe_point *simple_pp = new probe_point(*loc); probe_point::component *simple_comp = new probe_point::component(*comp); simple_comp->functor = prefix + "*" + suffix; simple_comp->from_glob = true; simple_pp->components[pos] = simple_comp; try { find_and_build (s, p, simple_pp, pos, results, builders); } catch (const semantic_error& e) { // Ignore semantic_errors. } // Cleanup if we didn't find anything if (results.size() == num_results) { delete simple_pp; delete simple_comp; } num_results = results.size(); // Synthesize "foo*.**bar" // NB: any component arg should attach to the latter part only probe_point *expanded_pp = new probe_point(*loc); probe_point::component *expanded_comp_pre = new probe_point::component(*comp); expanded_comp_pre->functor = prefix + "*"; expanded_comp_pre->from_glob = true; expanded_comp_pre->arg = NULL; probe_point::component *expanded_comp_post = new probe_point::component(*comp); expanded_comp_post->functor = string("**") + suffix; expanded_pp->components[pos] = expanded_comp_pre; expanded_pp->components.insert(expanded_pp->components.begin() + pos + 1, expanded_comp_post); try { find_and_build (s, p, expanded_pp, pos, results, builders); } catch (const semantic_error& e) { // Ignore semantic_errors. } // Cleanup if we didn't find anything if (results.size() == num_results) { delete expanded_pp; delete expanded_comp_pre; delete expanded_comp_post; } // Try suffix expansion only if no matches found: if (num_results == results.size()) this->try_suffix_expansion (s, p, loc, pos, results); if (! loc->optional && num_results == results.size()) { // We didn't find any wildcard matches (since the size of // the result vector didn't change). Throw an error. string sugs = suggest_functors(s, functor); throw SEMANTIC_ERROR (_F("probe point mismatch: didn't find any wildcard matches%s", sugs.empty() ? "" : (" (similar: " + sugs + ")").c_str()), comp->tok); } } else if (isglob(loc->components[pos]->functor)) // wildcard? { match_key match (* loc->components[pos]); // Call find_and_build for each possible match. Ignore errors - // unless we don't find any match. unsigned int num_results = results.size(); for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) { const match_key& subkey = i->first; match_node* subnode = i->second; assert_no_interrupts(); if (match.globmatch(subkey)) { if (s.verbose > 2) clog << _F("wildcard '%s' matched '%s'", loc->components[pos]->functor.to_string().c_str(), subkey.name.to_string().c_str()) << endl; // When we have a wildcard, we need to create a copy of // the probe point. Then we'll create a copy of the // wildcard component, and substitute the non-wildcard // functor. probe_point *non_wildcard_pp = new probe_point(*loc); probe_point::component *non_wildcard_component = new probe_point::component(*loc->components[pos]); non_wildcard_component->functor = subkey.name; non_wildcard_component->from_glob = true; non_wildcard_pp->components[pos] = non_wildcard_component; // NB: probe conditions are not attached at the wildcard // (component/functor) level, but at the overall // probe_point level. unsigned int inner_results = results.size(); // recurse (with the non-wildcard probe point) try { subnode->find_and_build (s, p, non_wildcard_pp, pos+1, results, builders); } catch (const semantic_error& e) { // Ignore semantic_errors while expanding wildcards. // If we get done and nothing was expanded, the code // following the loop will complain. } if (results.size() == inner_results) { // If this wildcard didn't match, cleanup. delete non_wildcard_pp; delete non_wildcard_component; } } } // Try suffix expansion only if no matches found: if (num_results == results.size()) this->try_suffix_expansion (s, p, loc, pos, results); if (! loc->optional && num_results == results.size()) { // We didn't find any wildcard matches (since the size of // the result vector didn't change). Throw an error. string sugs = suggest_functors(s, loc->components[pos]->functor); throw SEMANTIC_ERROR (_F("probe point mismatch: didn't find any wildcard matches%s", sugs.empty() ? "" : (" (similar: " + sugs + ")").c_str()), loc->components[pos]->tok); } } else { match_key match (* loc->components[pos]); sub_map_iterator_t i = sub.find (match); if (i != sub.end()) // match found { match_node* subnode = i->second; // recurse subnode->find_and_build (s, p, loc, pos+1, results, builders); return; } unsigned int num_results = results.size(); this->try_suffix_expansion (s, p, loc, pos, results); // XXX: how to correctly report alternatives + position numbers // for alias suffixes? file a separate PR to address the issue if (! loc->optional && num_results == results.size()) { // We didn't find any alias suffixes (since the size of the // result vector didn't change). Throw an error. string sugs = suggest_functors(s, loc->components[pos]->functor); throw SEMANTIC_ERROR (_F("probe point mismatch%s", sugs.empty() ? "" : (" (similar: " + sugs + ")").c_str()), loc->components[pos]->tok); } } } string match_node::suggest_functors(systemtap_session& s, string functor) { // only use prefix if globby (and prefix is non-empty) size_t glob = functor.find('*'); if (glob != string::npos && glob != 0) functor.erase(glob); if (functor.empty()) return ""; // PR18577: There isn't any point in generating a suggestion list if // we're not going to display it. if ((s.dump_mode == systemtap_session::dump_matched_probes || s.dump_mode == systemtap_session::dump_matched_probes_vars) && s.verbose < 2) return ""; set functors; for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) { string ftor = i->first.str(); if (ftor.find('(') != string::npos) // trim any parameter ftor.erase(ftor.find('(')); functors.insert(ftor); } return levenshtein_suggest(functor, functors, 5); // print top 5 } void match_node::try_suffix_expansion (systemtap_session& s, probe *p, probe_point *loc, unsigned pos, vector& results) { // PR12210: match alias suffixes. If the components thus far // have been matched, but there is an additional unknown // suffix, we have a potential alias suffix on our hands. We // need to expand the preceding components as probe aliases, // reattach the suffix, and re-run derive_probes() on the // resulting expansion. This is done by the routine // build_with_suffix(). if (strverscmp(s.compatible.c_str(), "2.0") >= 0) { // XXX: technically, param_map isn't used here. So don't // bother actually assembling it unless some // derived_probe_builder appears that actually takes // suffixes *and* consults parameters (currently no such // builders exist). literal_map_t param_map; // for (unsigned i=0; icomponents[i]->functor] = loc->components[i]->arg; // maybe 0 vector suffix (loc->components.begin()+pos, loc->components.end()); // Multiple derived_probe_builders may be bound at a // match_node due to the possibility of multiply defined // aliases. for (unsigned k=0; k < ends.size(); k++) { derived_probe_builder *b = ends[k]; try { b->build_with_suffix (s, p, loc, param_map, results, suffix); } catch (const recursive_expansion_error &e) { // Re-throw: throw semantic_error(e); } catch (const semantic_error &e) { // Adjust source coordinate and re-throw: if (! loc->optional) throw semantic_error(e.errsrc, e.what(), loc->components[pos]->tok); } } } } void match_node::build_no_more (systemtap_session& s) { for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) i->second->build_no_more (s); for (unsigned k=0; kbuild_no_more (s); } } void match_node::dump (systemtap_session &s, const string &name) { // Dump this node, if it is complete. for (unsigned k=0; kis_alias ()) continue; // In unprivileged mode, don't show the probes which are not allowed for unprivileged // users. if (pr_contains (privilege, s.privilege)) { cout << name << endl; break; // we need only print one instance. } } // Recursively dump the children of this node string dot; if (! name.empty ()) dot = "."; for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) { i->second->dump (s, name + dot + i->first.str()); } } // ------------------------------------------------------------------------ // Alias probes // ------------------------------------------------------------------------ struct alias_derived_probe: public derived_probe { alias_derived_probe (probe* base, probe_point *l, const probe_alias *a, const vector *suffix = 0); ~alias_derived_probe(); void upchuck () { throw SEMANTIC_ERROR (_("inappropriate"), this->tok); } // Alias probes are immediately expanded to other derived_probe // types, and are not themselves emitted or listed in // systemtap_session.probes void join_group (systemtap_session&) { upchuck (); } virtual const probe_alias *get_alias () const { return alias; } virtual probe_point *get_alias_loc () const { return alias_loc; } virtual probe_point *sole_location () const; private: const probe_alias *alias; // Used to check for recursion probe_point *alias_loc; // Hack to recover full probe name }; alias_derived_probe::alias_derived_probe(probe *base, probe_point *l, const probe_alias *a, const vector *suffix): derived_probe (base, l), alias(a) { // XXX pretty nasty -- this was cribbed from printscript() in main.cxx assert (alias->alias_names.size() >= 1); alias_loc = new probe_point(*alias->alias_names[0]); // XXX: [0] is arbitrary; it would make just as much sense to collect all of the names alias_loc->well_formed = true; vector::const_iterator it; for (it = suffix->begin(); it != suffix->end(); ++it) { alias_loc->components.push_back(*it); if (isglob((*it)->functor)) alias_loc->well_formed = false; // needs further derivation } } alias_derived_probe::~alias_derived_probe () { delete alias_loc; } probe_point* alias_derived_probe::sole_location () const { return const_cast(alias_loc); } void alias_expansion_builder::build(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const & parameters, vector & finished_results) { vector empty_suffix; build_with_suffix (sess, use, location, parameters, finished_results, empty_suffix); } void alias_expansion_builder::build_with_suffix(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const &, vector & finished_results, vector const & suffix) { // Don't build the alias expansion if infinite recursion is detected. if (checkForRecursiveExpansion (use)) { stringstream msg; msg << _F("recursive loop in alias expansion of %s at %s", lex_cast(*location).c_str(), lex_cast(location->components.front()->tok->location).c_str()); // semantic_errors thrown here might be ignored, so we need a special class: throw recursive_expansion_error (msg.str()); // XXX The point of throwing this custom error is to suppress a // cascade of "probe mismatch" messages that appear in addition to // the error. The current approach suppresses most of the error // cascade, but leaves one spurious error; in any case, the way // this particular error is reported could be improved. } // We're going to build a new probe and wrap it up in an // alias_expansion_probe so that the expansion loop recognizes it as // such and re-expands its expansion. alias_derived_probe * n = new alias_derived_probe (use, location /* soon overwritten */, this->alias, &suffix); n->body = new block(); // The new probe gets a deep copy of the location list of the alias // (with incoming condition joined) plus the suffix (if any), n->locations.clear(); for (unsigned i=0; ilocations.size(); i++) { probe_point *pp = new probe_point(*alias->locations[i]); pp->components.insert(pp->components.end(), suffix.begin(), suffix.end()); pp->condition = add_condition (pp->condition, location->condition); n->locations.push_back(pp); } // the token location of the alias, n->tok = location->components.front()->tok; // and statements representing the concatenation of the alias' // body with the use's. // // NB: locals are *not* copied forward, from either alias or // use. The expansion should have its locals re-inferred since // there's concatenated code here and we only want one vardecl per // resulting variable. if (alias->epilogue_style) n->body = new block (use->body, alias->body); else n->body = new block (alias->body, use->body); unsigned old_num_results = finished_results.size(); // If expanding for an alias suffix, be sure to pass on any errors // to the caller instead of printing them in derive_probes(): derive_probes (sess, n, finished_results, location->optional, !suffix.empty()); // Check whether we resolved something. If so, put the // whole library into the queue if not already there. if (finished_results.size() > old_num_results) { stapfile *f = alias->tok->location.file; if (find (sess.files.begin(), sess.files.end(), f) == sess.files.end()) sess.files.push_back (f); } } bool alias_expansion_builder::checkForRecursiveExpansion (probe *use) { // Collect the derivation chain of this probe. vectorderivations; use->collect_derivation_chain (derivations); // Check all probe points in the alias expansion against the currently-being-expanded probe point // of each of the probes in the derivation chain, looking for a match. This // indicates infinite recursion. // The first element of the derivation chain will be the derived_probe representing 'use', so // start the search with the second element. assert (derivations.size() > 0); assert (derivations[0] == use); for (unsigned d = 1; d < derivations.size(); ++d) { if (use->get_alias() == derivations[d]->get_alias()) return true; // recursion detected } return false; } // ------------------------------------------------------------------------ // Pattern matching // ------------------------------------------------------------------------ // The match-and-expand loop. void derive_probes (systemtap_session& s, probe *p, vector& dps, bool optional, bool rethrow_errors) { // We need a static to track whether the current probe is optional so that // even if we recurse into derive_probes with optional = false, errors will // still be ignored. The undo_parent_optional bool ensures we reset the // static at the same level we had it set. static bool parent_optional = false; bool undo_parent_optional = false; if (optional && !parent_optional) { parent_optional = true; undo_parent_optional = true; } vector optional_errs; for (unsigned i = 0; i < p->locations.size(); ++i) { set builders; assert_no_interrupts(); probe_point *loc = p->locations[i]; if (s.verbose > 1) clog << "derive-probes (location #" << i << "): " << *loc << " of " << *p->tok << endl; try { unsigned num_atbegin = dps.size(); try { s.pattern_root->find_and_build (s, p, loc, 0, dps, builders); // <-- actual derivation! } catch (const semantic_error& e) { if (!loc->optional && !parent_optional) throw semantic_error(e); else /* tolerate failure for optional probe */ { // remember err, we will print it (in catch block) if any // non-optional loc fails to resolve semantic_error err(ERR_SRC, _("while resolving probe point"), loc->components[0]->tok, NULL, &e); optional_errs.push_back(err); continue; } } unsigned num_atend = dps.size(); if (! (loc->optional||parent_optional) && // something required, but num_atbegin == num_atend) // nothing new derived! throw SEMANTIC_ERROR (_("no match")); if (loc->sufficient && (num_atend > num_atbegin)) { if (s.verbose > 1) { clog << "Probe point "; p->locations[i]->print(clog); clog << " sufficient, skipped"; for (unsigned j = i+1; j < p->locations.size(); ++j) { clog << " "; p->locations[j]->print(clog); } clog << endl; } break; // we need not try to derive for any other locations } } catch (const semantic_error& e) { // The rethrow_errors parameter lets the caller decide an // alternative to printing the error. This is necessary when // calling derive_probes() recursively during expansion of // an alias with suffix -- any message printed here would // point to the alias declaration and not the invalid suffix // usage, so the caller needs to catch the error themselves // and print a more appropriate message. if (rethrow_errors) { throw semantic_error(e); } // Only output in dump mode if -vv is supplied: else if (!s.dump_mode || (s.verbose > 1)) { // print this one manually first because it's more important than // the optional errs semantic_error err(ERR_SRC, _("while resolving probe point"), loc->components[0]->tok, NULL, &e); // provide some details about which builders were tried if (s.verbose > 0 && !builders.empty()) { string msg; for (auto it = builders.begin(); it != builders.end(); ++it) { if (it != builders.begin()) msg.append(", "); msg.append(*it); } semantic_error err2(ERR_SRC, _F("resolution failed in %s", msg.c_str())); err2.set_chain(err); s.print_error(err2); } else { s.print_error(err); } // print optional errs accumulated while visiting other probe points for (vector::const_iterator it = optional_errs.begin(); it != optional_errs.end(); ++it) { s.print_error(*it); } } } } if (undo_parent_optional) { parent_optional = false; } } // ------------------------------------------------------------------------ // // Indexable usage checks // struct symbol_fetcher : public throwing_visitor { symbol *&sym; symbol_fetcher (symbol *&sym): sym(sym) {} void visit_symbol (symbol* e) { sym = e; } void visit_arrayindex (arrayindex* e) { e->base->visit (this); } void throwone (const token* t) { throw SEMANTIC_ERROR (_("Expecting symbol or array index expression"), t); } }; symbol * get_symbol_within_expression (expression *e) { symbol *sym = NULL; symbol_fetcher fetcher(sym); e->visit (&fetcher); return sym; // NB: may be null! } static symbol * get_symbol_within_indexable (indexable *ix) { symbol *array = NULL; hist_op *hist = NULL; classify_indexable(ix, array, hist); if (array) return array; else return get_symbol_within_expression (hist->stat); } struct mutated_var_collector : public traversing_visitor { set * mutated_vars; mutated_var_collector (set * mm) : mutated_vars (mm) {} void visit_assignment(assignment* e) { if (e->type == pe_stats && e->op == "<<<") { vardecl *vd = get_symbol_within_expression (e->left)->referent; if (vd) mutated_vars->insert (vd); } traversing_visitor::visit_assignment(e); } void visit_arrayindex (arrayindex *e) { if (is_active_lvalue (e)) { symbol *sym; if (e->base->is_symbol (sym)) mutated_vars->insert (sym->referent); else throw SEMANTIC_ERROR(_("Assignment to read-only histogram bucket"), e->tok); } traversing_visitor::visit_arrayindex (e); } }; struct no_var_mutation_during_iteration_check : public traversing_visitor { systemtap_session & session; map *> & function_mutates_vars; vector vars_being_iterated; no_var_mutation_during_iteration_check (systemtap_session & sess, map *> & fmv) : session(sess), function_mutates_vars (fmv) {} void visit_arrayindex (arrayindex *e) { if (is_active_lvalue(e)) { vardecl *vd = get_symbol_within_indexable (e->base)->referent; if (vd) { for (unsigned i = 0; i < vars_being_iterated.size(); ++i) { vardecl *v = vars_being_iterated[i]; if (v == vd) { string err = _F("variable '%s' modified during 'foreach' iteration", v->unmangled_name.to_string().c_str()); session.print_error (SEMANTIC_ERROR (err, e->tok)); } } } } traversing_visitor::visit_arrayindex (e); } void visit_functioncall (functioncall* e) { for (unsigned fd = 0; fd < e->referents.size(); fd++) { map *>::const_iterator i = function_mutates_vars.find (e->referents[fd]); if (i != function_mutates_vars.end()) { for (unsigned j = 0; j < vars_being_iterated.size(); ++j) { vardecl *m = vars_being_iterated[j]; if (i->second->find (m) != i->second->end()) { string err = _F("function call modifies var '%s' during 'foreach' iteration", m->unmangled_name.to_string().c_str()); session.print_error (SEMANTIC_ERROR (err, e->tok)); } } } } traversing_visitor::visit_functioncall (e); } void visit_foreach_loop(foreach_loop* s) { vardecl *vd = get_symbol_within_indexable (s->base)->referent; if (vd) vars_being_iterated.push_back (vd); traversing_visitor::visit_foreach_loop (s); if (vd) vars_being_iterated.pop_back(); } }; // ------------------------------------------------------------------------ struct stat_decl_collector : public traversing_visitor { systemtap_session & session; stat_decl_collector(systemtap_session & sess) : session(sess) {} void visit_stat_op (stat_op* e) { symbol *sym = get_symbol_within_expression (e->stat); statistic_decl new_stat = statistic_decl(); int bit_shift = (e->params.size() == 0) ? 0 : e->params[0]; int stat_op = STAT_OP_NONE; if ((bit_shift < 0) || (bit_shift > 62)) throw SEMANTIC_ERROR (_F("bit shift (%d) out of range <0..62>", bit_shift), e->tok); // The following helps to track which statistical operators are being // used with given global/local variable. This information later helps // to optimize the runtime behaviour. if (e->ctype == sc_count) stat_op = STAT_OP_COUNT; else if (e->ctype == sc_sum) stat_op = STAT_OP_SUM; else if (e->ctype == sc_min) stat_op = STAT_OP_MIN; else if (e->ctype == sc_max) stat_op = STAT_OP_MAX; else if (e->ctype == sc_average) stat_op = STAT_OP_AVG; else if (e->ctype == sc_variance) stat_op = STAT_OP_VARIANCE; new_stat.bit_shift = bit_shift; new_stat.stat_ops |= stat_op; map::iterator i = session.stat_decls.find(sym->name); if (i == session.stat_decls.end()) session.stat_decls[sym->name] = new_stat; else { i->second.stat_ops |= stat_op; // The @variance operator for given stat S (i.e. call to // _stp_stat_init()) is optionally parametrizeable // (@variance(S[, N]), where N is a bit shift (the default is // N=0). The bit_shift helps to improve precision if integer // arithemtic, namely divisions (). // // Ref: https://en.wikipedia.org/wiki/Scale_factor_%28computer_science%29 // if (e->tok->content != "@variance") return; else if ((i->second.bit_shift != 0) && (i->second.bit_shift != bit_shift)) { // FIXME: Support multiple co-declared bit shifts // (analogy to multiple co-declared histogram types) throw SEMANTIC_ERROR (_F("conflicting bit shifts declared (previously %d)", i->second.bit_shift), e->tok); } else { i->second.bit_shift = bit_shift; } } } void visit_foreach_loop (foreach_loop* s) { symbol *array; hist_op *hist; classify_indexable (s->base, array, hist); if (array && array->type == pe_stats && s->sort_direction && s->sort_column == 0) { int stat_op = STAT_OP_NONE; switch (s->sort_aggr) { default: case sc_none: case sc_count: stat_op = STAT_OP_COUNT; break; case sc_sum: stat_op = STAT_OP_SUM; break; case sc_min: stat_op = STAT_OP_MIN; break; case sc_max: stat_op = STAT_OP_MAX; break; case sc_average: stat_op = STAT_OP_AVG; break; } map::iterator i = session.stat_decls.find(array->name); if (i == session.stat_decls.end()) session.stat_decls[array->name] = statistic_decl(stat_op); else i->second.stat_ops |= stat_op; } traversing_visitor::visit_foreach_loop (s); } void visit_assignment (assignment* e) { if (e->op == "<<<") { symbol *sym = get_symbol_within_expression (e->left); if (session.stat_decls.find(sym->name) == session.stat_decls.end()) session.stat_decls[sym->name] = statistic_decl(); } else traversing_visitor::visit_assignment(e); } void visit_hist_op (hist_op* e) { symbol *sym = get_symbol_within_expression (e->stat); statistic_decl new_stat; if (e->htype == hist_linear) { new_stat.type = statistic_decl::linear; assert (e->params.size() == 3); new_stat.linear_low = e->params[0]; new_stat.linear_high = e->params[1]; new_stat.linear_step = e->params[2]; } else { assert (e->htype == hist_log); new_stat.type = statistic_decl::logarithmic; assert (e->params.size() == 0); } map::iterator i = session.stat_decls.find(sym->name); if (i == session.stat_decls.end()) session.stat_decls[sym->name] = new_stat; else { statistic_decl & old_stat = i->second; if (!(old_stat == new_stat)) { if (old_stat.type == statistic_decl::none) { i->second.type = new_stat.type; i->second.linear_low = new_stat.linear_low; i->second.linear_high = new_stat.linear_high; i->second.linear_step = new_stat.linear_step; } else { // FIXME: Support multiple co-declared histogram types semantic_error se(ERR_SRC, _F("multiple histogram types declared on '%s'", sym->name.to_string().c_str()), e->tok); session.print_error (se); } } } } }; static int semantic_pass_stats (systemtap_session & sess) { stat_decl_collector sdc(sess); for (map::iterator it = sess.functions.begin(); it != sess.functions.end(); it++) it->second->body->visit (&sdc); for (unsigned i = 0; i < sess.probes.size(); ++i) sess.probes[i]->body->visit (&sdc); for (unsigned i = 0; i < sess.globals.size(); ++i) { vardecl *v = sess.globals[i]; if (v->type == pe_stats) { if (sess.stat_decls.find(v->name) == sess.stat_decls.end()) { semantic_error se(ERR_SRC, _F("unable to infer statistic parameters for global '%s'", v->unmangled_name.to_string().c_str())); sess.print_error (se); } } } return sess.num_errors(); } // ------------------------------------------------------------------------ // Enforce variable-related invariants: no modification of // a foreach()-iterated array. static int semantic_pass_vars (systemtap_session & sess) { map *> fmv; no_var_mutation_during_iteration_check chk(sess, fmv); for (map::iterator it = sess.functions.begin(); it != sess.functions.end(); it++) { functiondecl * fn = it->second; if (fn->body) { set * m = new set(); mutated_var_collector mc (m); fn->body->visit (&mc); fmv[fn] = m; } } for (map::iterator it = sess.functions.begin(); it != sess.functions.end(); it++) { functiondecl * fn = it->second; if (fn->body) fn->body->visit (&chk); } for (unsigned i = 0; i < sess.probes.size(); ++i) { if (sess.probes[i]->body) sess.probes[i]->body->visit (&chk); } return sess.num_errors(); } // ------------------------------------------------------------------------ // Rewrite probe condition expressions into probe bodies. Tricky and // exciting business, this. This: // // probe foo if (g1 || g2) { ... } // probe bar { ... g1 ++ ... } // // becomes: // // probe foo { if (! (g1 || g2)) next; ... } // probe bar { ... g1 ++ ...; // if (g1 || g2) %{ enable_probe_foo %} else %{ disable_probe_foo %} // } // // In other words, we perform two transformations: // (1) Inline probe condition into its body. // (2) For each probe that modifies a global var in use in any probe's // condition, re-evaluate those probes' condition at the end of that // probe's body. // // Here, we do all of (1), and half of (2): we simply collect the dependency // info between probes, which the translator will use to emit the affected // probes' condition re-evaluation. The translator will also ensure that the // conditions are evaluated using the globals' starting values prior to any // probes starting. // Adds the condition expression to the front of the probe's body static void derived_probe_condition_inline (derived_probe *p) { expression* e = p->sole_location()->condition; assert(e); if_statement *ifs = new if_statement (); ifs->tok = e->tok; ifs->thenblock = new next_statement (); ifs->thenblock->tok = e->tok; ifs->elseblock = NULL; unary_expression *notex = new unary_expression (); notex->op = "!"; notex->tok = e->tok; notex->operand = e; ifs->condition = notex; p->body = new block (ifs, p->body); } static int semantic_pass_conditions (systemtap_session & sess) { map > vars_read_in_cond; map > vars_written_in_body; // do a first pass through the probes to inline any condition, collect // globals being read for (unsigned i = 0; i < sess.probes.size(); ++i) { if (pending_interrupts) return 1; derived_probe* p = sess.probes[i]; expression* e = p->sole_location()->condition; if (e) { varuse_collecting_visitor vcv_cond(sess); e->visit (& vcv_cond); if (!vcv_cond.written.empty()) sess.print_error (SEMANTIC_ERROR (_("probe condition must not " "modify any variables"), e->tok)); else if (vcv_cond.embedded_seen) sess.print_error (SEMANTIC_ERROR (_("probe condition must not " "include impure embedded-C"), e->tok)); derived_probe_condition_inline(p); if (! vcv_cond.read.empty()) { // insert only if nonempty vars_read_in_cond[p].insert(vcv_cond.read.begin(), vcv_cond.read.end()); } } } // skip all the rest of this processing if there are no conditions // that relate to state (global variables) at all if (sess.verbose > 2) clog << "number of probes with global-variable conditions: " << vars_read_in_cond.size() << endl; if (vars_read_in_cond.empty()) return 0; // do a second pass to see what probes write to any globals for (unsigned i = 0; i < sess.probes.size(); ++i) { if (pending_interrupts) return 1; derived_probe* p = sess.probes[i]; varuse_collecting_visitor vcv_body(sess); p->body->visit (& vcv_body); vars_written_in_body[p].insert(vcv_body.written.begin(), vcv_body.written.end()); } // do a third pass to collect affected probes for (unsigned i = 0; i < sess.probes.size(); ++i) { if (pending_interrupts) return 1; derived_probe *p = sess.probes[i]; // for each variable this probe modifies... set::const_iterator var; for (var = vars_written_in_body[p].begin(); var != vars_written_in_body[p].end(); ++var) { // collect probes which could be affected for (unsigned j = 0; j < sess.probes.size(); ++j) { if (vars_read_in_cond[sess.probes[j]].count(*var)) { if (!p->probes_with_affected_conditions.count(sess.probes[j])) { p->probes_with_affected_conditions.insert(sess.probes[j]); if (sess.verbose > 2) clog << "probe " << i << " can affect condition of " "probe " << j << endl; } } } } } // PR18115: We create a begin probe which is artificially registered as // affecting every other probe. This will serve as the initializer so that // other probe types with false conditions can be skipped (or registered as // disabled) during module initialization. set targets; for (unsigned i = 0; i < sess.probes.size(); ++i) if (!vars_read_in_cond[sess.probes[i]].empty()) targets.insert(sess.probes[i]); if (!targets.empty()) { stringstream ss("probe begin {}"); // no good token to choose here... let's just use the condition expression // of one of the probes as the token const token *tok = (*targets.begin())->sole_location()->condition->tok; probe *p = parse_synthetic_probe(sess, ss, tok); if (!p) throw SEMANTIC_ERROR (_("can't create cond initializer probe"), tok); vector dps; derive_probes(sess, p, dps); // there should only be one assert(dps.size() == 1); derived_probe* dp = dps[0]; dp->probes_with_affected_conditions.insert(targets.begin(), targets.end()); sess.probes.push_back (dp); // no need to manually do symresolution since body is empty } return sess.num_errors(); } // ------------------------------------------------------------------------ // Simple visitor that just goes through all embedded code blocks that // are available at the end all the optimizations to register any // relevant pragmas or other indicators found, so that session flags can // be set that can be inspected at translation time to trigger any // necessary initialization of code needed by the embedded code functions. // This is only for pragmas that don't have any other side-effect than // needing some initialization at module init time. Currently handles // /* pragma:vma */ /* pragma:unwind */ /* pragma:symbols */ /* pragma:lines */ // /* pragma:uprobes */ is handled during the typeresolution_info pass. // /* pure */, /* unprivileged */. /* myproc-unprivileged */ and /* guru */ // are handled by the varuse_collecting_visitor. struct embeddedcode_info: public functioncall_traversing_visitor { protected: systemtap_session& session; void examine (const interned_string &, const token *tok); public: embeddedcode_info (systemtap_session& s): session(s) { } template void examine (Embeddish e, const token *tok); void visit_embeddedcode (embeddedcode* c) { examine (c, c->tok); } void visit_embedded_expr (embedded_expr* e) { examine (e, e->tok); } }; template void embeddedcode_info::examine (Embeddish e, const token *tok) { if (! vma_tracker_enabled(session) && e->tagged_p("/* pragma:vma */")) { if (session.verbose > 2) clog << _F("Turning on task_finder vma_tracker, pragma:vma found in %s", current_function->unmangled_name.to_string().c_str()) << endl; // PR15052: stapdyn doesn't have VMA-tracking yet. if (session.runtime_usermode_p()) throw SEMANTIC_ERROR(_("VMA-tracking is only supported by the kernel runtime (PR15052)"), tok); enable_vma_tracker(session); } if (! session.need_unwind && e->tagged_p("/* pragma:unwind */")) { if (session.verbose > 2) clog << _F("Turning on unwind support, pragma:unwind found in %s", current_function->unmangled_name.to_string().c_str()) << endl; session.need_unwind = true; } if (! session.need_symbols && e->tagged_p("/* pragma:symbols */")) { if (session.verbose > 2) clog << _F("Turning on symbol data collecting, pragma:symbols found in %s", current_function->unmangled_name.to_string().c_str()) << endl; session.need_symbols = true; } if (! session.need_lines && e->tagged_p("/* pragma:lines */")) { if (session.verbose > 2) clog << _F("Turning on debug line data collecting, pragma:lines found in %s", current_function->unmangled_name.to_string().c_str()) << endl; session.need_lines = true; } } void embeddedcode_info_pass (systemtap_session& s) { embeddedcode_info eci (s); for (unsigned i=0; ibody->visit (& eci); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) it->second->body->visit (& eci); } // ------------------------------------------------------------------------ // Simple visitor that collects all the regular expressions in the // file and adds them to the session DFA table. struct regex_collecting_visitor: public functioncall_traversing_visitor { protected: systemtap_session& session; public: regex_collecting_visitor (systemtap_session& s): session(s) { } void visit_regex_query (regex_query *q) { functioncall_traversing_visitor::visit_regex_query (q); string re = q->right->value; regex_to_stapdfa (&session, re, q->right->tok); } }; // Go through the regex match invocations and generate corresponding DFAs. int gen_dfa_table (systemtap_session& s) { regex_collecting_visitor rcv(s); for (unsigned i=0; ibody->visit (& rcv); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& rcv); } catch (const semantic_error& e) { s.print_error (e); } } return s.num_errors(); } // ------------------------------------------------------------------------ static int semantic_pass_symbols (systemtap_session&); static int semantic_pass_optimize1 (systemtap_session&); static int semantic_pass_optimize2 (systemtap_session&); static int semantic_pass_types (systemtap_session&); static int semantic_pass_vars (systemtap_session&); static int semantic_pass_stats (systemtap_session&); static int semantic_pass_conditions (systemtap_session&); struct expression_build_no_more_visitor : public expression_visitor { // Clear extra details from every expression, like DWARF type info, so that // builders can safely release them in build_no_more. From here on out, // we're back to basic types only. void visit_expression(expression *e) { e->type_details.reset(); } }; static void build_no_more (systemtap_session& s) { expression_build_no_more_visitor v; for (unsigned i=0; ibody->visit(&v); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) it->second->body->visit(&v); // Inform all derived_probe builders that we're done with // all resolution, so it's time to release caches. s.pattern_root->build_no_more (s); } // Link up symbols to their declarations. Set the session's // files/probes/functions/globals vectors from the transitively // reached set of stapfiles in s.library_files, starting from // s.user_file. Perform automatic tapset inclusion and probe // alias expansion. static int semantic_pass_symbols (systemtap_session& s) { symresolution_info sym (s); // If we're listing functions, then we need to include all the files. Probe // aliases won't be visited/derived so all we gain are the functions, global // variables, and any real probes (e.g. begin probes). NB: type resolution for // a specific function arg may fail if it could only be determined from a // function call in one of the skipped aliases. if (s.dump_mode == systemtap_session::dump_functions) { s.files.insert(s.files.end(), s.library_files.begin(), s.library_files.end()); } else if (!s.user_files.empty()) { // Normal run: seed s.files with user_files and let it grow through the // find_* functions. NB: s.files can grow during this iteration, so // size() can return gradually increasing numbers. s.files.insert (s.files.end(), s.user_files.begin(), s.user_files.end()); } for (unsigned i = 0; i < s.files.size(); i++) { assert_no_interrupts(); stapfile* dome = s.files[i]; // Pass 1: add globals and functions to systemtap-session master list, // so the find_* functions find them // // NB: tapset global/function definitions may duplicate or conflict // with those already in s.globals/functions. We need to deconflict // here. // PR24239: don't transcribe s.files .globals or .functions into // s.globals or s.functions here. Instead, symresolution_info::find_* // will have already done that, for only those functions / globals // that are actually transitively referenced from the end-user script. // except in dump_* modes ... then we need to copy over the goods // regardless of transitive referencing. if (s.dump_mode == systemtap_session::dump_functions) { for (auto it = dome->functions.begin(); it != dome->functions.end(); it++) { functiondecl* v = *it; s.functions[v->name] = v; } } if (s.verbose > 3) { for (auto it = dome->globals.begin(); it != dome->globals.end(); it++) if (std::find(s.globals.begin(), s.globals.end(), *it) == s.globals.end()) clog << "excluded unused global " << (*it)->name << " from tapset " << dome->name << endl; for (auto it = dome->functions.begin(); it != dome->functions.end(); it++) if (s.functions.find((*it)->name) == s.functions.end()) clog << "excluded unused function " << (*it)->name << " from tapset " << dome->name << endl; } // NB: embeds don't conflict with each other for (unsigned i=0; iembeds.size(); i++) s.embeds.push_back (dome->embeds[i]); // Pass 2: derive probes and resolve any further symbols in the // derived results. for (unsigned i=0; iprobes.size(); i++) { assert_no_interrupts(); probe* p = dome->probes [i]; vector dps; // much magic happens here: probe alias expansion, wildcard // matching, low-level derived_probe construction. derive_probes (s, p, dps); for (unsigned j=0; j 2) { clog << _("symbol resolution for derived-probe "); dp->printsig(clog); clog << endl; } try { update_visitor_loop (s, s.code_filters, dp->body); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (& sym); // Process the probe-point condition expression. sym.current_function = 0; sym.current_probe = 0; if (dp->sole_location()->condition) dp->sole_location()->condition->visit (& sym); } catch (const semantic_error& e) { s.print_error (e); } } } // Pass 3: process functions - incl. the synthetic ones, // so s.functions[] rather than dome->functions[] for (auto it = s.functions.begin(); it != s.functions.end(); it++) { assert_no_interrupts(); functiondecl* fd = it->second; if (s.verbose > 2) clog << _("symbol resolution for function ") << fd->name << endl; try { update_visitor_loop (s, s.code_filters, fd->body); sym.current_function = fd; sym.current_probe = 0; fd->body->visit (& sym); } catch (const semantic_error& e) { s.print_error (e); } } } if(s.systemtap_v_check){ for(unsigned i=0;isystemtap_v_conditional) s.print_warning(_("This global uses tapset constructs that are dependent on systemtap version"), s.globals[i]->tok); } for(map::const_iterator i=s.functions.begin();i != s.functions.end();++i){ if(i->second->systemtap_v_conditional) s.print_warning(_("This function uses tapset constructs that are dependent on systemtap version"), i->second->tok); } for(unsigned i=0;i sysvc; s.probes[i]->collect_derivation_chain(sysvc); for(unsigned j=0;jsystemtap_v_conditional) s.print_warning(_("This probe uses tapset constructs that are dependent on systemtap version"), sysvc[j]->tok); if(sysvc[j]->get_alias() && sysvc[j]->get_alias()->systemtap_v_conditional) s.print_warning(_("This alias uses tapset constructs that are dependent on systemtap version"), sysvc[j]->get_alias()->tok); } } } return s.num_errors(); // all those print_error calls } // Keep unread global variables for probe end value display. void add_global_var_display (systemtap_session& s) { // Don't generate synthetic end probes when in listing mode; it would clutter // up the list of probe points with "end ...". In fact, don't bother in any // dump mode at all, since it'll never be used. if (s.dump_mode) return; // The bpf runtime currently lacks support for foreach statements which // this function might generate. if (s.runtime_mode == systemtap_session::bpf_runtime) return; // User has specified not to display unread global variables. if (s.no_global_var_display) return; varuse_collecting_visitor vut(s); for (unsigned i=0; ibody->visit (& vut); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& vut); } for (unsigned g=0; g < s.globals.size(); g++) { vardecl* l = s.globals[g]; if ((vut.read.find (l) != vut.read.end() && vut.used.find (l) != vut.used.end()) || vut.written.find (l) == vut.written.end()) continue; // Don't generate synthetic end probes for unread globals // that were synthesized or declared only within tapsets. // (RHBZ 468139), but rather only within the end-user script. if (l->synthetic) continue; bool tapset_global = false; for (size_t m=0; m < s.library_files.size(); m++) { for (size_t n=0; n < s.library_files[m]->globals.size(); n++) { if (l->name == s.library_files[m]->globals[n]->name) {tapset_global = true; break;} } } if (tapset_global) continue; stringstream code; code << "probe end {" << endl; string format = l->unmangled_name; string indexes; string foreach_value; if (!l->index_types.empty()) { // Add index values to the printf format, and prepare // a simple list of indexes for passing around elsewhere format += "["; for (size_t i = 0; i < l->index_types.size(); ++i) { if (i > 0) { indexes += ","; format += ","; } indexes += "__idx" + lex_cast(i); if (l->index_types[i] == pe_string) format += "\\\"%#s\\\""; else format += "%#d"; } format += "]"; // Iterate over all indexes in the array, sorted by decreasing value code << "foreach ("; if (l->type != pe_stats) { foreach_value = "__val"; code << foreach_value << " = "; } code << "[" << indexes << "] in " << l->unmangled_name << "-)" << endl; } else if (l->type == pe_stats) { // PR7053: Check scalar globals for empty aggregate code << "if (@count(" << l->unmangled_name << ") == 0)" << endl; code << "printf(\"" << l->unmangled_name << " @count=0x0\\n\")" << endl; code << "else" << endl; } static const string stats[] = { "@count", "@min", "@max", "@sum", "@avg" }; const string stats_format = (strverscmp(s.compatible.c_str(), "1.4") >= 0) ? "%#d" : "%#x"; // Fill in the printf format for values if (l->type == pe_stats) for (size_t i = 0; i < sizeof(stats)/sizeof(stats[0]); ++i) format += " " + stats[i] + "=" + stats_format; else if (l->type == pe_string) format += "=\\\"%#s\\\""; else { // If l->type is pe_long, we need to differentiate between pointers and non-pointers. string specifier = "=%d"; if (l->type_details != NULL && l->type_details->id() != 0) { exp_type_dwarf* type = (exp_type_dwarf*) l->type_details.get(); if (type->is_pointer || dwarf_tag(&type->die) == DW_TAG_pointer_type) specifier = "=%#x"; } format += specifier; } format += "\\n"; // Output the actual printf code << "printf (\"" << format << "\""; // Feed indexes to the printf, and include them in the value string value = !foreach_value.empty() ? foreach_value : string(l->unmangled_name); if (!l->index_types.empty()) { code << "," << indexes; if (foreach_value.empty()) value += "[" + indexes + "]"; } // Feed the actual values to the printf if (l->type == pe_stats) for (size_t i = 0; i < sizeof(stats)/sizeof(stats[0]); ++i) code << "," << stats[i] << "(" << value << ")"; else code << "," << value; code << ")" << endl; // End of probe code << "}" << endl; probe *p = parse_synthetic_probe (s, code, l->tok); if (!p) throw SEMANTIC_ERROR (_("can't create global var display"), l->tok); vector dps; derive_probes (s, p, dps); for (unsigned i = 0; i < dps.size(); i++) { derived_probe* dp = dps[i]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol and type info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (& sym); } semantic_pass_types(s); // Mark that variable is read vut.read.insert (l); } } static void gen_monitor_data(systemtap_session& s) { vardecl* v; embeddedcode* ec; v = new vardecl; v->unmangled_name = v->name = "__global___monitor_module_start"; v->set_arity(0, 0); v->type = pe_long; v->synthetic = true; s.globals.push_back(v); ec = new embeddedcode; ec->code = "#define STAP_MONITOR_READ 8192\n" "static char _monitor_buf[STAP_MONITOR_READ];"; s.embeds.push_back(ec); functiondecl* fd = new functiondecl; fd->synthetic = true; fd->unmangled_name = fd->name = "__private___monitor_data_function_probes"; fd->type = pe_string; v = new vardecl; v->type = pe_long; v->unmangled_name = v->name = "index"; fd->formal_args.push_back(v); ec = new embeddedcode; string code; code = "/* unprivileged */ /* pure */" "const struct stap_probe *const p = &stap_probes[STAP_ARG_index];\n" "if (likely (probe_timing(STAP_ARG_index))) {\n" "struct stat_data *stats = _stp_stat_get (probe_timing(STAP_ARG_index), 0);\n" "if (stats->count) {\n" "int64_t avg = _stp_div64 (NULL, stats->sum, stats->count);\n" "snprintf(_monitor_buf, STAP_MONITOR_READ,\n" "\"\\\"index\\\": %zu, \\\"state\\\": \\\"%s\\\", \\\"hits\\\": %lld, " "\\\"min\\\": %lld, \\\"avg\\\": %lld, \\\"max\\\": %lld, \",\n" "p->index, p->cond_enabled ? \"on\" : \"off\", (long long) stats->count,\n" "(long long) stats->min, (long long) avg, (long long) stats->max);\n" "} else {\n" "snprintf(_monitor_buf, STAP_MONITOR_READ,\n" "\"\\\"index\\\": %zu, \\\"state\\\": \\\"%s\\\", \\\"hits\\\": %d, " "\\\"min\\\": %d, \\\"avg\\\": %d, \\\"max\\\": %d, \",\n" "p->index, p->cond_enabled ? \"on\" : \"off\", 0, 0, 0, 0);}}\n" "STAP_RETURN(_monitor_buf);\n"; ec->code = code; fd->body = ec; s.functions[fd->name] = fd; stringstream probe_code; probe_code << "probe begin {" << endl; probe_code << "__monitor_module_start = jiffies()" << endl; probe_code << "}" << endl; probe* p = parse_synthetic_probe(s, probe_code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create begin probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); } static void monitor_mode_read(systemtap_session& s) { if (!s.monitor) return; gen_monitor_data(s); stringstream code; unsigned long rough_max_json_size = 100 + s.globals.size() * 100 + s.probes.size() * 200; code << "probe procfs(\"monitor_status\").read.maxsize(" << rough_max_json_size << ") {" << endl; code << "try {"; // absorb .= overflows! code << "elapsed = (jiffies()-__monitor_module_start)/HZ()" << endl; code << "hrs = elapsed/3600; mins = elapsed%3600/60; secs = elapsed%3600%60;" << endl; code << "$value .= sprintf(\"{\\n\")" << endl; code << "$value .= sprintf(\"\\\"uptime\\\": \\\"%02d:%02d:%02d\\\",\\n\", hrs, mins, secs)" << endl; code << "$value .= sprintf(\"\\\"uid\\\": \\\"%d\\\",\\n\", uid())" << endl; code << "$value .= sprintf(\"\\\"memory\\\": \\\"%s\\\",\\n\", module_size())" << endl; code << "$value .= sprintf(\"\\\"module_name\\\": \\\"%s\\\",\\n\", module_name())" << endl; code << "$value .= sprintf(\"\\\"globals\\\": {\\n\")" << endl; for (auto it = s.globals.cbegin(); it != s.globals.cend(); ++it) { if ((*it)->synthetic) continue; if (it != s.globals.cbegin()) code << "$value .= sprintf(\",\\n\")" << endl; code << "$value .= sprintf(\"\\\"%s\\\":\", \"" << (*it)->unmangled_name << "\")" << endl; if ((*it)->arity == 0) { if ((*it)->type == pe_stats) code << "$value .= sprintf(\"\\\"%d(count)\\\"\", @count(" << (*it)->name << "))" << endl; else if ((*it)->type == pe_string) code << "$value .= string_quoted(sprintf(\"\\\"%s\\\"\"," << (*it)->name << "))" << endl; else code << "$value .= string_quoted(sprint(" << (*it)->name << "))" << endl; } else if ((*it)->arity > 0) code << "$value .= sprintf(\"\\\"[%d]\\\"\", " << (*it)->maxsize << ")" << endl; } code << "$value .= sprintf(\"\\n},\\n\")" << endl; code << "$value .= sprintf(\"\\\"probe_list\\\": [\\n\")" << endl; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { if ((*it)->synthetic) continue; if (it != s.probes.cbegin()) code << "$value .= sprintf(\",\\n\")" << endl; istringstream probe_point((*it)->sole_location()->str()); string name; probe_point >> name; /* Escape quotes once for systemtap parser and once more for json parser */ name = lex_cast_qstring(lex_cast_qstring(name)); code << "$value .= sprintf(\"{%s\", __private___monitor_data_function_probes(" << it-s.probes.begin() << "))" << endl; code << "$value .= sprintf(\"\\\"name\\\": %s}\", " << name << ")" << endl; } code << "$value .= sprintf(\"\\n],\\n\")" << endl; code << "$value .= sprintf(\"}\\n\")" << endl; code << "} catch(ex) { warn(\"JSON construction error: \" . ex) }" << endl; code << "}" << endl; probe* p = parse_synthetic_probe(s, code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create procfs probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); // Resolve types for variables used in the new procfs probe semantic_pass_types(s); } static void monitor_mode_write(systemtap_session& s) { if (!s.monitor) return; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { vardecl* v = new vardecl; v->unmangled_name = v->name = "__monitor_" + lex_cast(it-s.probes.begin()) + "_enabled"; v->tok = (*it)->tok; v->set_arity(0, (*it)->tok); v->type = pe_long; v->init = new literal_number(1); v->synthetic = true; s.globals.push_back(v); symbol* sym = new symbol; sym->name = v->name; sym->tok = v->tok; sym->type = pe_long; sym->referent = v; if ((*it)->sole_location()->condition) { logical_and_expr *e = new logical_and_expr; e->tok = v->tok; e->left = sym; e->op = "&&"; e->type = pe_long; e->right = (*it)->sole_location()->condition; (*it)->sole_location()->condition = e; } else { (*it)->sole_location()->condition = sym; } } stringstream code; code << "probe procfs(\"monitor_control\").write {" << endl; code << "if ($value == \"clear\") {"; for (auto it = s.globals.cbegin(); it != s.globals.cend(); ++it) { vardecl* v = *it; if (v->synthetic) continue; if (v->arity == 0 && v->init) { if (v->type == pe_long) { literal_number* ln = dynamic_cast(v->init); if (ln == 0) throw SEMANTIC_ERROR (_("expected literal number"), 0); code << v->name << " = " << ln->value << endl; } else if (v->type == pe_string) { literal_string* ln = dynamic_cast(v->init); if (ln == 0) throw SEMANTIC_ERROR (_("expected literal string"), 0); code << v->name << " = " << lex_cast_qstring(ln->value) << endl; } } else { // For scalar elements with no initial values, we reset to 0 or empty as // done with arrays and aggregates. code << "delete " << v->name << endl; } } code << "} else if ($value == \"resume\") {" << endl; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { code << " __monitor_" << it-s.probes.begin() << "_enabled" << " = 1" << endl; } code << "} else if ($value == \"pause\") {" << endl; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { code << " __monitor_" << it-s.probes.begin() << "_enabled" << " = 0" << endl; } code << "} else if ($value == \"quit\") {" << endl; code << " exit()" << endl; code << "}"; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { code << " if ($value == \"" << it-s.probes.begin() << "\")" << " __monitor_" << it-s.probes.begin() << "_enabled" << " ^= 1" << endl; } code << "}" << endl; probe* p = parse_synthetic_probe(s, code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create procfs probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s, /* omniscient-unmangled */ true); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); } static void setup_timeout(systemtap_session& s) { if (!s.timeout) return; stringstream code; code << "probe timer.ms(" << s.timeout << ") {exit()}"; probe* p = parse_synthetic_probe(s, code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create timer probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); } int semantic_pass (systemtap_session& s) { int rc = 0; try { // FIXME: interactive mode, register_library_aliases handles // both aliases from library files *and* user scripts. It would // be nice to have them in separate lists and register them // separately. s.register_library_aliases(); register_standard_tapsets(s); if (rc == 0) setup_timeout(s); if (rc == 0) rc = semantic_pass_symbols (s); if (rc == 0) monitor_mode_write (s); if (rc == 0) rc = semantic_pass_conditions (s); if (rc == 0) rc = semantic_pass_optimize1 (s); if (rc == 0) rc = semantic_pass_types (s); if (rc == 0) rc = gen_dfa_table(s); if (rc == 0) add_global_var_display (s); if (rc == 0) monitor_mode_read(s); if (rc == 0) rc = semantic_pass_optimize2 (s); if (rc == 0) rc = semantic_pass_vars (s); if (rc == 0) rc = semantic_pass_stats (s); if (rc == 0) embeddedcode_info_pass (s); } catch (const semantic_error& e) { s.print_error (e); rc ++; } bool no_primary_probes = true; for (unsigned i = 0; i < s.probes.size(); i++) if (s.is_primary_probe(s.probes[i])) no_primary_probes = false; if (s.num_errors() == 0 && no_primary_probes && !s.dump_mode) { s.print_error(SEMANTIC_ERROR(_("no probes found"))); rc ++; } build_no_more (s); // PR11443 // NB: listing mode only cares whether we have any probes, // so all previous error conditions are disregarded. if (s.dump_mode == systemtap_session::dump_matched_probes || s.dump_mode == systemtap_session::dump_matched_probes_vars) rc = no_primary_probes; // If we're dumping functions, only error out if no functions were found if (s.dump_mode == systemtap_session::dump_functions) rc = s.functions.empty(); return rc; } // ------------------------------------------------------------------------ // semantic processing: symbol resolution symresolution_info::symresolution_info (systemtap_session& s, bool omniscient_unmangled): session (s), unmangled_p(omniscient_unmangled), current_function (0), current_probe (0) { } void symresolution_info::visit_block (block* e) { for (unsigned i=0; istatements.size(); i++) { try { e->statements[i]->visit (this); } catch (const semantic_error& e) { session.print_error (e); } } } void symresolution_info::visit_foreach_loop (foreach_loop* e) { for (unsigned i=0; iindexes.size(); i++) e->indexes[i]->visit (this); for (unsigned i=0; iarray_slice.size(); i++) if (e->array_slice[i]) e->array_slice[i]->visit(this); symbol *array = NULL; hist_op *hist = NULL; classify_indexable (e->base, array, hist); if (array) { if (!array->referent) { vardecl* d = find_var (array->name, e->indexes.size (), array->tok); if (d) { array->referent = d; array->name = d->name; } else { stringstream msg; msg << _F("unresolved arity-%zu global array %s, missing global declaration?", e->indexes.size(), array->name.to_string().c_str()); throw SEMANTIC_ERROR (msg.str(), array->tok); } } if (!e->array_slice.empty() && e->array_slice.size() != e->indexes.size()) { stringstream msg; msg << _F("unresolved arity-%zu global array %s, missing global declaration?", e->array_slice.size(), array->name.to_string().c_str()); throw SEMANTIC_ERROR (msg.str(), array->tok); } } else { assert (hist); hist->visit (this); } if (e->value) e->value->visit (this); if (e->limit) e->limit->visit (this); e->block->visit (this); } struct delete_statement_symresolution_info: public traversing_visitor { symresolution_info *parent; delete_statement_symresolution_info (symresolution_info *p): parent(p) {} void visit_arrayindex (arrayindex* e) { parent->visit_arrayindex(e, true); } void visit_functioncall (functioncall* e) { parent->visit_functioncall (e); } void visit_symbol (symbol* e) { if (e->referent) return; vardecl* d = parent->find_var (e->name, -1, e->tok); if (d) e->referent = d; else throw SEMANTIC_ERROR (_("unresolved array in delete statement"), e->tok); } }; void symresolution_info::visit_delete_statement (delete_statement* s) { delete_statement_symresolution_info di (this); s->value->visit (&di); } void symresolution_info::visit_symbol (symbol* e) { if (e->referent) return; vardecl* d = find_var (e->name, 0, e->tok); if (d) { e->referent = d; e->name = d->name; } else { // new local vardecl* v = new vardecl; v->unmangled_name = v->name = e->name; v->tok = e->tok; v->set_arity(0, e->tok); if (current_function) current_function->locals.push_back (v); else if (current_probe) current_probe->locals.push_back (v); else // must be probe-condition expression throw SEMANTIC_ERROR (_("probe condition must not reference undeclared global"), e->tok); e->referent = v; } } void symresolution_info::visit_arrayindex (arrayindex* e) { visit_arrayindex(e, false); } void symresolution_info::visit_arrayindex (arrayindex* e, bool wildcard_ok) { for (unsigned i=0; iindexes.size(); i++) { // assuming that if NULL, it was originally a wildcard (*) if (e->indexes[i] == NULL) { if (!wildcard_ok) throw SEMANTIC_ERROR(_("wildcard not allowed in array index"), e->tok); } else e->indexes[i]->visit (this); } symbol *array = NULL; hist_op *hist = NULL; classify_indexable(e->base, array, hist); if (array) { if (array->referent) return; vardecl* d = find_var (array->name, e->indexes.size (), array->tok); if (d) { array->referent = d; array->name = d->name; } else { stringstream msg; msg << _F("unresolved arity-%zu global array %s, missing global declaration?", e->indexes.size(), array->name.to_string().c_str()); throw SEMANTIC_ERROR (msg.str(), e->tok); } } else { assert (hist); hist->visit (this); } } void symresolution_info::visit_array_in (array_in* e) { visit_arrayindex(e->operand, true); } void symresolution_info::visit_embeddedcode (embeddedcode* s) { // PR24239: must generate find_var references to globals // that are marked by pragma:{read|write}:var if (s->code_referents == s->code) return; // already analyzed size_t pos = 0; while (1) { pos = s->code.find("/* pragma:read:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:read:"); auto pos2 = s->code.find(" */", pos); if (pos2 == string::npos) break; auto var = s->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,s->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:read global %s", ((string)var).c_str()), s->tok); s->read_referents.push_back(vd); pos = pos2+3; } // repeat for write pos = 0; while (1) { pos = s->code.find("/* pragma:write:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:write:"); auto pos2 = s->code.find(" */", pos); if (pos2 == string::npos) break; auto var = s->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,s->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:write global %s", ((string)var).c_str()), s->tok); s->write_referents.push_back(vd); pos = pos2+3; } s->code_referents = s->code; // flag this object as not needing resolution again // NB: why not a bool? sure, could do that, but this way we can detect subsequent // changes to the code object, and be ready to recompute. It's at least harmless. } void symresolution_info::visit_embedded_expr (embedded_expr *e) { // PR24239: must generate find_var references to globals // that are marked by pragma:{read|write}:var if (e->code_referents == e->code) return; // already analyzed size_t pos = 0; while (1) { pos = e->code.find("/* pragma:read:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:read:"); auto pos2 = e->code.find(" */", pos); if (pos2 == string::npos) break; auto var = e->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,e->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:read global %s", ((string)var).c_str()), e->tok); e->read_referents.push_back(vd); pos = pos2+3; } // repeat for write pos = 0; while (1) { pos = e->code.find("/* pragma:write:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:write:"); auto pos2 = e->code.find(" */", pos); if (pos2 == string::npos) break; auto var = e->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,e->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:write global %s", ((string)var).c_str()), e->tok); e->write_referents.push_back(vd); pos = pos2+3; } e->code_referents = e->code; // flag this object as not needing resolution again // NB: why not a bool? sure, could do that, but this way we can detect subsequent // changes to the code object, and be ready to recompute. It's at least harmless. } void symresolution_info::visit_functioncall (functioncall* e) { // XXX: we could relax this, if we're going to examine the // vartracking data recursively. See testsuite/semko/fortytwo.stp. if (! (current_function || current_probe)) { // must be probe-condition expression throw SEMANTIC_ERROR (_("probe condition must not reference function"), e->tok); } for (unsigned i=0; iargs.size(); i++) e->args[i]->visit (this); // already resolved? if (!e->referents.empty()) return; vector fds = find_functions (e, e->function, e->args.size (), e->tok); if (!fds.empty()) { e->referents = fds; function_priority_order order; stable_sort(e->referents.begin(), e->referents.end(), order); // preserve declaration order e->function = e->referents[0]->name; } else { string sugs = levenshtein_suggest(e->function, collect_functions(), 5); // print 5 funcs throw SEMANTIC_ERROR(_F("unresolved function%s", sugs.empty() ? "" : (_(" (similar: ") + sugs + ")").c_str()), e->tok); } // In monitor mode, tapset functions used in the synthetic probe are not resolved and added // to the master list at the same time as the other functions so we must add them here to // allow the translator to generate the functions in the module. if (session.monitor && session.functions.find(e->function) == session.functions.end()) session.functions[e->function] = fds[0]; // no overload } /* find_var will return an argument other than zero if the name matches the var * name ie, if the current local name matches the name passed to find_var. * arity=-1 means any. */ vardecl* symresolution_info::find_var (const string& name, int arity, const token* tok) { if (current_function || current_probe) { // search locals vector& locals = (current_function ? current_function->locals : current_probe->locals); for (unsigned i=0; iname == name) { if (session.verbose > 2) cerr << _F(" local %s is already defined", name.c_str()) << endl; locals[i]->set_arity (arity, tok); return locals[i]; } } // search function formal parameters (for scalars) if (arity == 0 && current_function) for (unsigned i=0; iformal_args.size(); i++) if (current_function->formal_args[i]->name == name) { // NB: no need to check arity here: formal args always scalar if (session.verbose > 2) cerr << _F(" local %s is formal parameter", name.c_str()) << endl; current_function->formal_args[i]->set_arity (0, tok); return current_function->formal_args[i]; } // search processed globals string gname, pname; if (unmangled_p) { gname = pname = string(name); } else { gname = "__global_" + string(name); pname = "__private_" + detox_path(tok->location.file->name) + string(name); } for (unsigned i=0; iname == name && startswith(name, "__global_")) || (session.globals[i]->name == gname) || (session.globals[i]->name == pname)) { if (session.verbose > 2) cerr << _F(" global %s is already defined", name.c_str()) << endl; if (! session.suppress_warnings) { vardecl* v = session.globals[i]; stapfile* f = tok->location.file; if (!session.is_user_file(f->name) && v->tok && v->tok->location.file != f && !f->synthetic) { session.print_warning (_F("cross-file global variable reference to %s from", lex_cast(*v->tok).c_str()), tok); } } session.globals[i]->set_arity (arity, tok); return session.globals[i]; } } // search chosen-tapset globals for (unsigned i=0; iglobals.size(); j++) { vardecl* g = f->globals[j]; if ((g->name == gname) || (g->name == pname)) // private global within tapset probe alias { if (session.verbose > 2) cerr << _F(" global %s is defined in chosen-tapset-file %s", name.c_str(), f->name.c_str()) << endl; g->set_arity (arity, tok); session.globals.push_back (g); return g; } } } // search not-yet-chosen library globals for (unsigned i=0; iglobals.size(); j++) { vardecl* g = f->globals[j]; if ((g->name == gname) || (g->name == pname)) // private global within tapset probe alias { if (session.verbose > 2) cerr << _F(" global %s is defined in new-tapset-file %s", name.c_str(), f->name.c_str()) << endl; g->set_arity (arity, tok); assert (find (session.files.begin(), session.files.end(), f) == session.files.end()); session.files.push_back (f); session.globals.push_back (g); return g; } } } return 0; } class functioncall_security_check: public traversing_visitor { systemtap_session& session; functioncall* call; functiondecl* current_function; public: functioncall_security_check(systemtap_session&s, functioncall* c): session(s),call(c) {} void traverse (functiondecl* d) { current_function = d; current_function->body->visit(this); } void visit_embeddedcode (embeddedcode *s) { // Don't allow embedded C functions in unprivileged mode unless // they are tagged with /* unprivileged */ or /* myproc-unprivileged */ // or we're in a usermode runtime. if (! pr_contains (session.privilege, pr_stapdev) && ! pr_contains (session.privilege, pr_stapsys) && ! session.runtime_usermode_p () && ! s->tagged_p ("/* unprivileged */") && ! s->tagged_p ("/* myproc-unprivileged */")) throw SEMANTIC_ERROR (_F("function may not be used when --privilege=%s is specified", pr_name (session.privilege)), current_function->tok); // Allow only /* bpf */ functions in bpf mode. if ((session.runtime_mode == systemtap_session::bpf_runtime) != (s->tagged_p ("/* bpf */"))) { if (session.runtime_mode == systemtap_session::bpf_runtime) throw SEMANTIC_ERROR (_("function may not be used with bpf runtime"), current_function->tok); else throw SEMANTIC_ERROR (_("function requires bpf runtime"), current_function->tok); } // Don't allow /* guru */ functions unless caller is privileged. if (!call->synthetic && !call->tok->location.file->privileged && s->tagged_p ("/* guru */")) throw SEMANTIC_ERROR (_("function may not be used unless -g is specified"), call->tok); } }; vector symresolution_info::find_functions (functioncall *call, const string& name, unsigned arity, const token *tok) { vector functions; functiondecl* last = 0; // used for error message // the common path // internal global functions bypassing the parser, such as __global_dwarf_tvar_[gs]et if ((session.functions.find(name) != session.functions.end()) && startswith(name, "__private_")) { functiondecl* fd = session.functions[name]; assert (fd->name == name); if (fd->formal_args.size() == arity) functions.push_back(fd); else last = fd; } // functions scanned by the parser are overloaded unsigned alternatives = session.overload_count[name]; for (unsigned alt = 0; alt < alternatives; alt++) { bool found = false; // multiple inclusion guard string gname = "__global_" + string(name) + "__overload_" + lex_cast(alt); string pname = "__private_" + detox_path(tok->location.file->name) + string(name) + "__overload_" + lex_cast(alt); // tapset or user script global functions coming from the parser if (!found && session.functions.find(gname) != session.functions.end()) { functiondecl* fd = session.functions[gname]; assert (fd->name == gname); if (fd->formal_args.size() == arity) { functions.push_back(fd); found = true; } else last = fd; } // tapset or user script private functions coming from the parser if (!found && session.functions.find(pname) != session.functions.end()) { functiondecl* fd = session.functions[pname]; assert (fd->name == pname); if (fd->formal_args.size() == arity) { functions.push_back(fd); found = true; } else last = fd; } // search chosen-tapset-file functions for (unsigned i=0; !found && ifunctions.size(); j++) { if ((f->functions[j]->name == gname) || (f->functions[j]->name == pname)) { if (f->functions[j]->formal_args.size() == arity) { // put library into the queue if not already there if (session.verbose > 2) cerr << _F(" function %s is defined in chosen-tapset-file %s", name.c_str(), f->name.c_str()) << endl; functions.push_back(f->functions[j]); found = true; } else last = f->functions[j]; } } } // search not-yet-chosen library functions for (unsigned i=0; !found && ifunctions.size(); j++) { if ((f->functions[j]->name == gname) || (f->functions[j]->name == pname)) { if (f->functions[j]->formal_args.size() == arity) { // put library into the queue if not already there if (session.verbose > 2) cerr << _F(" function %s is defined in new-tapset-file %s", name.c_str(), f->name.c_str()) << endl; assert (find (session.files.begin(), session.files.end(), f) == session.files.end()); session.files.push_back (f); functions.push_back(f->functions[j]); found = true; } else last = f->functions[j]; } } } } // suggest last found function with matching name if (last && functions.empty()) { throw SEMANTIC_ERROR(_F("arity mismatch found (function '%s' takes %zu args)", name.c_str(), last->formal_args.size()), tok, last->tok); } // check every function for safety/security constraints functioncall_security_check fsc(session, call); for (auto gi = functions.begin(); gi != functions.end(); gi++) { fsc.traverse(*gi); // record this as a used function for later sym resolution functiondecl *f = *gi; const string& fname = f->name; functiondecl *f2 = session.functions[fname]; if (f2 && f != f2) session.print_error (SEMANTIC_ERROR (_("conflicting functions"), f->tok, f2->tok)); session.functions[fname] = f; } return functions; } set symresolution_info::collect_functions(void) { set funcs; for (map::const_iterator it = session.functions.begin(); it != session.functions.end(); ++it) funcs.insert(it->second->unmangled_name); // search library functions for (unsigned i=0; ifunctions.size(); j++) if (! f->functions[j]->name.starts_with("__private_")) funcs.insert(f->functions[j]->unmangled_name); } return funcs; } // ------------------------------------------------------------------------ // optimization // Do away with functiondecls that are never (transitively) called // from probes. // // PR24239: this will generally not trigger, since we avoid adding // uncalled functions to s.functions[]. void semantic_pass_opt1 (systemtap_session& s, bool& relaxed_p) { functioncall_traversing_visitor ftv; for (unsigned i=0; ibody->visit (& ftv); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& ftv); } vector new_unused_functions; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { functiondecl* fd = it->second; if (ftv.seen.find(fd) == ftv.seen.end()) { if (! fd->synthetic && s.is_user_file(fd->tok->location.file->name)) s.print_warning (_F("Eliding unused function '%s'", fd->unmangled_name.to_string().c_str()), fd->tok); // s.functions.erase (it); // NB: can't, since we're already iterating upon it new_unused_functions.push_back (fd); relaxed_p = false; } } for (unsigned i=0; i::iterator where = s.functions.find (new_unused_functions[i]->name); assert (where != s.functions.end()); s.functions.erase (where); if (s.tapset_compile_coverage) s.unused_functions.push_back (new_unused_functions[i]); } } // ------------------------------------------------------------------------ // Do away with local & global variables that are never // written nor read. void semantic_pass_opt2 (systemtap_session& s, bool& relaxed_p, unsigned iterations) { varuse_collecting_visitor vut(s); for (unsigned i=0; ibody->visit (& vut); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& vut); } // NB: Since varuse_collecting_visitor also traverses down // actually called functions, we don't need to explicitly // iterate over them. Uncalled ones should have been pruned // in _opt1 above. // // for (unsigned i=0; ibody->visit (& vut); // Now in vut.read/written, we have a mixture of all locals, globals for (unsigned i=0; ilocals.size(); /* see below */) { vardecl* l = s.probes[i]->locals[j]; // skip over "special" locals if (l->synthetic) { j++; continue; } if (vut.read.find (l) == vut.read.end() && vut.written.find (l) == vut.written.end()) { if (!l->tok->location.file->synthetic && s.is_user_file(l->tok->location.file->name)) s.print_warning (_F("Eliding unused variable '%s'", l->unmangled_name.to_string().c_str()), l->tok); if (s.tapset_compile_coverage) { s.probes[i]->unused_locals.push_back (s.probes[i]->locals[j]); } s.probes[i]->locals.erase(s.probes[i]->locals.begin() + j); relaxed_p = false; // don't increment j } else { if (vut.written.find (l) == vut.written.end()) if (iterations == 0 && ! s.suppress_warnings) { set vars; // like collect_functions() vector::iterator it; for (it = s.probes[i]->locals.begin(); it != s.probes[i]->locals.end(); it++) vars.insert((*it)->unmangled_name); for (it = s.globals.begin(); it != s.globals.end(); it++) if (! (*it)->unmangled_name.starts_with("__private_")) vars.insert((*it)->unmangled_name); vars.erase(l->name); string sugs = levenshtein_suggest(l->name, vars, 5); // suggest top 5 vars s.print_warning (_F("never-assigned local variable '%s'%s", l->unmangled_name.to_string().c_str(), (sugs.empty() ? "" : (_(" (similar: ") + sugs + ")")).c_str()), l->tok); } j++; } } for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { functiondecl *fd = it->second; for (unsigned j=0; jlocals.size(); /* see below */) { vardecl* l = fd->locals[j]; if (vut.read.find (l) == vut.read.end() && vut.written.find (l) == vut.written.end()) { if (!l->tok->location.file->synthetic && s.is_user_file(l->tok->location.file->name)) s.print_warning (_F("Eliding unused variable '%s'", l->unmangled_name.to_string().c_str()), l->tok); if (s.tapset_compile_coverage) { fd->unused_locals.push_back (fd->locals[j]); } fd->locals.erase(fd->locals.begin() + j); relaxed_p = false; // don't increment j } else { if (vut.written.find (l) == vut.written.end()) if (iterations == 0 && ! s.suppress_warnings) { set vars; vector::iterator it; for (it = fd->formal_args.begin() ; it != fd->formal_args.end(); it++) vars.insert((*it)->unmangled_name); for (it = fd->locals.begin(); it != fd->locals.end(); it++) vars.insert((*it)->unmangled_name); for (it = s.globals.begin(); it != s.globals.end(); it++) if (! (*it)->unmangled_name.starts_with("__private_")) vars.insert((*it)->unmangled_name); vars.erase(l->name); string sugs = levenshtein_suggest(l->name, vars, 5); // suggest top 5 vars s.print_warning (_F("never-assigned local variable '%s'%s", l->unmangled_name.to_string().c_str(), (sugs.empty() ? "" : (_(" (similar: ") + sugs + ")")).c_str()), l->tok); } j++; } } } for (unsigned i=0; itok->location.file->synthetic && s.is_user_file(l->tok->location.file->name)) s.print_warning (_F("Eliding unused variable '%s'", l->unmangled_name.to_string().c_str()), l->tok); if (s.tapset_compile_coverage) { s.unused_globals.push_back(s.globals[i]); } s.globals.erase(s.globals.begin() + i); relaxed_p = false; // don't increment i } else { if (vut.written.find (l) == vut.written.end() && ! l->init) // no initializer if (iterations == 0 && ! s.suppress_warnings) { // check if it was initialized on the command line via // a '-G' option bool init_by_gopt = false; string init_prefix (l->unmangled_name.to_string() + "="); for (auto gi = s.globalopts.begin(); gi != s.globalopts.end(); gi++) if (! gi->compare(0, init_prefix.size(), init_prefix)) { init_by_gopt = true; break; } if (! init_by_gopt) { set vars; for (auto it = s.globals.begin(); it != s.globals.end(); it++) if (l->name != (*it)->unmangled_name) if (! (*it)->unmangled_name.starts_with("__private_")) vars.insert((*it)->unmangled_name); // suggest top 5 vars string sugs = levenshtein_suggest(l->name, vars, 5); s.print_warning (_F("never-assigned global variable '%s'%s", l->unmangled_name.to_string().c_str(), (sugs.empty() ? "" : (_(" (similar: ") + sugs + ")")).c_str()), l->tok); } } i++; } } } // ------------------------------------------------------------------------ struct dead_assignment_remover: public update_visitor { systemtap_session& session; bool& relaxed_p; const varuse_collecting_visitor& vut; dead_assignment_remover(systemtap_session& s, bool& r, const varuse_collecting_visitor& v): update_visitor(s.verbose), session(s), relaxed_p(r), vut(v) {} void visit_assignment (assignment* e); void visit_try_block (try_block *s); }; // symbol_fetcher augmented to allow target-symbol types, but NULLed. struct assignment_symbol_fetcher : public symbol_fetcher { const token* assignment_t; assignment_symbol_fetcher (symbol *&sym, const token* a_t): symbol_fetcher(sym), assignment_t(a_t) {} void visit_target_symbol (target_symbol*) { sym = NULL; } void visit_atvar_op (atvar_op*) { sym = NULL; } void visit_cast_op (cast_op*) { sym = NULL; } void visit_autocast_op (autocast_op*) { sym = NULL; } void visit_target_deref (target_deref*) { sym = NULL; } void visit_target_register (target_register*) { sym = NULL; } void throwone (const token* t) { if (t->type == tok_operator && t->content == ".") // guess someone misused . in $foo->bar.baz expression // XXX why are we only checking this in lvalues? throw SEMANTIC_ERROR (_("Expecting lvalue for assignment, try -> instead"), assignment_t, t); else throw SEMANTIC_ERROR (_("Expecting lvalue for assignment"), assignment_t, t); } }; symbol * get_assignment_symbol_within_expression (expression *e, const token *a_t) { symbol *sym = NULL; assignment_symbol_fetcher fetcher(sym, a_t); e->visit (&fetcher); return sym; // NB: may be null! } void dead_assignment_remover::visit_assignment (assignment* e) { replace (e->left); replace (e->right); symbol* left = get_assignment_symbol_within_expression (e->left, e->tok); if (left) // not unresolved $target, so intended sideeffect may be elided { vardecl* leftvar = left->referent; if (vut.read.find(leftvar) == vut.read.end()) // var never read? { // NB: Not so fast! The left side could be an array whose // index expressions may have side-effects. This would be // OK if we could replace the array assignment with a // statement-expression containing all the index expressions // and the rvalue... but we can't. // Another possibility is that we have an unread global variable // which are kept for probe end value display. bool is_global = false; vector::iterator it; for (it = session.globals.begin(); it != session.globals.end(); it++) if (leftvar->name == (*it)->name) { is_global = true; break; } varuse_collecting_visitor lvut(session); e->left->visit (& lvut); if (lvut.side_effect_free () && !is_global // XXX: use _wrt() once we track focal_vars && !leftvar->synthetic) // don't elide assignment to synthetic $context variables { /* PR 1119: NB: This is not necessary here. A write-only variable will also be elided soon at the next _opt2 iteration. if (e->left->tok->location.file->name == session.user_file->name) // !tapset session.print_warning("eliding write-only ", *e->left->tok); else */ if (!e->left->tok->location.file->synthetic && session.is_user_file(e->left->tok->location.file->name)) session.print_warning(_F("Eliding assignment to '%s'", leftvar->unmangled_name.to_string().c_str()), e->tok); provide (e->right); // goodbye assignment* relaxed_p = false; return; } } } provide (e); } void dead_assignment_remover::visit_try_block (try_block *s) { replace (s->try_block); if (s->catch_error_var) { vardecl* errvar = s->catch_error_var->referent; if (vut.read.find(errvar) == vut.read.end()) // never read? { if (session.verbose>2) clog << _F("Eliding unused error string catcher %s at %s", errvar->unmangled_name.to_string().c_str(), lex_cast(*s->tok).c_str()) << endl; s->catch_error_var = 0; } } replace (s->catch_block); provide (s); } // Let's remove assignments to variables that are never read. We // rewrite "(foo = expr)" as "(expr)". This makes foo a candidate to // be optimized away as an unused variable, and expr a candidate to be // removed as a side-effect-free statement expression. Wahoo! void semantic_pass_opt3 (systemtap_session& s, bool& relaxed_p) { // Recompute the varuse data, which will probably match the opt2 // copy of the computation, except for those totally unused // variables that opt2 removed. varuse_collecting_visitor vut(s); for (unsigned i=0; ibody->visit (& vut); // includes reachable functions too dead_assignment_remover dar (s, relaxed_p, vut); // This instance may be reused for multiple probe/function body trims. for (unsigned i=0; ibody); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) dar.replace (it->second->body); // The rewrite operation is performed within the visitor. // XXX: we could also zap write-only globals here } // ------------------------------------------------------------------------ struct dead_stmtexpr_remover: public update_visitor { systemtap_session& session; bool& relaxed_p; set focal_vars; // vars considered subject to side-effects dead_stmtexpr_remover(systemtap_session& s, bool& r): update_visitor(s.verbose), session(s), relaxed_p(r) {} void visit_block (block *s); void visit_try_block (try_block *s); void visit_null_statement (null_statement *s); void visit_if_statement (if_statement* s); void visit_foreach_loop (foreach_loop *s); void visit_for_loop (for_loop *s); // XXX: and other places where stmt_expr's might be nested void visit_expr_statement (expr_statement *s); }; void dead_stmtexpr_remover::visit_null_statement (null_statement *s) { // easy! if (session.verbose>2) clog << _("Eliding side-effect-free null statement ") << *s->tok << endl; s = 0; provide (s); } void dead_stmtexpr_remover::visit_block (block *s) { vector new_stmts; for (unsigned i=0; istatements.size(); i++ ) { statement* new_stmt = require (s->statements[i], true); if (new_stmt != 0) { // flatten nested blocks into this one block *b = dynamic_cast(new_stmt); if (b) { if (session.verbose>2) clog << _("Flattening nested block ") << *b->tok << endl; new_stmts.insert(new_stmts.end(), b->statements.begin(), b->statements.end()); relaxed_p = false; } else new_stmts.push_back (new_stmt); } } if (new_stmts.size() == 0) { if (session.verbose>2) clog << _("Eliding side-effect-free empty block ") << *s->tok << endl; s = 0; } else if (new_stmts.size() == 1) { if (session.verbose>2) clog << _("Eliding side-effect-free singleton block ") << *s->tok << endl; provide (new_stmts[0]); return; } else s->statements = new_stmts; provide (s); } void dead_stmtexpr_remover::visit_try_block (try_block *s) { replace (s->try_block, true); replace (s->catch_block, true); // null catch{} is ok and useful if (s->try_block == 0) { if (session.verbose>2) clog << _("Eliding empty try {} block ") << *s->tok << endl; s = 0; } provide (s); } void dead_stmtexpr_remover::visit_if_statement (if_statement *s) { replace (s->thenblock, true); replace (s->elseblock, true); if (s->thenblock == 0) { if (s->elseblock == 0) { // We may be able to elide this statement, if the condition // expression is side-effect-free. varuse_collecting_visitor vct(session); s->condition->visit(& vct); if (vct.side_effect_free ()) { if (session.verbose>2) clog << _("Eliding side-effect-free if statement ") << *s->tok << endl; s = 0; // yeah, baby } else { // We can still turn it into a simple expr_statement though... if (session.verbose>2) clog << _("Creating simple evaluation from if statement ") << *s->tok << endl; expr_statement *es = new expr_statement; es->value = s->condition; es->tok = es->value->tok; provide (es); return; } } else { // For an else without a then, we can invert the condition logic to // avoid having a null statement in the thenblock if (session.verbose>2) clog << _("Inverting the condition of if statement ") << *s->tok << endl; unary_expression *ue = new unary_expression; ue->operand = s->condition; ue->tok = ue->operand->tok; ue->op = "!"; s->condition = ue; s->thenblock = s->elseblock; s->elseblock = 0; } } provide (s); } void dead_stmtexpr_remover::visit_foreach_loop (foreach_loop *s) { replace (s->block, true); if (s->block == 0) { // XXX what if s->limit has side effects? // XXX what about s->indexes or s->value used outside the loop? if(session.verbose > 2) clog << _("Eliding side-effect-free foreach statement ") << *s->tok << endl; s = 0; // yeah, baby } provide (s); } void dead_stmtexpr_remover::visit_for_loop (for_loop *s) { replace (s->block, true); if (s->block == 0) { // We may be able to elide this statement, if the condition // expression is side-effect-free. varuse_collecting_visitor vct(session); if (s->init) s->init->visit(& vct); s->cond->visit(& vct); if (s->incr) s->incr->visit(& vct); if (vct.side_effect_free ()) { if (session.verbose>2) clog << _("Eliding side-effect-free for statement ") << *s->tok << endl; s = 0; // yeah, baby } else { // Can't elide this whole statement; put a null in there. s->block = new null_statement(s->tok); } } provide (s); } void dead_stmtexpr_remover::visit_expr_statement (expr_statement *s) { // Run a varuse query against the operand expression. If it has no // side-effects, replace the entire statement expression by a null // statement with the provide() call. // // Unlike many other visitors, we do *not* traverse this outermost // one into the expression subtrees. There is no need - no // expr_statement nodes will be found there. (Function bodies // need to be visited explicitly by our caller.) // // NB. While we don't share nodes in the parse tree, let's not // deallocate *s anyway, just in case... varuse_collecting_visitor vut(session); s->value->visit (& vut); if (vut.side_effect_free_wrt (focal_vars)) { /* PR 1119: NB: this message is not a good idea here. It can name some arbitrary RHS expression of an assignment. if (s->value->tok->location.file->name == session.user_file->name) // not tapset session.print_warning("eliding never-assigned ", *s->value->tok); else */ if (!s->value->tok->location.file->synthetic && session.is_user_file(s->value->tok->location.file->name)) session.print_warning("Eliding side-effect-free expression ", s->tok); // NB: this 0 pointer is invalid to leave around for any length of // time, but the parent parse tree objects above handle it. s = 0; relaxed_p = false; } provide (s); } void semantic_pass_opt4 (systemtap_session& s, bool& relaxed_p) { // Finally, let's remove some statement-expressions that have no // side-effect. These should be exactly those whose private varuse // visitors come back with an empty "written" and "embedded" lists. dead_stmtexpr_remover duv (s, relaxed_p); // This instance may be reused for multiple probe/function body trims. for (unsigned i=0; ilocals.begin(), p->locals.end()); duv.replace (p->body, true); if (p->body == 0) { p->body = new null_statement(p->tok); s.empty_probes.insert(p); } } for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { assert_no_interrupts(); functiondecl* fn = it->second; duv.focal_vars.clear (); duv.focal_vars.insert (fn->locals.begin(), fn->locals.end()); duv.focal_vars.insert (fn->formal_args.begin(), fn->formal_args.end()); duv.focal_vars.insert (s.globals.begin(), s.globals.end()); duv.replace (fn->body, true); if (fn->body == 0) { s.print_warning (_F("side-effect-free function '%s'", fn->unmangled_name.to_string().c_str()), fn->tok); fn->body = new null_statement(fn->tok); // XXX: the next iteration of the outer optimization loop may // take this new null_statement away again, and thus give us a // fresh warning. It would be better if this fixup was performed // only after the relaxation iterations. // XXX: or else see bug #6469. } } } // ------------------------------------------------------------------------ // The goal of this visitor is to reduce top-level expressions in void context // into separate statements that evaluate each subcomponent of the expression. // The dead-statement-remover can later remove some parts if they have no side // effects. // // All expressions must be overridden here so we never visit their subexpressions // accidentally. Thus, the only visited expressions should be value of an // expr_statement. // // For an expression to replace its expr_statement with something else, it will // let the new statement provide(), and then provide(0) for itself. The // expr_statement will take this as a sign that it's been replaced. struct void_statement_reducer: public update_visitor { systemtap_session& session; bool& relaxed_p; set focal_vars; // vars considered subject to side-effects void_statement_reducer(systemtap_session& s, bool& r): update_visitor(s.verbose), session(s), relaxed_p(r) {} void visit_expr_statement (expr_statement* s); // expressions in conditional / loop controls are definitely a side effect, // but still recurse into the child statements void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); // these expressions get rewritten into their statement equivalents void visit_logical_or_expr (logical_or_expr* e); void visit_logical_and_expr (logical_and_expr* e); void visit_ternary_expression (ternary_expression* e); // all of these can (usually) be reduced into simpler statements void visit_binary_expression (binary_expression* e); void visit_unary_expression (unary_expression* e); void visit_regex_query (regex_query* e); // XXX depends on subexpr extraction void visit_comparison (comparison* e); void visit_concatenation (concatenation* e); void visit_functioncall (functioncall* e); void visit_print_format (print_format* e); void visit_target_symbol (target_symbol* e); void visit_atvar_op (atvar_op* e); void visit_cast_op (cast_op* e); void visit_autocast_op (autocast_op* e); void visit_defined_op (defined_op* e); // these are a bit hairy to grok due to the intricacies of indexables and // stats, so I'm chickening out and skipping them... void visit_array_in (array_in* e) { provide (e); } void visit_arrayindex (arrayindex* e) { provide (e); } void visit_stat_op (stat_op* e) { provide (e); } void visit_hist_op (hist_op* e) { provide (e); } // these can't be reduced because they always have an effect void visit_return_statement (return_statement* s) { provide (s); } void visit_delete_statement (delete_statement* s) { provide (s); } void visit_pre_crement (pre_crement* e) { provide (e); } void visit_post_crement (post_crement* e) { provide (e); } void visit_assignment (assignment* e) { provide (e); } private: void reduce_target_symbol (target_symbol* e, expression* operand=NULL); }; void void_statement_reducer::visit_expr_statement (expr_statement* s) { replace (s->value, true); // if the expression provides 0, that's our signal that a new // statement has been provided, so we shouldn't provide this one. if (s->value != 0) provide(s); } void void_statement_reducer::visit_if_statement (if_statement* s) { // s->condition is never void replace (s->thenblock); replace (s->elseblock); provide (s); } void void_statement_reducer::visit_for_loop (for_loop* s) { // s->init/cond/incr are never void replace (s->block); provide (s); } void void_statement_reducer::visit_foreach_loop (foreach_loop* s) { // s->indexes/base/value/limit are never void replace (s->block); provide (s); } void void_statement_reducer::visit_logical_or_expr (logical_or_expr* e) { // In void context, the evaluation of "a || b" is exactly like // "if (!a) b", so let's do that instead. if (session.verbose>2) clog << _("Creating if statement from unused logical-or ") << *e->tok << endl; if_statement *is = new if_statement; is->tok = e->tok; is->elseblock = 0; unary_expression *ue = new unary_expression; ue->operand = e->left; ue->tok = e->tok; ue->op = "!"; is->condition = ue; expr_statement *es = new expr_statement; es->value = e->right; es->tok = es->value->tok; is->thenblock = es; is->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_logical_and_expr (logical_and_expr* e) { // In void context, the evaluation of "a && b" is exactly like // "if (a) b", so let's do that instead. if (session.verbose>2) clog << _("Creating if statement from unused logical-and ") << *e->tok << endl; if_statement *is = new if_statement; is->tok = e->tok; is->elseblock = 0; is->condition = e->left; expr_statement *es = new expr_statement; es->value = e->right; es->tok = es->value->tok; is->thenblock = es; is->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_ternary_expression (ternary_expression* e) { // In void context, the evaluation of "a ? b : c" is exactly like // "if (a) b else c", so let's do that instead. if (session.verbose>2) clog << _("Creating if statement from unused ternary expression ") << *e->tok << endl; if_statement *is = new if_statement; is->tok = e->tok; is->condition = e->cond; expr_statement *es = new expr_statement; es->value = e->truevalue; es->tok = es->value->tok; is->thenblock = es; es = new expr_statement; es->value = e->falsevalue; es->tok = es->value->tok; is->elseblock = es; is->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_binary_expression (binary_expression* e) { // When the result of a binary operation isn't needed, it's just as good to // evaluate the operands as sequential statements in a block. if (session.verbose>2) clog << _("Eliding unused binary ") << *e->tok << endl; block *b = new block; b->tok = e->tok; expr_statement *es = new expr_statement; es->value = e->left; es->tok = es->value->tok; b->statements.push_back(es); es = new expr_statement; es->value = e->right; es->tok = es->value->tok; b->statements.push_back(es); b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_unary_expression (unary_expression* e) { // When the result of a unary operation isn't needed, it's just as good to // evaluate the operand directly if (session.verbose>2) clog << _("Eliding unused unary ") << *e->tok << endl; relaxed_p = false; e->operand->visit(this); } void void_statement_reducer::visit_regex_query (regex_query* e) { // TODOXXX After subexpression extraction is implemented, // regular expression matches *may* have side-effects in // terms of producing matched subexpressions, e.g.: // // str =~ "pat"; println(matched(0)); // // It's debatable if we want to actually allow this, though. // Treat e as a unary expression on the left operand -- since the // right hand side must be a literal (as verified by the parser), // evaluating it never has side effects. if (session.verbose>2) clog << _("Eliding regex query ") << *e->tok << endl; relaxed_p = false; e->left->visit(this); } void void_statement_reducer::visit_comparison (comparison* e) { visit_binary_expression(e); } void void_statement_reducer::visit_concatenation (concatenation* e) { visit_binary_expression(e); } void void_statement_reducer::visit_functioncall (functioncall* e) { // If a function call is pure and its result ignored, we can elide the call // and just evaluate the arguments in sequence if (e->args.empty()) { provide (e); return; } bool side_effect_free = true; for (unsigned i = 0; i < e->referents.size(); i++) { varuse_collecting_visitor vut(session); vut.seen.insert (e->referents[i]); vut.current_function = e->referents[i]; e->referents[i]->body->visit (& vut); if (!vut.side_effect_free_wrt(focal_vars)) { side_effect_free = false; break; } } if (!side_effect_free) { provide (e); return; } if (session.verbose>2) clog << _("Eliding side-effect-free function call ") << *e->tok << endl; block *b = new block; b->tok = e->tok; for (unsigned i=0; iargs.size(); i++ ) { expr_statement *es = new expr_statement; es->value = e->args[i]; es->tok = es->value->tok; b->statements.push_back(es); } b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_print_format (print_format* e) { // When an sprint's return value is ignored, we can simply evaluate the // arguments in sequence if (e->print_to_stream || !e->args.size()) { provide (e); return; } if (session.verbose>2) clog << _("Eliding unused print ") << *e->tok << endl; block *b = new block; b->tok = e->tok; for (unsigned i=0; iargs.size(); i++ ) { expr_statement *es = new expr_statement; es->value = e->args[i]; es->tok = es->value->tok; b->statements.push_back(es); } b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::reduce_target_symbol (target_symbol* e, expression* operand) { // When the result of any target_symbol isn't needed, it's just as good to // evaluate the operand and any array indexes directly block *b = new block; b->tok = e->tok; if (operand) { expr_statement *es = new expr_statement; es->value = operand; es->tok = es->value->tok; b->statements.push_back(es); } for (unsigned i=0; icomponents.size(); i++ ) { if (e->components[i].type != target_symbol::comp_expression_array_index) continue; expr_statement *es = new expr_statement; es->value = e->components[i].expr_index; es->tok = es->value->tok; b->statements.push_back(es); } b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_atvar_op (atvar_op* e) { if (session.verbose>2) clog << _("Eliding unused target symbol ") << *e->tok << endl; reduce_target_symbol (e); } void void_statement_reducer::visit_target_symbol (target_symbol* e) { if (session.verbose>2) clog << _("Eliding unused target symbol ") << *e->tok << endl; reduce_target_symbol (e); } void void_statement_reducer::visit_cast_op (cast_op* e) { if (session.verbose>2) clog << _("Eliding unused typecast ") << *e->tok << endl; reduce_target_symbol (e, e->operand); } void void_statement_reducer::visit_autocast_op (autocast_op* e) { if (session.verbose>2) clog << _("Eliding unused autocast ") << *e->tok << endl; reduce_target_symbol (e, e->operand); } void void_statement_reducer::visit_defined_op (defined_op* e) { // When the result of a @defined operation isn't needed, just elide // it entirely. Its operand $expression must already be // side-effect-free. if (session.verbose>2) clog << _("Eliding unused check ") << *e->tok << endl; relaxed_p = false; e = 0; provide (e); } void semantic_pass_opt5 (systemtap_session& s, bool& relaxed_p) { // Let's simplify statements with unused computed values. void_statement_reducer vuv (s, relaxed_p); // This instance may be reused for multiple probe/function body trims. vuv.focal_vars.insert (s.globals.begin(), s.globals.end()); for (unsigned i=0; ibody); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) vuv.replace (it->second->body); } void const_folder::get_literal(expression*& e, literal_number*& n, literal_string*& s) { replace (e); n = (e == last_number) ? last_number : NULL; s = (e == last_string) ? last_string : NULL; } literal_number* const_folder::get_number(expression*& e) { replace (e); return (e == last_number) ? last_number : NULL; } void const_folder::visit_literal_number (literal_number* e) { last_number = e; provide (e); } literal_string* const_folder::get_string(expression*& e) { replace (e); return (e == last_string) ? last_string : NULL; } void const_folder::visit_literal_string (literal_string* e) { last_string = e; provide (e); } void const_folder::visit_if_statement (if_statement* s) { literal_number* cond = get_number (s->condition); if (!cond) { replace (s->thenblock); replace (s->elseblock); provide (s); } else { if (session.verbose>2) clog << _F("Collapsing constant-%" PRIi64 " if-statement %s", cond->value, lex_cast(*s->tok).c_str()) << endl; relaxed_p = false; statement* n = cond->value ? s->thenblock : s->elseblock; if (n) n->visit (this); else provide (new null_statement (s->tok)); } } void const_folder::visit_for_loop (for_loop* s) { literal_number* cond = get_number (s->cond); if (!cond || cond->value) { replace (s->init); replace (s->incr); replace (s->block); provide (s); } else { if (session.verbose>2) clog << _("Collapsing constantly-false for-loop ") << *s->tok << endl; relaxed_p = false; if (s->init) s->init->visit (this); else provide (new null_statement (s->tok)); } } void const_folder::visit_foreach_loop (foreach_loop* s) { literal_number* limit = get_number (s->limit); if (!limit || limit->value > 0) { for (unsigned i = 0; i < s->indexes.size(); ++i) replace (s->indexes[i]); replace (s->base); replace (s->value); replace (s->block); provide (s); } else { if (session.verbose>2) clog << _("Collapsing constantly-limited foreach-loop ") << *s->tok << endl; relaxed_p = false; provide (new null_statement (s->tok)); } } void const_folder::visit_binary_expression (binary_expression* e) { int64_t value; literal_number* left = get_number (e->left); literal_number* right = get_number (e->right); if (right && !right->value && (e->op == "/" || e->op == "%")) { // Give divide-by-zero a chance to be optimized out elsewhere, // and if not it will be a runtime error anyway... provide (e); return; } if (left && right) { if (e->op == "+") value = left->value + right->value; else if (e->op == "-") value = left->value - right->value; else if (e->op == "*") value = left->value * right->value; else if (e->op == "&") value = left->value & right->value; else if (e->op == "|") value = left->value | right->value; else if (e->op == "^") value = left->value ^ right->value; else if (e->op == ">>") value = left->value >> max(min(right->value, (int64_t)64), (int64_t)0); else if (e->op == "<<") value = left->value << max(min(right->value, (int64_t)64), (int64_t)0); else if (e->op == "/") value = (left->value == LLONG_MIN && right->value == -1) ? LLONG_MIN : left->value / right->value; else if (e->op == "%") value = (left->value == LLONG_MIN && right->value == -1) ? 0 : left->value % right->value; else throw SEMANTIC_ERROR (_("unsupported binary operator ") + (string)e->op); } else if ((left && ((left->value == 0 && (e->op == "*" || e->op == "&" || e->op == ">>" || e->op == "<<" )) || (left->value ==-1 && (e->op == "|" || e->op == ">>")))) || (right && ((right->value == 0 && (e->op == "*" || e->op == "&")) || (right->value == 1 && (e->op == "%")) || (right->value ==-1 && (e->op == "%" || e->op == "|"))))) { expression* other = left ? e->right : e->left; varuse_collecting_visitor vu(session); other->visit(&vu); if (!vu.side_effect_free()) { provide (e); return; } // we'll pass on type=pe_long inference to the expression if (other->type == pe_unknown) other->type = pe_long; else if (other->type != pe_long) { // this mismatch was not caught in the initial type resolution pass, // generate a mismatch (left doesn't match right) error typeresolution_info ti(session); ti.assert_resolvability = true; // need this to get it throw errors ti.mismatch_complexity = 1; // also needed to throw errors ti.mismatch(e); } if (left) value = left->value; else if (e->op == "%") value = 0; else value = right->value; } else if ((left && ((left->value == 0 && (e->op == "+" || e->op == "|" || e->op == "^")) || (left->value == 1 && (e->op == "*")) || (left->value ==-1 && (e->op == "&")))) || (right && ((right->value == 0 && (e->op == "+" || e->op == "-" || e->op == "|" || e->op == "^")) || (right->value == 1 && (e->op == "*" || e->op == "/")) || (right->value ==-1 && (e->op == "&")) || (right->value <= 0 && (e->op == ">>" || e->op == "<<"))))) { if (session.verbose>2) clog << _("Collapsing constant-identity binary operator ") << *e->tok << endl; relaxed_p = false; // we'll pass on type=pe_long inference to the expression expression* other = left ? e->right : e->left; if (other->type == pe_unknown) other->type = pe_long; else if (other->type != pe_long) { // this mismatch was not caught in the initial type resolution pass, // generate a mismatch (left doesn't match right) error typeresolution_info ti(session); ti.assert_resolvability = true; // need this to get it throw errors ti.mismatch_complexity = 1; // also needed to throw errors ti.mismatch(e); } provide (other); return; } else { provide (e); return; } if (session.verbose>2) clog << _F("Collapsing constant-%" PRIi64 " binary operator %s", value, lex_cast(*e->tok).c_str()) << endl; relaxed_p = false; literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_unary_expression (unary_expression* e) { literal_number* operand = get_number (e->operand); if (!operand) provide (e); else { if (session.verbose>2) clog << _("Collapsing constant unary ") << *e->tok << endl; relaxed_p = false; literal_number* n = new literal_number (*operand); n->tok = e->tok; if (e->op == "+") ; // nothing to do else if (e->op == "-") n->value = -n->value; else if (e->op == "!") n->value = !n->value; else if (e->op == "~") n->value = ~n->value; else throw SEMANTIC_ERROR (_("unsupported unary operator ") + (string)e->op); n->visit (this); } } void const_folder::visit_logical_or_expr (logical_or_expr* e) { int64_t value; literal_number* left = get_number (e->left); literal_number* right = get_number (e->right); if (left && right) value = left->value || right->value; else if ((left && left->value) || (right && right->value)) { // If the const is on the left, we get to short-circuit the right // immediately. Otherwise, we can only eliminate the LHS if it's pure. if (right) { varuse_collecting_visitor vu(session); e->left->visit(&vu); if (!vu.side_effect_free()) { provide (e); return; } } value = 1; } // We might also get rid of useless "0||x" and "x||0", except it does // normalize x to 0 or 1. We could change it to "!!x", but it's not clear // that this would gain us much. else { provide (e); return; } if (session.verbose>2) clog << _("Collapsing constant logical-OR ") << *e->tok << endl; relaxed_p = false; literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_logical_and_expr (logical_and_expr* e) { int64_t value; literal_number* left = get_number (e->left); literal_number* right = get_number (e->right); if (left && right) value = left->value && right->value; else if ((left && !left->value) || (right && !right->value)) { // If the const is on the left, we get to short-circuit the right // immediately. Otherwise, we can only eliminate the LHS if it's pure. if (right) { varuse_collecting_visitor vu(session); e->left->visit(&vu); if (!vu.side_effect_free()) { provide (e); return; } } value = 0; } // We might also get rid of useless "1&&x" and "x&&1", except it does // normalize x to 0 or 1. We could change it to "!!x", but it's not clear // that this would gain us much. else { provide (e); return; } if (session.verbose>2) clog << _("Collapsing constant logical-AND ") << *e->tok << endl; relaxed_p = false; literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_compound_expression (compound_expression* e) { replace(e->left, true); replace(e->right, false); // If the LHS is pure, we can eliminate it. // ??? This is unlikely, given how these are created in loc2stap.cxx. if (e->left) { varuse_collecting_visitor vu(session); e->left->visit(&vu); if (!vu.side_effect_free()) { provide(e); return; } } if (session.verbose > 2) clog << _("Collapsing compound expression") << *e->tok << endl; provide(e->right); } void const_folder::visit_comparison (comparison* e) { int comp; literal_number *left_num, *right_num; literal_string *left_str, *right_str; get_literal(e->left, left_num, left_str); get_literal(e->right, right_num, right_str); if (left_str && right_str) comp = left_str->value.compare(right_str->value); else if (left_num && right_num) comp = left_num->value < right_num->value ? -1 : left_num->value > right_num->value ? 1 : 0; else if ((left_num && ((left_num->value == LLONG_MIN && (e->op == "<=" || e->op == ">")) || (left_num->value == LLONG_MAX && (e->op == ">=" || e->op == "<")))) || (right_num && ((right_num->value == LLONG_MIN && (e->op == ">=" || e->op == "<")) || (right_num->value == LLONG_MAX && (e->op == "<=" || e->op == ">"))))) { expression* other = left_num ? e->right : e->left; varuse_collecting_visitor vu(session); other->visit(&vu); if (!vu.side_effect_free()) provide (e); else { if (session.verbose>2) clog << _("Collapsing constant-boundary comparison ") << *e->tok << endl; relaxed_p = false; // ops <= and >= are true, < and > are false literal_number* n = new literal_number( e->op.length() == 2 ); n->tok = e->tok; n->visit (this); } return; } else { provide (e); return; } if (session.verbose>2) clog << _("Collapsing constant comparison ") << *e->tok << endl; relaxed_p = false; int64_t value; if (e->op == "==") value = comp == 0; else if (e->op == "!=") value = comp != 0; else if (e->op == "<") value = comp < 0; else if (e->op == ">") value = comp > 0; else if (e->op == "<=") value = comp <= 0; else if (e->op == ">=") value = comp >= 0; else throw SEMANTIC_ERROR (_("unsupported comparison operator ") + (string)e->op); literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_concatenation (concatenation* e) { literal_string* left = get_string (e->left); literal_string* right = get_string (e->right); if (left && right) { if (session.verbose>2) clog << _("Collapsing constant concatenation ") << *e->tok << endl; relaxed_p = false; literal_string* n = new literal_string (*left); n->tok = e->tok; n->value = (string)n->value + (string)right->value; n->visit (this); } else if ((left && left->value.empty()) || (right && right->value.empty())) { if (session.verbose>2) clog << _("Collapsing identity concatenation ") << *e->tok << endl; relaxed_p = false; provide(left ? e->right : e->left); } else provide (e); } void const_folder::visit_ternary_expression (ternary_expression* e) { literal_number* cond = get_number (e->cond); if (!cond) { replace (e->truevalue); replace (e->falsevalue); provide (e); } else { if (session.verbose>2) clog << _F("Collapsing constant-%" PRIi64 " ternary %s", cond->value, lex_cast(*e->tok).c_str()) << endl; relaxed_p = false; expression* n = cond->value ? e->truevalue : e->falsevalue; n->visit (this); } } void const_folder::visit_defined_op (defined_op* e) { // If a @defined makes it this far, then it was not resolved by // previous efforts. We could assume that therefore it is a big fat // zero, but for the @defined(autocast) case PR18079, this just // means that we didn't know yet. int64_t value = 0; bool collapse_this = false; /* PR20672: not true; we run a const_folder iteratively during initial probe body variable-expansion, when other @defined()s may be as-yet-unprocessed. We can't presume to map them to zero. // We do know that plain target_symbols aren't going anywhere though. if (get_target_symbol (e->operand)) { if (session.verbose>2) clog << _("Collapsing target_symbol @defined check ") << *e->tok << endl; collapse_this = true; } else */ if (collapse_defines_p && relaxed_p) { if (session.verbose>2) clog << _("Collapsing untouched @defined check ") << *e->tok << endl; // If we got to an expression with a known type, call it defined. if (e->operand->type != pe_unknown) value = 1; collapse_this = true; } if (collapse_this) { // Don't be greedy... we'll only collapse one at a time so type // resolution can have another go at it. relaxed_p = false; literal_number* n = new literal_number (value); n->tok = e->tok; n->visit (this); } else { if (session.verbose>2) clog << _("Preserving unresolved @defined check ") << *e->tok << endl; provide (e); } } target_symbol* const_folder::get_target_symbol(expression*& e) { replace (e); return (e == last_target_symbol) ? last_target_symbol : NULL; } void const_folder::visit_target_symbol (target_symbol* e) { if (collapse_defines_p && session.skip_badvars) { // Upon user request for ignoring context, the symbol is replaced // with a literal 0 and a warning message displayed // ... but don't do this during early runs of the const_folder, only // during the final (collapse_defines_p) one. (Otherwise, during // a dwarf_var "@defined($foo) ? $foo : 0", the inner $foo could // get premature mapping to 0. // // XXX this ignores possible side-effects, e.g. in array indexes literal_number* ln_zero = new literal_number (0); ln_zero->tok = e->tok; provide (ln_zero); session.print_warning (_("Bad $context variable being substituted with literal 0"), e->tok); relaxed_p = false; } else { update_visitor::visit_target_symbol (e); last_target_symbol = e; } } static int initial_typeres_pass(systemtap_session& s); static int semantic_pass_const_fold (systemtap_session& s, bool& relaxed_p) { // attempt an initial type resolution pass to see if there are any type // mismatches before we starting whisking away vars that get switched out // with a const. // return if the initial type resolution pass reported errors (type mismatches) int rc = initial_typeres_pass(s); if (rc) { relaxed_p = true; return rc; } // Let's simplify statements with constant values. const_folder cf (s, relaxed_p, true /* collapse remaining @defined()->0 now */ ); // This instance may be reused for multiple probe/function body trims. for (unsigned i=0; ibody); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) cf.replace (it->second->body); return 0; } struct dead_control_remover: public traversing_visitor { systemtap_session& session; bool& relaxed_p; statement* control; dead_control_remover(systemtap_session& s, bool& r): session(s), relaxed_p(r), control(NULL) {} void visit_block (block *b); // When a block contains any of these, the following statements are dead. void visit_return_statement (return_statement* s) { control = s; } void visit_next_statement (next_statement* s) { control = s; } void visit_break_statement (break_statement* s) { control = s; } void visit_continue_statement (continue_statement* s) { control = s; } }; void dead_control_remover::visit_block (block* b) { vector& vs = b->statements; if (vs.size() == 0) /* else (size_t) size()-1 => very big */ return; for (size_t i = 0; i < vs.size() - 1; ++i) { vs[i]->visit (this); if (vs[i] == control) { session.print_warning(_("statement will never be reached"), vs[i + 1]->tok); vs.erase(vs.begin() + i + 1, vs.end()); relaxed_p = false; break; } } } static void semantic_pass_dead_control (systemtap_session& s, bool& relaxed_p) { // Let's remove code that follow unconditional control statements dead_control_remover dc (s, relaxed_p); for (unsigned i=0; ibody->visit(&dc); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) it->second->body->visit(&dc); } // Looks for next statements in function declarations and marks // them. struct function_next_check : public traversing_visitor { functiondecl* current_function; function_next_check() : current_function(0) { } void visit_next_statement(next_statement*) { current_function->has_next = true; } void visit_embeddedcode(embeddedcode* s) { if (s->tagged_p("STAP_NEXT;")) current_function->has_next = true; } }; struct dead_overload_remover : public traversing_visitor { systemtap_session& s; bool& relaxed_p; dead_overload_remover(systemtap_session& sess, bool& r) : s(sess), relaxed_p(r) { } void visit_functioncall(functioncall* e); }; void dead_overload_remover::visit_functioncall(functioncall *e) { unsigned reachable = 1; bool chained = true; for (unsigned fd = 0; fd < e->referents.size(); fd++) { functiondecl* r = e->referents[fd]; // Note that this is not a sound inference but it suffices for most // cases. It may be the case that there is a 'next' statement in the // function that will never be executed by the control flow. // We simply use the presence of a 'next' statement as an indicator // of a potential fall through. Once a function can't be 'nexted' the // remaining functions are unreachable. if (chained && r->has_next) reachable++; else chained = false; } if (reachable < e->referents.size()) { for (unsigned fd = reachable; fd < e->referents.size(); fd++) { functiondecl* r = e->referents[fd]; s.print_warning(_("instance of overloaded function will " "never be reached"), r->tok); } e->referents.erase(e->referents.begin()+reachable, e->referents.end()); relaxed_p = false; } } static void semantic_pass_overload(systemtap_session& s, bool& relaxed_p) { set function_next; function_next_check fnc; for (auto it = s.functions.begin(); it != s.functions.end(); ++it) { functiondecl* fn = it->second; fnc.current_function = fn; fn->body->visit(&fnc); } for (auto it = s.probes.begin(); it != s.probes.end(); ++it) { dead_overload_remover ovr(s, relaxed_p); (*it)->body->visit(&ovr); } for (auto it = s.functions.begin(); it != s.functions.end(); ++it) { dead_overload_remover ovr(s, relaxed_p); it->second->body->visit(&ovr); } } struct duplicate_function_remover: public functioncall_traversing_visitor { systemtap_session& s; map& duplicate_function_map; duplicate_function_remover(systemtap_session& sess, map&dfm): s(sess), duplicate_function_map(dfm) {}; void visit_functioncall (functioncall* e); }; void duplicate_function_remover::visit_functioncall (functioncall *e) { functioncall_traversing_visitor::visit_functioncall (e); // If any of the current function call references points to a function that // is a duplicate, replace it. for (unsigned i = 0; i < e->referents.size(); i++) { functiondecl* referent = e->referents[i]; if (duplicate_function_map.count(referent) != 0) { if (s.verbose>2) clog << _F("Changing %s reference to %s reference\n", referent->unmangled_name.to_string().c_str(), duplicate_function_map[referent]->unmangled_name.to_string().c_str()); e->tok = duplicate_function_map[referent]->tok; e->function = duplicate_function_map[referent]->name; e->referents[i] = duplicate_function_map[referent]; } } } static string get_functionsig (functiondecl* f) { ostringstream s; // Get the "name:args body" of the function in s. We have to // include the args since the function 'x1(a, b)' is different than // the function 'x2(b, a)' even if the bodies of the two functions // are exactly the same. f->printsig(s); f->body->print(s); // printsig puts f->name + ':' on the front. Remove this // (otherwise, functions would never compare equal). string str = s.str().erase(0, f->unmangled_name.size() + 1); // Return the function signature. return str; } void semantic_pass_opt6 (systemtap_session& s, bool& relaxed_p) { // Walk through all the functions, looking for duplicates. map functionsig_map; map duplicate_function_map; vector newly_zapped_functions; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { functiondecl *fd = it->second; string functionsig = get_functionsig(fd); if (functionsig_map.count(functionsig) == 0) { // This function is unique. Remember it. functionsig_map[functionsig] = fd; } else { // This function is a duplicate. duplicate_function_map[fd] = functionsig_map[functionsig]; newly_zapped_functions.push_back (fd); relaxed_p = false; } } for (unsigned i=0; i::iterator where = s.functions.find (newly_zapped_functions[i]->name); assert (where != s.functions.end()); s.functions.erase (where); } // If we have duplicate functions, traverse down the tree, replacing // the appropriate function calls. // duplicate_function_remover::visit_functioncall() handles the // details of replacing the function calls. if (duplicate_function_map.size() != 0) { duplicate_function_remover dfr (s, duplicate_function_map); for (unsigned i=0; i < s.probes.size(); i++) s.probes[i]->body->visit(&dfr); } } struct stable_analysis: public nop_visitor { bool stable; stable_analysis(): stable(false) {}; void visit_embeddedcode (embeddedcode* s); }; void stable_analysis::visit_embeddedcode (embeddedcode* s) { if (s->tagged_p("/* stable */")) stable = true; if (stable && !s->tagged_p("/* pure */")) throw SEMANTIC_ERROR(_("stable function must also be /* pure */"), s->tok); } // Examines entire subtree for any stable functioncalls. struct stable_finder: public traversing_visitor { bool stable; set& stable_fcs; stable_finder(set&s): stable(false), stable_fcs(s) {}; void visit_functioncall (functioncall* e); }; void stable_finder::visit_functioncall (functioncall* e) { if (stable_fcs.find(e->function) != stable_fcs.end()) stable = true; traversing_visitor::visit_functioncall(e); } // Examines current level of block for stable functioncalls. // Does not descend into sublevels. struct level_check: public traversing_visitor { bool stable; set& stable_fcs; level_check(set& s): stable(false), stable_fcs(s) {}; void visit_block (block* s); void visit_try_block (try_block *s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_functioncall (functioncall* s); }; void level_check::visit_block (block*) { } void level_check::visit_try_block (try_block* s) { if (s->catch_error_var) s->catch_error_var->visit(this); } void level_check::visit_if_statement (if_statement* s) { s->condition->visit(this); } void level_check::visit_for_loop (for_loop* s) { if (s->init) s->init->visit(this); s->cond->visit(this); if (s->incr) s->incr->visit(this); } void level_check::visit_foreach_loop (foreach_loop* s) { s->base->visit(this); for (unsigned i=0; iindexes.size(); i++) s->indexes[i]->visit(this); if (s->value) s->value->visit(this); if (s->limit) s->limit->visit(this); } void level_check::visit_functioncall (functioncall* e) { if (stable_fcs.find(e->function) != stable_fcs.end()) stable = true; traversing_visitor::visit_functioncall(e); } struct stable_functioncall_visitor: public update_visitor { systemtap_session& session; functiondecl* current_function; derived_probe* current_probe; set& stable_fcs; set scope_vars; map new_vars; vector > new_stmts; unsigned loop_depth; block* top_scope; block* curr_scope; stable_functioncall_visitor(systemtap_session& s, set& sfc): update_visitor(s.verbose), session(s), current_function(0), current_probe(0), stable_fcs(sfc), loop_depth(0), top_scope(0), curr_scope(0) {}; statement* convert_stmt(statement* s); void visit_block (block* s); void visit_try_block (try_block* s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_functioncall (functioncall* e); }; statement* stable_functioncall_visitor::convert_stmt (statement* s) { if (top_scope == 0 && (dynamic_cast(s) || dynamic_cast(s))) { stable_finder sf(stable_fcs); s->visit(&sf); if (sf.stable) { block* b = new block; b->tok = s->tok; b->statements.push_back(s); return b; } } else if (top_scope == 0 && !dynamic_cast(s)) { level_check lc(stable_fcs); s->visit(&lc); if (lc.stable) { block* b = new block; b->tok = s->tok; b->statements.push_back(s); return b; } } return s; } void stable_functioncall_visitor::visit_block (block* s) { block* prev_top_scope = top_scope; block* prev_scope = curr_scope; if (loop_depth == 0) top_scope = s; curr_scope = s; set current_vars = scope_vars; update_visitor::visit_block(s); if (loop_depth == 0) top_scope = prev_top_scope; curr_scope = prev_scope; scope_vars = current_vars; } void stable_functioncall_visitor::visit_try_block (try_block* s) { if (s->try_block) s->try_block = convert_stmt(s->try_block); replace(s->try_block); replace(s->catch_error_var); if (s->catch_block) s->catch_block = convert_stmt(s->catch_block); replace(s->catch_block); provide(s); } void stable_functioncall_visitor::visit_if_statement (if_statement* s) { block* prev_top_scope = top_scope; if (loop_depth == 0) top_scope = 0; replace(s->condition); s->thenblock = convert_stmt(s->thenblock); replace(s->thenblock); if (loop_depth == 0) top_scope = 0; if (s->elseblock) s->elseblock = convert_stmt(s->elseblock); replace(s->elseblock); provide(s); top_scope = prev_top_scope; } void stable_functioncall_visitor::visit_for_loop (for_loop* s) { replace(s->init); replace(s->cond); replace(s->incr); loop_depth++; s->block = convert_stmt(s->block); replace(s->block); loop_depth--; provide(s); } void stable_functioncall_visitor::visit_foreach_loop (foreach_loop* s) { for (unsigned i = 0; i < s->indexes.size(); ++i) replace(s->indexes[i]); replace(s->base); replace(s->value); replace(s->limit); loop_depth++; s->block = convert_stmt(s->block); replace(s->block); loop_depth--; provide(s); } void stable_functioncall_visitor::visit_functioncall (functioncall* e) { for (unsigned i = 0; i < e->args.size(); ++i) replace (e->args[i]); if (stable_fcs.find(e->function) != stable_fcs.end()) { string name("__stable_"); name.append(e->function).append("_value"); // Variable potentially not in scope since it is in a sibling block if (scope_vars.find(e->function) == scope_vars.end()) { if (new_vars.find(e->function) == new_vars.end()) { // New variable declaration to store result of function call vardecl* v = new vardecl; v->unmangled_name = v->name = name; v->tok = e->tok; v->set_arity(0, e->tok); v->type = e->type; if (current_function) current_function->locals.push_back(v); else current_probe->locals.push_back(v); new_vars[e->function] = v; } symbol* sym = new symbol; sym->name = name; sym->tok = e->tok; sym->referent = new_vars[e->function]; sym->type = e->type; functioncall* fc = new functioncall; fc->tok = e->tok; fc->function = e->function; fc->referents = e->referents; fc->type = e->type; assignment* a = new assignment; a->tok = e->tok; a->op = "="; a->left = sym; a->right = fc; a->type = e->type; expr_statement* es = new expr_statement; es->tok = e->tok; es->value = a; // Store location of the block to put new declaration. if (loop_depth != 0) { assert(top_scope); new_stmts.push_back(make_pair(es,top_scope)); } else { assert(curr_scope); new_stmts.push_back(make_pair(es,curr_scope)); } scope_vars.insert(e->function); provide(sym); } else { symbol* sym = new symbol; sym->name = name; sym->tok = e->tok; sym->referent = new_vars[e->function]; sym->type = e->type; provide(sym); } return; } provide(e); } // Cache stable embedded-c functioncall results and replace // all calls with same name using that value to reduce duplicate // functioncall overhead. Functioncalls are pulled out of any // top-level loops and put into if/try blocks. void semantic_pass_opt7(systemtap_session& s) { set stable_fcs; for (map::iterator it = s.functions.begin(); it != s.functions.end(); ++it) { functiondecl* fn = (*it).second; stable_analysis sa; fn->body->visit(&sa); if (sa.stable && fn->formal_args.size() == 0) stable_fcs.insert(fn->name); } for (vector::iterator it = s.probes.begin(); it != s.probes.end(); ++it) { stable_functioncall_visitor t(s, stable_fcs); t.current_probe = *it; (*it)->body = t.convert_stmt((*it)->body); t.replace((*it)->body); for (vector >::iterator st = t.new_stmts.begin(); st != t.new_stmts.end(); ++st) st->second->statements.insert(st->second->statements.begin(), st->first); } for (map::iterator it = s.functions.begin(); it != s.functions.end(); ++it) { functiondecl* fn = (*it).second; stable_functioncall_visitor t(s, stable_fcs); t.current_function = fn; fn->body = t.convert_stmt(fn->body); t.replace(fn->body); for (vector >::iterator st = t.new_stmts.begin(); st != t.new_stmts.end(); ++st) st->second->statements.insert(st->second->statements.begin(), st->first); } } static int semantic_pass_optimize1 (systemtap_session& s) { // In this pass, we attempt to rewrite probe/function bodies to // eliminate some blatantly unnecessary code. This is run before // type inference, but after symbol resolution and derived_probe // creation. We run an outer "relaxation" loop that repeats the // optimizations until none of them find anything to remove. int rc = 0; bool relaxed_p = false; unsigned iterations = 0; while (! relaxed_p) { // Save the old value of suppress_warnings, as we will be changing // it below. save_and_restore suppress_warnings(& s.suppress_warnings); assert_no_interrupts(); relaxed_p = true; // until proven otherwise // If the verbosity is high enough, always print warnings (overrides -w), // or if not, always suppress warnings for every itteration after the first. if(s.verbose > 2) s.suppress_warnings = false; else if (iterations > 0) s.suppress_warnings = true; if (!s.unoptimized) { semantic_pass_opt1 (s, relaxed_p); semantic_pass_opt2 (s, relaxed_p, iterations); // produce some warnings only on iteration=0 semantic_pass_opt3 (s, relaxed_p); semantic_pass_opt4 (s, relaxed_p); semantic_pass_opt5 (s, relaxed_p); } // For listing mode, we need const-folding regardless of optimization so // that @defined expressions can be properly resolved. PR11360 // We also want it in case variables are used in if/case expressions, // so enable always. PR11366 // rc is incremented if there is an error that got reported. rc += semantic_pass_const_fold (s, relaxed_p); if (!s.unoptimized) semantic_pass_dead_control (s, relaxed_p); if (!s.unoptimized) semantic_pass_overload (s, relaxed_p); iterations ++; } // We will now remove probes that have empty handlers and join the remaining probes // with their groups. Do not elide probes when the unoptimziation flag is set. vector non_empty_probes; for (unsigned i = 0; i < s.probes.size(); i++) { derived_probe* p = s.probes[i]; if (s.unoptimized || s.dump_mode) p->join_group(s); else if (s.empty_probes.find(p) == s.empty_probes.end()) { non_empty_probes.push_back(p); p->join_group(s); } else if (!s.timing && // PR10070 !(p->base->tok->location.file->synthetic)) // don't warn for synthetic probes s.print_warning(_F("Probe '%s' has been elided", ((string) p->locations[0]->components[0]->functor).c_str()), p->tok); } if (!s.unoptimized && !s.dump_mode) s.probes = non_empty_probes; return rc; } static int semantic_pass_optimize2 (systemtap_session& s) { // This is run after type inference. We run an outer "relaxation" // loop that repeats the optimizations until none of them find // anything to remove. int rc = 0; // Save the old value of suppress_warnings, as we will be changing // it below. save_and_restore suppress_warnings(& s.suppress_warnings); bool relaxed_p = false; unsigned iterations = 0; while (! relaxed_p) { assert_no_interrupts(); relaxed_p = true; // until proven otherwise // If the verbosity is high enough, always print warnings (overrides -w), // or if not, always suppress warnings for every itteration after the first. if(s.verbose > 2) s.suppress_warnings = false; else if (iterations > 0) s.suppress_warnings = true; if (!s.unoptimized) semantic_pass_opt6 (s, relaxed_p); iterations++; } if (!s.unoptimized) semantic_pass_opt7(s); return rc; } // ------------------------------------------------------------------------ // type resolution struct autocast_expanding_visitor: public var_expanding_visitor { typeresolution_info& ti; autocast_expanding_visitor (systemtap_session& s, typeresolution_info& ti): var_expanding_visitor(s), ti(ti) {} void resolve_functioncall (functioncall* fc) { // This is a very limited version of semantic_pass_symbols, but // we're late in the game at this point (after basic symbol // resolution already took place). We won't get a chance to // optimize, but for now the only functions we expect are // kernel/user_string from pretty-printing, which don't need // optimization. systemtap_session& s = ti.session; size_t nfiles = s.files.size(); symresolution_info sym (s); sym.current_function = ti.current_function; sym.current_probe = ti.current_probe; fc->visit (&sym); // NB: synthetic functions get tacked onto the origin file, so we won't // see them growing s.files[]. Traverse it directly. for (unsigned i = 0; i < fc->referents.size(); i++) { functiondecl* fd = fc->referents[i]; sym.current_function = fd; sym.current_probe = 0; fd->body->visit (&sym); } while (nfiles < s.files.size()) { stapfile* dome = s.files[nfiles++]; for (size_t i = 0; i < dome->functions.size(); ++i) { functiondecl* fd = dome->functions[i]; sym.current_function = fd; sym.current_probe = 0; fd->body->visit (&sym); // NB: not adding to s.functions just yet... } } // Add only the direct functions we need. functioncall_traversing_visitor ftv; fc->visit (&ftv); for (set::iterator it = ftv.seen.begin(); it != ftv.seen.end(); ++it) { functiondecl* fd = *it; pair::iterator,bool> inserted = s.functions.insert (make_pair (fd->name, fd)); if (!inserted.second && inserted.first->second != fd) throw SEMANTIC_ERROR (_F("resolved function '%s' conflicts with an existing function", fd->unmangled_name.to_string().c_str()), fc->tok); } } void visit_autocast_op (autocast_op* e) { const bool lvalue = is_active_lvalue (e); const exp_type_ptr& details = e->operand->type_details; if (details && !e->saved_conversion_error) { functioncall* fc = details->expand (e, lvalue); if (fc) { ti.num_newly_resolved++; resolve_functioncall (fc); // NB: at this stage, the functioncall object has one // argument too few if we're in lvalue context. It will // be filled in only later (as the // var_expanding_visitor::visit_assignment bit rolls // back up). But nevertheless we must resolve the fc, // otherwise, symresolution_info::visit_functioncall will // throw a mismatched-arity error. (semok/autocast08.stp) if (lvalue) provide_lvalue_call (fc); fc->visit (this); return; } } var_expanding_visitor::visit_autocast_op (e); } }; struct initial_typeresolution_info : public typeresolution_info { initial_typeresolution_info (systemtap_session& s): typeresolution_info(s) {} // these expressions are not supposed to make its way to the typeresolution // pass. they probably get substituted/replaced, but since this is an initial pass // and not all substitutions are done, replace the functions that throw errors. void visit_target_symbol (target_symbol*) {} void visit_atvar_op (atvar_op*) {} void visit_defined_op (defined_op*) {} void visit_entry_op (entry_op*) {} void visit_cast_op (cast_op*) {} }; static int initial_typeres_pass(systemtap_session& s) { // minimal type resolution based off of semantic_pass_types(), without // checking for complete type resolutions or autocast expanding initial_typeresolution_info ti(s); ti.assert_resolvability = false; while (1) { assert_no_interrupts(); ti.num_newly_resolved = 0; ti.num_still_unresolved = 0; ti.num_available_autocasts = 0; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { assert_no_interrupts(); functiondecl* fd = it->second; ti.current_probe = 0; ti.current_function = fd; ti.t = pe_unknown; fd->body->visit (& ti); } for (unsigned j=0; jbody->visit (& ti); probe_point* pp = pn->sole_location(); if (pp->condition) { ti.current_function = 0; ti.current_probe = 0; ti.t = pe_long; // NB: expected type pp->condition->visit (& ti); } } if (ti.num_newly_resolved == 0) // converged { // take into account that if there are mismatches, we'd want to know // about them incase they get whisked away, later in this process if (!ti.assert_resolvability && ti.mismatch_complexity > 0) // found a mismatch!! { ti.assert_resolvability = true; // report errors if (s.verbose > 0) ti.mismatch_complexity = 1; // print out mismatched but not unresolved type mismatches } else break; } else ti.mismatch_complexity = 0; } return s.num_errors(); } static int semantic_pass_types (systemtap_session& s) { int rc = 0; // next pass: type inference unsigned iterations = 0; typeresolution_info ti (s); ti.assert_resolvability = false; while (1) { assert_no_interrupts(); iterations ++; ti.num_newly_resolved = 0; ti.num_still_unresolved = 0; ti.num_available_autocasts = 0; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) try { assert_no_interrupts(); functiondecl* fd = it->second; ti.current_probe = 0; ti.current_function = fd; ti.t = pe_unknown; fd->body->visit (& ti); // NB: we don't have to assert a known type for // functions here, to permit a "void" function. // The translator phase will omit the "retvalue". // // if (fd->type == pe_unknown) // ti.unresolved (fd->tok); for (unsigned i=0; i < fd->locals.size(); ++i) ti.check_local (fd->locals[i]); // Check and run the autocast expanding visitor. if (ti.num_available_autocasts > 0) { autocast_expanding_visitor aev (s, ti); aev.replace (fd->body); // PR18079, rerun the const-folder / dead-block-remover // if autocast evaluation enabled a @defined() if (! aev.relaxed()) { bool relaxed_p = true; const_folder cf (s, relaxed_p); cf.replace (fd->body); if (! s.unoptimized) { dead_control_remover dc (s, relaxed_p); fd->body->visit (&dc); } (void) relaxed_p; // we judge success later by num_still_unresolved, not this flag } ti.num_available_autocasts = 0; } } catch (const semantic_error& e) { throw SEMANTIC_ERROR(_F("while processing function %s", it->second->unmangled_name.to_string().c_str())).set_chain(e); } for (unsigned j=0; jbody->visit (& ti); for (unsigned i=0; i < pn->locals.size(); ++i) ti.check_local (pn->locals[i]); // Check and run the autocast expanding visitor. if (ti.num_available_autocasts > 0) { autocast_expanding_visitor aev (s, ti); var_expand_const_fold_loop (s, pn->body, aev); // PR18079, rerun the const-folder / dead-block-remover // if autocast evaluation enabled a @defined() if (! s.unoptimized) { bool relaxed_p; dead_control_remover dc (s, relaxed_p); pn->body->visit (&dc); (void) relaxed_p; // we judge success later by num_still_unresolved, not this flag } ti.num_available_autocasts = 0; } probe_point* pp = pn->sole_location(); if (pp->condition) { ti.current_function = 0; ti.current_probe = 0; ti.t = pe_long; // NB: expected type pp->condition->visit (& ti); } } catch (const semantic_error& e) { throw SEMANTIC_ERROR(_F("while processing probe %s", s.probes[j]->derived_locations(false).c_str())).set_chain(e); } for (unsigned j=0; jtype == pe_unknown) ti.unresolved (gd->tok); if(gd->arity == 0 && gd->wrap == true) { throw SEMANTIC_ERROR(_("wrapping not supported for scalars"), gd->tok); } } if (ti.num_newly_resolved == 0) // converged { if (ti.num_still_unresolved == 0) break; // successfully else if (! ti.assert_resolvability) { // PR18079, before we go asserting anything, try to nullify any // still-unresolved @defined ops. bool relaxed_p = true; const_folder cf (s, relaxed_p, true); // NB: true: collapse remaining @defined's for (auto it = s.probes.begin(); it != s.probes.end(); ++it) cf.replace ((*it)->body); for (auto it = s.functions.begin(); it != s.functions.end(); ++it) cf.replace (it->second->body); if (! s.unoptimized) semantic_pass_dead_control (s, relaxed_p); if (! relaxed_p) ti.mismatch_complexity = 0; // reset for next pass else { ti.assert_resolvability = true; // last pass, with error msgs if (s.verbose > 0) ti.mismatch_complexity = 0; // print every kind of mismatch } } else { // unsuccessful conclusion rc ++; break; } } else ti.mismatch_complexity = 0; // reset for next pass } return rc + s.num_errors(); } struct exp_type_null : public exp_type_details { uintptr_t id () const { return 0; } bool expandable() const { return false; } functioncall *expand(autocast_op*, bool) { return NULL; } }; typeresolution_info::typeresolution_info (systemtap_session& s): session(s), num_newly_resolved(0), num_still_unresolved(0), num_available_autocasts(0), assert_resolvability(false), mismatch_complexity(0), current_function(0), current_probe(0), t(pe_unknown), null_type(make_shared()) { } void typeresolution_info::visit_literal_number (literal_number* e) { assert (e->type == pe_long); if ((t == e->type) || (t == pe_unknown)) return; mismatch (e->tok, t, e->type); } void typeresolution_info::visit_literal_string (literal_string* e) { assert (e->type == pe_string); if ((t == e->type) || (t == pe_unknown)) return; mismatch (e->tok, t, e->type); } void typeresolution_info::visit_logical_or_expr (logical_or_expr *e) { visit_binary_expression (e); } void typeresolution_info::visit_logical_and_expr (logical_and_expr *e) { visit_binary_expression (e); } void typeresolution_info::visit_regex_query (regex_query *e) { // NB: result of regex query is an integer! if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = pe_string; e->left->visit (this); t = pe_string; e->right->visit (this); // parser ensures this is a literal known at compile time if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_compound_expression (compound_expression* e) { // Incoming type inference applies to the RHS. e->right->visit(this); // No incoming data for the LHS. t = pe_unknown; e->left->visit(this); } void typeresolution_info::visit_comparison (comparison *e) { // NB: result of any comparison is an integer! if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = (e->right->type != pe_unknown) ? e->right->type : pe_unknown; e->left->visit (this); t = (e->left->type != pe_unknown) ? e->left->type : pe_unknown; e->right->visit (this); if (e->left->type != pe_unknown && e->right->type != pe_unknown && e->left->type != e->right->type) mismatch (e); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_concatenation (concatenation *e) { if (t != pe_unknown && t != pe_string) invalid (e->tok, t); t = pe_string; e->left->visit (this); t = pe_string; e->right->visit (this); if (e->type == pe_unknown) { e->type = pe_string; resolved (e->tok, e->type); } } void typeresolution_info::visit_assignment (assignment *e) { if (t == pe_stats) invalid (e->tok, t); if (e->op == "<<<") // stats aggregation { if (t == pe_string) invalid (e->tok, t); t = pe_stats; e->left->visit (this); t = pe_long; e->right->visit (this); if (e->type == pe_unknown || e->type == pe_stats) { e->type = pe_long; resolved (e->tok, e->type); } } else if (e->left->type == pe_stats) invalid (e->left->tok, e->left->type); else if (e->right->type == pe_stats) invalid (e->right->tok, e->right->type); else if (e->op == "+=" || // numeric only e->op == "-=" || e->op == "*=" || e->op == "/=" || e->op == "%=" || e->op == "&=" || e->op == "^=" || e->op == "|=" || e->op == "<<=" || e->op == ">>=" || false) { visit_binary_expression (e); } else if (e->op == ".=" || // string only false) { if (t == pe_long || t == pe_stats) invalid (e->tok, t); t = pe_string; e->left->visit (this); t = pe_string; e->right->visit (this); if (e->type == pe_unknown) { e->type = pe_string; resolved (e->tok, e->type); } } else if (e->op == "=") // overloaded = for string & numeric operands { // logic similar to ternary_expression exp_type sub_type = t; // Infer types across the l/r values if (sub_type == pe_unknown && e->type != pe_unknown) sub_type = e->type; t = (sub_type != pe_unknown) ? sub_type : (e->right->type != pe_unknown) ? e->right->type : pe_unknown; e->left->visit (this); t = (sub_type != pe_unknown) ? sub_type : (e->left->type != pe_unknown) ? e->left->type : pe_unknown; e->right->visit (this); if ((sub_type != pe_unknown) && (e->type == pe_unknown)) { e->type = sub_type; resolved (e->tok, e->type); } if ((sub_type == pe_unknown) && (e->left->type != pe_unknown)) { e->type = e->left->type; resolved (e->tok, e->type); } if (e->left->type != pe_unknown && e->right->type != pe_unknown && e->left->type != e->right->type) mismatch (e); // Propagate type details from the RHS to the assignment if (e->type == e->right->type && e->right->type_details && !e->type_details) resolved_details(e->right->type_details, e->type_details); // Propagate type details from the assignment to the LHS if (e->type == e->left->type && e->type_details) { if (e->left->type_details && *e->left->type_details != *e->type_details && *e->left->type_details != *null_type) resolved_details(null_type, e->left->type_details); else if (!e->left->type_details) resolved_details(e->type_details, e->left->type_details); } } else throw SEMANTIC_ERROR (_("internal error: unsupported assignment operator ") + (string)e->op); } void typeresolution_info::visit_embedded_expr (embedded_expr *e) { if (e->type == pe_unknown) { if (e->tagged_p ("/* string */")) e->type = pe_string; else // if (e->tagged_p ("/* long */")) e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_binary_expression (binary_expression* e) { if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = pe_long; e->left->visit (this); t = pe_long; e->right->visit (this); if (e->left->type != pe_unknown && e->right->type != pe_unknown && e->left->type != e->right->type) mismatch (e); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_pre_crement (pre_crement *e) { visit_unary_expression (e); } void typeresolution_info::visit_post_crement (post_crement *e) { visit_unary_expression (e); } void typeresolution_info::visit_unary_expression (unary_expression* e) { if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = pe_long; e->operand->visit (this); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_ternary_expression (ternary_expression* e) { exp_type sub_type = t; t = pe_long; e->cond->visit (this); // Infer types across the true/false arms of the ternary expression. if (sub_type == pe_unknown && e->type != pe_unknown) sub_type = e->type; t = sub_type; e->truevalue->visit (this); t = sub_type; e->falsevalue->visit (this); if ((sub_type == pe_unknown) && (e->type != pe_unknown)) ; // already resolved else if ((sub_type != pe_unknown) && (e->type == pe_unknown)) { e->type = sub_type; resolved (e->tok, e->type); } else if ((sub_type == pe_unknown) && (e->truevalue->type != pe_unknown)) { e->type = e->truevalue->type; resolved (e->tok, e->type); } else if ((sub_type == pe_unknown) && (e->falsevalue->type != pe_unknown)) { e->type = e->falsevalue->type; resolved (e->tok, e->type); } else if (e->type != sub_type) mismatch (e->tok, sub_type, e->type); // Propagate type details from both true/false branches if (!e->type_details && e->type == e->truevalue->type && e->type == e->falsevalue->type && e->truevalue->type_details && e->falsevalue->type_details && *e->truevalue->type_details == *e->falsevalue->type_details) resolved_details(e->truevalue->type_details, e->type_details); } template void resolve_2types (Referrer* referrer, Referent* referent, typeresolution_info* r, exp_type t, bool accept_unknown = false) { exp_type& re_type = referrer->type; const token* re_tok = referrer->tok; exp_type& te_type = referent->type; if (t != pe_unknown && re_type == t && re_type == te_type) ; // do nothing: all three e->types in agreement else if (t == pe_unknown && re_type != pe_unknown && re_type == te_type) ; // do nothing: two known e->types in agreement else if (re_type != pe_unknown && te_type != pe_unknown && re_type != te_type) r->mismatch (re_tok, re_type, referent); // referrer-referent else if (re_type != pe_unknown && t != pe_unknown && re_type != t) r->mismatch (re_tok, t, referent); // referrer-t else if (te_type != pe_unknown && t != pe_unknown && te_type != t) r->mismatch (re_tok, t, referent); // referent-t else if (re_type == pe_unknown && t != pe_unknown) { // propagate from upstream re_type = t; r->resolved (re_tok, re_type); // catch re_type/te_type mismatch later } else if (re_type == pe_unknown && te_type != pe_unknown) { // propagate from referent re_type = te_type; r->resolved (re_tok, re_type); // catch re_type/t mismatch later } else if (re_type != pe_unknown && te_type == pe_unknown) { // propagate to referent te_type = re_type; r->resolved (re_tok, re_type, referent); // catch re_type/t mismatch later } else if (! accept_unknown) r->unresolved (re_tok); } void typeresolution_info::visit_symbol (symbol* e) { if (e->referent == 0) // should have been linked or rejected before now throw SEMANTIC_ERROR (_F("internal error: unresolved symbol '%s'", e->name.to_string().c_str()), e->tok); resolve_2types (e, e->referent, this, t); if (e->type == e->referent->type) { // If both have type details, then they either must agree; // otherwise force them both to null. if (e->type_details && e->referent->type_details && *e->type_details != *e->referent->type_details) { this->session.print_warning(_("Potential type mismatch in reassignment"), e->tok); resolved_details(null_type, e->type_details); resolved_details(null_type, e->referent->type_details); } else if (e->type_details && !e->referent->type_details) resolved_details(e->type_details, e->referent->type_details); else if (!e->type_details && e->referent->type_details) resolved_details(e->referent->type_details, e->type_details); } } void typeresolution_info::visit_target_register (target_register* e) { if (t != pe_long) invalid (e->tok, t); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_target_deref (target_deref* e) { // Both the target_deref result as well as the address must both be longs. if (t != pe_long) invalid (e->tok, t); e->addr->visit (this); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_target_bitfield (target_bitfield*) { // These are all expanded much earlier. abort(); } void typeresolution_info::visit_target_symbol (target_symbol* e) { // This occurs only if a target symbol was not resolved over in // tapset.cxx land, that error was properly suppressed, and the // later unused-expression-elimination pass didn't get rid of it // either. So we have a target symbol that is believed to be of // genuine use, yet unresolved by the provider. // // PR18079, or it can happen if a $target expression is nested within // a @defined() test that has not yet been resolved (but can be soon). if (! assert_resolvability) { num_still_unresolved ++; return; } if (session.verbose > 2) { clog << _("Resolution problem with "); if (current_function) { clog << "function " << current_function->name << endl; current_function->body->print (clog); clog << endl; } else if (current_probe) { clog << "probe " << *current_probe->sole_location() << endl; current_probe->body->print (clog); clog << endl; } else //TRANSLATORS: simply saying not an issue with a probe or function clog << _("other") << endl; } if (e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else session.print_error (SEMANTIC_ERROR(_("unresolved target-symbol expression"), e->tok)); } void typeresolution_info::visit_atvar_op (atvar_op* e) { // This occurs only if an @var() was not resolved over in // tapset.cxx land, that error was properly suppressed, and the // later unused-expression-elimination pass didn't get rid of it // either. So we have an @var() that is believed to be of // genuine use, yet unresolved by the provider. if (session.verbose > 2) { clog << _("Resolution problem with "); if (current_function) { clog << "function " << current_function->name << endl; current_function->body->print (clog); clog << endl; } else if (current_probe) { clog << "probe " << *current_probe->sole_location() << endl; current_probe->body->print (clog); clog << endl; } else //TRANSLATORS: simply saying not an issue with a probe or function clog << _("other") << endl; } if (e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else session.print_error (SEMANTIC_ERROR(_("unresolved @var() expression"), e->tok)); } void typeresolution_info::visit_defined_op (defined_op* e) { // PR18079: if a @defined is still around, it may have a parameter that // wasn't resolvable one way or another earlier. Maybe an autocast_op. // Let's give it a visit just in case. e->operand->visit(this); if (assert_resolvability) session.print_error (SEMANTIC_ERROR(_("unexpected @defined"), e->tok)); else num_still_unresolved ++; } void typeresolution_info::visit_entry_op (entry_op* e) { throw SEMANTIC_ERROR(_("internal error: @entry is only valid in .return probes"), e->tok); } void typeresolution_info::visit_cast_op (cast_op* e) { // Like target_symbol, a cast_op shouldn't survive this far // unless it was not resolved and its value is really needed. if (e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else session.print_error (SEMANTIC_ERROR(_F("type definition '%s' not found in '%s'", e->type_name.to_string().c_str(), e->module.to_string().c_str()), e->tok)); } void typeresolution_info::visit_autocast_op (autocast_op* e) { // Like cast_op, a implicit autocast_op shouldn't survive this far // unless it was not resolved and its value is really needed. if (assert_resolvability && e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else if (assert_resolvability) session.print_error (SEMANTIC_ERROR(_("unknown type in dereference"), e->tok)); t = pe_long; e->operand->visit (this); num_still_unresolved++; if (e->operand->type_details && e->operand->type_details->expandable()) num_available_autocasts++; } void typeresolution_info::visit_perf_op (perf_op* e) { // A perf_op should already be resolved if (t == pe_stats || t == pe_string) invalid (e->tok, t); e->type = pe_long; // XXX: ... but but but ... ::visit_defined_op interprets this ->type // as meaning that @defined(@perf("JUNK JUNK JUNK")) is valid. // The dwarf_var_expanding_visitor::visit_perf_op() code that validates // the JUNK parameter is not even called in time. // (There is no real need to visit our operand - by parser // construction, it's always a string literal, with its type already // set.) t = pe_string; e->operand->visit (this); } void typeresolution_info::visit_arrayindex (arrayindex* e) { symbol *array = NULL; hist_op *hist = NULL; classify_indexable(e->base, array, hist); // Every hist_op has type [int]:int, that is to say, every hist_op // is a pseudo-one-dimensional integer array type indexed by // integers (bucket numbers). if (hist) { if (e->indexes.size() != 1) unresolved (e->tok); t = pe_long; e->indexes[0]->visit (this); if (e->indexes[0]->type != pe_long) unresolved (e->tok); hist->visit (this); if (e->type != pe_long) { e->type = pe_long; resolved (e->tok, e->type); } return; } // Now we are left with "normal" map inference and index checking. assert (array); assert (array->referent != 0); resolve_2types (e, array->referent, this, t); // now resolve the array indexes // if (e->referent->index_types.size() == 0) // // redesignate referent as array // e->referent->set_arity (e->indexes.size ()); if (e->indexes.size() != array->referent->index_types.size()) unresolved (e->tok); // symbol resolution should prevent this else for (unsigned i=0; iindexes.size(); i++) { if (e->indexes[i]) { expression* ee = e->indexes[i]; exp_type& ft = array->referent->index_types [i]; t = ft; ee->visit (this); exp_type at = ee->type; if ((at == pe_string || at == pe_long) && ft == pe_unknown) { // propagate to formal type ft = at; resolved (ee->tok, ft, array->referent, i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (ee->tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, array->referent, i); if (at == pe_unknown) unresolved (ee->tok); } } } void typeresolution_info::visit_functioncall (functioncall* e) { if (e->referents.empty()) throw SEMANTIC_ERROR (_F("internal error: unresolved function call to '%s'", e->function.to_string().c_str()), e->tok); exp_type original = t; for (unsigned fd = 0; fd < e->referents.size(); fd++) { t = original; // type may be changed by overloaded functions so restore it functiondecl* referent = e->referents[fd]; resolve_2types (e, referent, this, t, true); // accept unknown type if (e->type == pe_stats) invalid (e->tok, e->type); const exp_type_ptr& func_type = referent->type_details; if (func_type && referent->type == e->type && (!e->type_details || *func_type != *e->type_details)) resolved_details(referent->type_details, e->type_details); // now resolve the function parameters if (e->args.size() != referent->formal_args.size()) unresolved (e->tok); // symbol resolution should prevent this else for (unsigned i=0; iargs.size(); i++) { expression* ee = e->args[i]; exp_type& ft = referent->formal_args[i]->type; const token* fe_tok = referent->formal_args[i]->tok; t = ft; ee->visit (this); exp_type at = ee->type; if (((at == pe_string) || (at == pe_long)) && ft == pe_unknown) { // propagate to formal arg ft = at; resolved (ee->tok, ft, referent->formal_args[i], i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (fe_tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, referent->formal_args[i], i); if (at == pe_unknown) unresolved (ee->tok); } } } void typeresolution_info::visit_block (block* e) { for (unsigned i=0; istatements.size(); i++) { t = pe_unknown; e->statements[i]->visit (this); } } void typeresolution_info::visit_try_block (try_block* e) { if (e->try_block) e->try_block->visit (this); if (e->catch_error_var) { t = pe_string; e->catch_error_var->visit (this); } if (e->catch_block) e->catch_block->visit (this); } void typeresolution_info::visit_embeddedcode (embeddedcode* s) { // PR11573. If we have survived thus far with a piece of embedded // code that requires uprobes, we need to track this. // // This is an odd place for this check, as opposed // to a separate 'optimization' pass, or c_unparser::visit_embeddedcode // over yonder in pass 3. However, we want to do it during pass 2 so // that cached sessions also get the uprobes treatment. if (! session.need_uprobes && s->tagged_p ("/* pragma:uprobes */")) { if (session.verbose > 2) clog << _("Activating uprobes support because /* pragma:uprobes */ seen.") << endl; session.need_uprobes = true; } // PR15065. Likewise, we need to detect /* pragma:tagged_dfa */ // before the gen_dfa_table pass. Again, the typechecking part of // pass 2 is a good place for this. if (! session.need_tagged_dfa && s->tagged_p("/* pragma:tagged_dfa */")) { if (session.verbose > 2) clog << _("Turning on DFA subexpressions because /* pragma:tagged_dfa */ seen") << endl; session.need_tagged_dfa = true; // TODOXXX throw SEMANTIC_ERROR (_("Tagged DFA support is not yet available"), s->tok); } } void typeresolution_info::visit_if_statement (if_statement* e) { t = pe_long; e->condition->visit (this); t = pe_unknown; e->thenblock->visit (this); if (e->elseblock) { t = pe_unknown; e->elseblock->visit (this); } } void typeresolution_info::visit_for_loop (for_loop* e) { t = pe_unknown; if (e->init) e->init->visit (this); t = pe_long; e->cond->visit (this); t = pe_unknown; if (e->incr) e->incr->visit (this); t = pe_unknown; e->block->visit (this); } void typeresolution_info::visit_foreach_loop (foreach_loop* e) { // See also visit_arrayindex. // This is different in that, being a statement, we can't assign // a type to the outer array, only propagate to/from the indexes // if (e->referent->index_types.size() == 0) // // redesignate referent as array // e->referent->set_arity (e->indexes.size ()); exp_type wanted_value = pe_unknown; symbol *array = NULL; hist_op *hist = NULL; classify_indexable(e->base, array, hist); if (hist) { if (e->indexes.size() != 1) unresolved (e->tok); t = pe_long; e->indexes[0]->visit (this); if (e->indexes[0]->type != pe_long) unresolved (e->tok); hist->visit (this); wanted_value = pe_long; } else { assert (array); if (e->indexes.size() != array->referent->index_types.size()) unresolved (e->tok); // symbol resolution should prevent this else { for (unsigned i=0; iindexes.size(); i++) { expression* ee = e->indexes[i]; exp_type& ft = array->referent->index_types [i]; t = ft; ee->visit (this); exp_type at = ee->type; if ((at == pe_string || at == pe_long) && ft == pe_unknown) { // propagate to formal type ft = at; resolved (ee->tok, ee->type, array->referent, i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (ee->tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, array->referent, i); if (at == pe_unknown) unresolved (ee->tok); } for (unsigned i=0; iarray_slice.size(); i++) if (e->array_slice[i]) { expression* ee = e->array_slice[i]; exp_type& ft = array->referent->index_types [i]; t = ft; ee->visit (this); exp_type at = ee->type; if ((at == pe_string || at == pe_long) && ft == pe_unknown) { // propagate to formal type ft = at; resolved (ee->tok, ee->type, array->referent, i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (ee->tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, array->referent, i); if (at == pe_unknown) unresolved (ee->tok); } } t = pe_unknown; array->visit (this); wanted_value = array->type; } if (e->value) { if (wanted_value == pe_stats) invalid(e->value->tok, wanted_value); else if (wanted_value != pe_unknown) check_arg_type(wanted_value, e->value); else { t = pe_unknown; e->value->visit (this); } } /* Prevent @sum etc. aggregate sorting on non-statistics arrays. */ if (wanted_value != pe_unknown) if (e->sort_aggr != sc_none && wanted_value != pe_stats) invalid (array->tok, wanted_value); if (e->limit) { t = pe_long; e->limit->visit (this); } t = pe_unknown; e->block->visit (this); } void typeresolution_info::visit_null_statement (null_statement*) { } void typeresolution_info::visit_expr_statement (expr_statement* e) { t = pe_unknown; e->value->visit (this); } struct delete_statement_typeresolution_info: public throwing_visitor { typeresolution_info *parent; delete_statement_typeresolution_info (typeresolution_info *p): throwing_visitor (_("invalid operand of delete expression")), parent (p) {} void visit_arrayindex (arrayindex* e) { parent->visit_arrayindex (e); } void visit_symbol (symbol* e) { exp_type ignored = pe_unknown; assert (e->referent != 0); resolve_2types (e, e->referent, parent, ignored); } }; void typeresolution_info::visit_delete_statement (delete_statement* e) { delete_statement_typeresolution_info di (this); t = pe_unknown; e->value->visit (&di); } void typeresolution_info::visit_next_statement (next_statement*) { } void typeresolution_info::visit_break_statement (break_statement*) { } void typeresolution_info::visit_continue_statement (continue_statement*) { } void typeresolution_info::visit_array_in (array_in* e) { // all unary operators only work on numerics exp_type t1 = t; t = pe_unknown; // array value can be anything e->operand->visit (this); if (t1 == pe_unknown && e->type != pe_unknown) ; // already resolved else if (t1 == pe_string || t1 == pe_stats) mismatch (e->tok, t1, pe_long); else if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_return_statement (return_statement* e) { // This is like symbol, where the referent is // the return value of the function. // translation pass will print error if (current_function == 0) return; exp_type& e_type = current_function->type; t = current_function->type; if (!e->value) { if (e_type != pe_unknown) mismatch (e->tok, pe_unknown, current_function); return; } e->value->visit (this); if (e_type != pe_unknown && e->value->type != pe_unknown && e_type != e->value->type) mismatch (e->value->tok, e->value->type, current_function); if (e_type == pe_unknown && (e->value->type == pe_long || e->value->type == pe_string)) { // propagate non-statistics from value e_type = e->value->type; resolved (e->value->tok, e_type, current_function); } if (e->value->type == pe_stats) invalid (e->value->tok, e->value->type); const exp_type_ptr& value_type = e->value->type_details; if (value_type && current_function->type == e->value->type) { exp_type_ptr& func_type = current_function->type_details; if (!func_type) // The function can take on the type details of the return value. resolved_details(value_type, func_type); else if (*func_type != *value_type && *func_type != *null_type) // Conflicting return types? NO TYPE FOR YOU! resolved_details(null_type, func_type); } } void typeresolution_info::visit_print_format (print_format* e) { size_t unresolved_args = 0; if (e->hist) { e->hist->visit(this); } else if (e->print_with_format) { // If there's a format string, we can do both inference *and* // checking. // First we extract the subsequence of formatting components // which are conversions (not just literal string components) unsigned expected_num_args = 0; std::vector components; for (size_t i = 0; i < e->components.size(); ++i) { if (e->components[i].type == print_format::conv_unspecified) throw SEMANTIC_ERROR (_("Unspecified conversion in print operator format string"), e->tok); else if (e->components[i].type == print_format::conv_literal) continue; components.push_back(e->components[i]); ++expected_num_args; if (e->components[i].widthtype == print_format::width_dynamic) ++expected_num_args; if (e->components[i].prectype == print_format::prec_dynamic) ++expected_num_args; } // Then we check that the number of conversions and the number // of args agree. if (expected_num_args != e->args.size()) throw SEMANTIC_ERROR (_("Wrong number of args to formatted print operator"), e->tok); // Then we check that the types of the conversions match the types // of the args. unsigned argno = 0; for (size_t i = 0; i < components.size(); ++i) { // Check the dynamic width, if specified if (components[i].widthtype == print_format::width_dynamic) { check_arg_type (pe_long, e->args[argno]); ++argno; } // Check the dynamic precision, if specified if (components[i].prectype == print_format::prec_dynamic) { check_arg_type (pe_long, e->args[argno]); ++argno; } exp_type wanted = pe_unknown; switch (components[i].type) { case print_format::conv_unspecified: case print_format::conv_literal: assert (false); break; case print_format::conv_pointer: case print_format::conv_number: case print_format::conv_binary: case print_format::conv_char: case print_format::conv_memory: case print_format::conv_memory_hex: wanted = pe_long; break; case print_format::conv_string: wanted = pe_string; break; } assert (wanted != pe_unknown); check_arg_type (wanted, e->args[argno]); ++argno; } } else { // Without a format string, the best we can do is require that // each argument resolve to a concrete type. for (size_t i = 0; i < e->args.size(); ++i) { t = pe_unknown; e->args[i]->visit (this); if (e->args[i]->type == pe_unknown) { unresolved (e->args[i]->tok); ++unresolved_args; } } } if (unresolved_args == 0) { if (e->type == pe_unknown) { if (e->print_to_stream) e->type = pe_long; else e->type = pe_string; resolved (e->tok, e->type); } } else { e->type = pe_unknown; unresolved (e->tok); } } void typeresolution_info::visit_stat_op (stat_op* e) { t = pe_stats; e->stat->visit (this); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } else if (e->type != pe_long) mismatch (e->tok, pe_long, e->type); } void typeresolution_info::visit_hist_op (hist_op* e) { t = pe_stats; e->stat->visit (this); } void typeresolution_info::check_arg_type (exp_type wanted, expression* arg) { t = wanted; arg->visit (this); if (arg->type == pe_unknown) { arg->type = wanted; resolved (arg->tok, arg->type); } else if (arg->type != wanted) { mismatch (arg->tok, wanted, arg->type); } } void typeresolution_info::check_local (vardecl* v) { if (v->arity != 0) { num_still_unresolved ++; if (assert_resolvability) session.print_error (SEMANTIC_ERROR (_("array locals not supported, missing global declaration? "), v->tok)); } if (v->type == pe_unknown) unresolved (v->tok); else if (v->type == pe_stats) { num_still_unresolved ++; if (assert_resolvability) session.print_error (SEMANTIC_ERROR (_("stat locals not supported, missing global declaration? "), v->tok)); } else if (!(v->type == pe_long || v->type == pe_string)) invalid (v->tok, v->type); } void typeresolution_info::unresolved (const token* tok) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 0) { stringstream msg; msg << _("unresolved type "); session.print_error (SEMANTIC_ERROR (msg.str(), tok)); } } void typeresolution_info::invalid (const token* tok, exp_type pe) { num_still_unresolved ++; if (assert_resolvability) { stringstream msg; if (tok && tok->type == tok_operator) msg << _("invalid operator"); else msg << _("invalid type ") << pe; session.print_error (SEMANTIC_ERROR (msg.str(), tok)); } } void typeresolution_info::mismatch (const binary_expression* e) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 1) { stringstream msg; msg << _F("type mismatch: left and right sides don't agree (%s vs %s)", lex_cast(e->left->type).c_str(), lex_cast(e->right->type).c_str()); session.print_error (SEMANTIC_ERROR (msg.str(), e->tok)); } else if (!assert_resolvability) mismatch_complexity = max(1, mismatch_complexity); } /* tok token where mismatch occurred * t1 type we expected (the 'good' type) * t2 type we received (the 'bad' type) * */ void typeresolution_info::mismatch (const token* tok, exp_type t1, exp_type t2) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 2) { stringstream msg; msg << _F("type mismatch: expected %s", lex_cast(t1).c_str()); if (t2 != pe_unknown) msg << _F(" but found %s", lex_cast(t2).c_str()); session.print_error (SEMANTIC_ERROR (msg.str(), tok)); } else if (!assert_resolvability) mismatch_complexity = max(2, mismatch_complexity); } /* tok token where the mismatch happened * type type we received (the 'bad' type) * decl declaration of mismatched symbol * index if index-based (array index or function arg) * */ void typeresolution_info::mismatch (const token *tok, exp_type type, const symboldecl* decl, int index) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 3) { assert(decl != NULL); // If mismatch is against a function parameter from within the function // itself (rather than a function call), then the index will be -1. We // check here if the decl corresponds to one of the params and if so, // adjust the index. if (current_function != NULL && index == -1) { vector& args = current_function->formal_args; for (unsigned i = 0; i < args.size() && index < 0; i++) if (args[i] == decl) index = i; } // get the declaration's original type and token const resolved_type *original = NULL; for (vector::const_iterator it = resolved_types.begin(); it != resolved_types.end() && original == NULL; ++it) { if (it->decl == decl && it->index == index) original = &(*it); } // print basic mismatch msg if we couldn't find the decl (this can happen // for explicitly typed decls e.g. myvar:long or for fabricated (already // resolved) decls e.g. __perf_read_*) if (original == NULL) { session.print_error (SEMANTIC_ERROR ( _F("type mismatch: expected %s but found %s", lex_cast(type).c_str(), lex_cast(decl->type).c_str()), tok)); return; } // print where mismatch happened and chain with origin of decl type // resolution stringstream msg; if (index >= 0) msg << _F("index %d ", index); msg << _F("type mismatch (%s)", lex_cast(type).c_str()); semantic_error err(ERR_SRC, msg.str(), tok); stringstream chain_msg; chain_msg << _("type"); if (index >= 0) chain_msg << _F(" of index %d", index); chain_msg << _F(" was first inferred here (%s)", lex_cast(decl->type).c_str()); semantic_error chain(ERR_SRC, chain_msg.str(), original->tok); err.set_chain(chain); session.print_error (err); } else if (!assert_resolvability) mismatch_complexity = max(3, mismatch_complexity); } /* tok token where resolution occurred * type type to which we resolved * decl declaration of resolved symbol * index if index-based (array index or function arg) * */ void typeresolution_info::resolved (const token *tok, exp_type t, const symboldecl* decl, int index) { num_newly_resolved ++; if (session.verbose > 4) clog << "resolved type " << t << " to " << *tok << endl; // We only use the resolved_types vector to give better mismatch messages // involving symbols. So don't bother adding it if we're not given a decl if (decl != NULL) { // As a fail-safe, if the decl & index is already in the vector, then // modify it instead of adding another one to ensure uniqueness. This // should never happen since we only call resolved once for each decl & // index, but better safe than sorry. (IE. if it does happen, better have // the latest resolution info for better mismatch reporting later). for (unsigned i = 0; i < resolved_types.size(); i++) { if (resolved_types[i].decl == decl && resolved_types[i].index == index) { resolved_types[i].tok = tok; return; } } resolved_type res(tok, decl, index); resolved_types.push_back(res); } } void typeresolution_info::resolved_details (const exp_type_ptr& src, exp_type_ptr& dest) { num_newly_resolved ++; dest = src; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/elaborate.h000066400000000000000000000503121356460210500155220ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2005-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef ELABORATE_H #define ELABORATE_H #include "staptree.h" #include "parse.h" #include "stringtable.h" #include "session.h" #include #include //#include #include #include #include #include extern "C" { #include } #include "privilege.h" struct recursive_expansion_error : public semantic_error { ~recursive_expansion_error () throw () {} recursive_expansion_error (const std::string& msg, const token* t1=0): SEMANTIC_ERROR (msg, t1) {} recursive_expansion_error (const std::string& msg, const token* t1, const token* t2): SEMANTIC_ERROR (msg, t1, t2) {} }; // ------------------------------------------------------------------------ struct derived_probe; class match_node; struct symresolution_info: public traversing_visitor { protected: systemtap_session& session; bool unmangled_p; public: functiondecl* current_function; derived_probe* current_probe; symresolution_info (systemtap_session& s, bool omniscient_unmangled = false); vardecl* find_var (const std::string& name, int arity, const token *tok); std::vector find_functions (functioncall *call, const std::string& name, unsigned arity, const token *tok); std::set collect_functions(void); void visit_block (block *s); void visit_symbol (symbol* e); void visit_foreach_loop (foreach_loop* e); void visit_arrayindex (arrayindex* e); void visit_arrayindex (arrayindex *e, bool wildcard_ok); void visit_functioncall (functioncall* e); void visit_embeddedcode (embeddedcode* s); void visit_embedded_expr (embedded_expr* e); void visit_delete_statement (delete_statement* s); void visit_array_in (array_in *e); }; struct typeresolution_info: public visitor { typeresolution_info (systemtap_session& s); systemtap_session& session; unsigned num_newly_resolved; unsigned num_still_unresolved; unsigned num_available_autocasts; bool assert_resolvability; int mismatch_complexity; functiondecl* current_function; derived_probe* current_probe; // Holds information about a type we resolved (see PR16097) struct resolved_type { const token *tok; const symboldecl *decl; int index; resolved_type(const token *ct, const symboldecl *cdecl, int cindex): tok(ct), decl(cdecl), index(cindex) {} }; // Holds an element each time we resolve a decl. Unique by decl & index. // Possible values: // - resolved function type -> decl = functiondecl, index = -1 // - resolved function arg type -> decl = vardecl, index = index of arg // - resolved array/var type -> decl = vardecl, index = -1 // - resolved array index type -> decl = vardecl, index = index of type std::vector resolved_types; // see PR16097 void check_arg_type (exp_type wanted, expression* arg); void check_local (vardecl* v); void unresolved (const token* tok); void invalid (const token* tok, exp_type t); void mismatch (const binary_expression* e); void mismatch (const token* tok, exp_type t1, exp_type t2); void mismatch (const token* tok, exp_type type, const symboldecl* decl, int index = -1); void resolved (const token* tok, exp_type type, const symboldecl* decl = NULL, int index = -1); void resolved_details (const exp_type_ptr& src, exp_type_ptr& dest); exp_type t; // implicit parameter for nested visit call; may clobber // Upon entry to one of the visit_* calls, the incoming // `t' value is the type inferred for that node from // context. It may match or conflict with the node's // preexisting type, or it may be unknown. // Expressions with NULL type_details may be as-yet-unknown. // If they have this null_type, they're explicitly *not* a rich type. const exp_type_ptr null_type; // PR24199 NB: below functions should NOT throw exceptions on a // routine type resolution failure. Instead, session.print_error() // and keep on chugging. void visit_block (block* s); void visit_try_block (try_block* s); void visit_embeddedcode (embeddedcode* s); void visit_null_statement (null_statement* s); void visit_expr_statement (expr_statement* s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_return_statement (return_statement* s); void visit_delete_statement (delete_statement* s); void visit_next_statement (next_statement* s); void visit_break_statement (break_statement* s); void visit_continue_statement (continue_statement* s); void visit_literal_string (literal_string* e); void visit_literal_number (literal_number* e); void visit_embedded_expr (embedded_expr* e); void visit_binary_expression (binary_expression* e); void visit_unary_expression (unary_expression* e); void visit_pre_crement (pre_crement* e); void visit_post_crement (post_crement* e); void visit_logical_or_expr (logical_or_expr* e); void visit_logical_and_expr (logical_and_expr* e); void visit_array_in (array_in* e); void visit_regex_query (regex_query* e); void visit_compound_expression (compound_expression* e); void visit_comparison (comparison* e); void visit_concatenation (concatenation* e); void visit_ternary_expression (ternary_expression* e); void visit_assignment (assignment* e); void visit_symbol (symbol* e); void visit_target_register (target_register* e); void visit_target_deref (target_deref* e); void visit_target_bitfield (target_bitfield* e); void visit_target_symbol (target_symbol* e); void visit_arrayindex (arrayindex* e); void visit_functioncall (functioncall* e); void visit_print_format (print_format* e); void visit_stat_op (stat_op* e); void visit_hist_op (hist_op* e); void visit_cast_op (cast_op* e); void visit_autocast_op (autocast_op* e); void visit_atvar_op (atvar_op* e); void visit_defined_op (defined_op* e); void visit_entry_op (entry_op* e); void visit_perf_op (perf_op* e); // PR24199 NB: above functions should NOT throw exceptions on a // routine type resolution failure. Instead, session.print_error() // and keep on chugging. }; // ------------------------------------------------------------------------ // A derived_probe is a probe that has been elaborated by // binding to a matching provider. The locations std::vector // may be smaller or larger than the base probe, since a // provider may transform it. class translator_output; struct derived_probe_group; struct derived_probe: public probe { derived_probe (probe* b, probe_point* l, bool rewrite_loc=false); probe* base; // the original parsed probe probe_point* base_pp; // the probe_point that led to this derivation derived_probe_group* group; // the group we belong to virtual ~derived_probe () {} virtual void join_group (systemtap_session& s) = 0; virtual probe_point* sole_location () const; virtual probe_point* script_location () const; virtual void printsig (std::ostream &o, bool nest=true) const; // return arguments of probe if there virtual void getargs (std::list &) const {} void printsig_nested (std::ostream &o) const; virtual void collect_derivation_chain (std::vector &probes_list) const; virtual void collect_derivation_pp_chain (std::vector &pp_list) const; std::string derived_locations (bool firstFrom = true); virtual void print_dupe_stamp(std::ostream&) {} // To aid duplication elimination, print a stamp which uniquely identifies // the code that will be added to the probe body. (Doesn't need to be the // actual code...) virtual void initialize_probe_context_vars (translator_output*) {} // From within unparser::emit_probe, initialized any extra variables // in this probe's context locals. virtual void emit_probe_local_init (systemtap_session&, translator_output*) {} // From within unparser::emit_probe, emit any extra processing block // for this probe. virtual void emit_privilege_assertion (translator_output*); // From within unparser::emit_probe, emit any unprivileged mode // checking for this probe. public: static void emit_common_header (translator_output* o); // from c_unparser::emit_common_header // XXX: probably can move this stuff to a probe_group::emit_module_decls static void emit_process_owner_assertion (translator_output*); // From within unparser::emit_probe, emit a check that the current // process belongs to the user. static void print_dupe_stamp_unprivileged(std::ostream& o); static void print_dupe_stamp_unprivileged_process_owner(std::ostream& o); virtual bool needs_global_locks () { return true; } // by default, probes need locks around global variables // Location of semaphores to activate sdt probes Dwarf_Addr sdt_semaphore_addr; // perf.counter probes that this probe references std::set perf_counter_refs; // index into session.probes[], set and used during translation unsigned session_index; // List of other derived probes whose conditions may be affected by // this probe. std::set probes_with_affected_conditions; virtual void use_internal_buffer(const std::string&) {} }; // ------------------------------------------------------------------------ struct unparser; // Various derived classes derived_probe_group manage the // registration/invocation/unregistration of sibling probes. struct derived_probe_group { virtual ~derived_probe_group () {} virtual void emit_kernel_module_init (systemtap_session&) {} // Similar to emit_module_init(), but code emitted here gets run // with root access. The _init-generated code may assume that it is // called only once. If that code fails at run time, it must set // rc=1 and roll back any partial initializations, for its _exit // friend will NOT be invoked. The generated code may use // pre-declared "int i, j;". Note that the message transport isn't // available, so printk()/errk() is the only output option. virtual void emit_kernel_module_exit (systemtap_session&) {} // Similar to emit_module_exit(), but code emitted here gets run // with root access. The _exit-generated code may assume that it is // executed exactly zero times (if the _init-generated code failed) // or once. (_exit itself may be called a few times, to generate // the code in a few different places in the probe module.) The // generated code may use pre-declared "int i, j;". Note that the // message transport isn't available, so printk()/errk() is the only // output option. virtual void emit_module_decls (systemtap_session& s) = 0; // The _decls-generated code may assume that declarations such as // the context, embedded-C code, function and probe handler bodies // are all already generated. That is, _decls is called near the // end of the code generation process. It should minimize the // number of separate variables (and to a lesser extent, their // size). virtual void emit_module_init (systemtap_session& s) = 0; // The _init-generated code may assume that it is called only once. // If that code fails at run time, it must set rc=1 and roll back // any partial initializations, for its _exit friend will NOT be // invoked. The generated code may use pre-declared "int i, j;" // and set "const char* probe_point;". virtual void emit_module_post_init (systemtap_session&) {} // The emit_module_post_init() code is called once session_state is // set to running. virtual void emit_module_refresh (systemtap_session&) {} // The _refresh-generated code may be called multiple times during // a session run, bracketed by _init and _exit calls. // Upon failure, it must set enough state so that // a subsequent _exit call will clean up everything. // The generated code may use pre-declared "int i, j;". virtual void emit_module_exit (systemtap_session& s) = 0; // The _exit-generated code may assume that it is executed exactly // zero times (if the _init-generated code failed) or once. (_exit // itself may be called a few times, to generate the code in a few // different places in the probe module.) // The generated code may use pre-declared "int i, j;". // Support for on-the-fly operations is implemented in the runtime using a // workqueue which calls module_refresh(). Depending on the probe type, it may // not be safe to manipulate the workqueue in the context of the probe handler // (otf_safe_context() = false). In this case, we rely on a background timer // to schedule the work. Otherwise, if the probe context is safe // (otf_safe_context() = true), we can directly schedule the work. virtual bool otf_supported (systemtap_session&) { return false; } // Support for on-the-fly arming/disarming depends on probe type virtual bool otf_safe_context (systemtap_session&) { return false; } // Whether this probe type occurs in a safe context. To be safe, we default to // no, which means we'll rely on a background timer. }; // ------------------------------------------------------------------------ typedef std::map literal_map_t; struct derived_probe_builder { virtual void build(systemtap_session & sess, probe* base, probe_point* location, literal_map_t const & parameters, std::vector & finished_results) = 0; virtual void build_with_suffix(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const & parameters, std::vector & finished_results, std::vector const & suffix); virtual ~derived_probe_builder() {} virtual void build_no_more (systemtap_session &) {} virtual bool is_alias () const { return false; } virtual std::string name() = 0; static bool has_null_param (literal_map_t const & parameters, interned_string key); static bool get_param (literal_map_t const & parameters, interned_string key, interned_string& value); static bool get_param (literal_map_t const & parameters, interned_string key, int64_t& value); static bool has_param (literal_map_t const & parameters, interned_string key); }; struct match_key { interned_string name; bool have_parameter; exp_type parameter_type; match_key(interned_string n); match_key(probe_point::component const & c); match_key & with_number(); match_key & with_string(); std::string str() const; bool operator<(match_key const & other) const; bool globmatch(match_key const & other) const; }; class match_node { typedef std::map sub_map_t; typedef std::map::iterator sub_map_iterator_t; sub_map_t sub; std::vector ends; public: match_node(); void find_and_build (systemtap_session& s, probe* p, probe_point *loc, unsigned pos, std::vector& results, std::set& builders); std::string suggest_functors(systemtap_session& s, std::string functor); void try_suffix_expansion (systemtap_session& s, probe *p, probe_point *loc, unsigned pos, std::vector& results); void build_no_more (systemtap_session &s); void dump (systemtap_session &s, const std::string &name = ""); match_node* bind(match_key const & k); match_node* bind(interned_string k); match_node* bind_str(std::string const & k); match_node* bind_num(std::string const & k); match_node* bind_privilege(privilege_t p = privilege_t (pr_stapdev | pr_stapsys)); void bind(derived_probe_builder* e); private: privilege_t privilege; }; // ------------------------------------------------------------------------ struct alias_expansion_builder : public derived_probe_builder { probe_alias * alias; alias_expansion_builder(probe_alias * a) : alias(a) {} virtual void build(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const &, std::vector & finished_results); virtual void build_with_suffix(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const &, std::vector & finished_results, std::vector const & suffix); virtual bool is_alias () const { return true; } virtual std::string name() { return "alias expansion builder"; } bool checkForRecursiveExpansion (probe *use); }; // ------------------------------------------------------------------------ /* struct systemtap_session moved to session.h */ int semantic_pass (systemtap_session& s); void derive_probes (systemtap_session& s, probe *p, std::vector& dps, bool optional = false, bool rethrow_errors = false); // A helper we use here and in translate, for pulling symbols out of lvalue // expressions. symbol * get_symbol_within_expression (expression *e); struct unparser; struct const_folder: public update_visitor { systemtap_session& session; bool& relaxed_p; bool collapse_defines_p; const_folder(systemtap_session& s, bool& r, bool collapse_defines = false): update_visitor(s.verbose), session(s), relaxed_p(r), collapse_defines_p(collapse_defines), last_number(0), last_string(0), last_target_symbol(0) {} literal_number* last_number; literal_number* get_number(expression*& e); void visit_literal_number (literal_number* e); literal_string* last_string; literal_string* get_string(expression*& e); void visit_literal_string (literal_string* e); void get_literal(expression*& e, literal_number*& n, literal_string*& s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_binary_expression (binary_expression* e); void visit_unary_expression (unary_expression* e); void visit_logical_or_expr (logical_or_expr* e); void visit_logical_and_expr (logical_and_expr* e); void visit_compound_expression (compound_expression* e); // void visit_regex_query (regex_query* e); // XXX: would require executing dfa at compile-time void visit_comparison (comparison* e); void visit_concatenation (concatenation* e); void visit_ternary_expression (ternary_expression* e); void visit_defined_op (defined_op* e); target_symbol* last_target_symbol; target_symbol* get_target_symbol(expression*& e); void visit_target_symbol (target_symbol* e); }; // Run the given code filter visitors against the given body. // Repeat until they all report having relaxed. template void update_visitor_loop (systemtap_session& sess, std::vector& filters, T& body) { bool relaxed_p; do { relaxed_p = true; for (unsigned k=0; kreset (); filters[k]->replace (body); relaxed_p = (relaxed_p && filters[k]->relaxed()); } if (! relaxed_p && sess.verbose > 3) std::clog << _("Rerunning the code filters.") << std::endl; } while (! relaxed_p); } // Run given code filter visitor, then a round of const folder, over and over, until they chill. template void var_expand_const_fold_loop(systemtap_session& sess, X& body, Y& v) { bool relaxed_p; /* ignored */ const_folder cf (sess, relaxed_p); std::vector k; k.push_back (& v); k.push_back (& cf); update_visitor_loop (sess, k, body); } #endif // ELABORATE_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.2/emacs/000077500000000000000000000000001356460210500145025ustar00rootroot00000000000000systemtap-4.2/emacs/systemtap-init.el000066400000000000000000000003201356460210500200110ustar00rootroot00000000000000(autoload 'systemtap-mode "systemtap-mode.el") (setq auto-mode-alist (append '(("\\.stp$" . systemtap-mode)) auto-mode-alist)) (setq auto-mode-alist (append '(("\\.stpm$" . systemtap-mode)) auto-mode-alist)) systemtap-4.2/emacs/systemtap-mode.el000066400000000000000000000133321356460210500200010ustar00rootroot00000000000000;;; systemtap-mode.el --- A mode for SystemTap ;; Copyright (C) 2008 Tomoki Sekiyama ;; Copyright (C) 2012 Rüdiger Sonderfeld ;; Authors: 2008 Tomoki Sekiyama ;; 2012 Rüdiger Sonderfeld ;; Maintainer: ruediger@c-plusplus.de ;; Keywords: tools languages ;; Version: 0.02 ;; URL: https://github.com/ruediger/systemtap-mode ;; This file is NOT part of GNU Emacs. ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; This code is based on the original systemtap-mode.el written by ;; Tomoki Sekiyama. It can be found at ;; http://coderepos.org/share/browser/lang/elisp/systemtap-mode/systemtap-mode.el?format=txt ;; TODO: ;; - indent embedded-C %{ ... %} correctly ;; - add parameter for indentation ;; - ... ;;; Code: (defconst systemtap-mode-version "0.02" "SystemTap Mode version number.") (defgroup systemtap-mode nil "A mode for SystemTap." :prefix "systemtap-" :group 'tools :group 'languages) (require 'cc-mode) (require 'cc-awk) (eval-when-compile (require 'cc-langs) (require 'cc-fonts) (require 'cl)) (eval-and-compile (c-add-language 'systemtap-mode 'awk-mode)) ;; Syntax definitions for SystemTap (c-lang-defconst c-primitive-type-kwds systemtap '("string" "long" "global" "private")) (c-lang-defconst c-modifier-kwds systemtap (append '("probe" "function") (c-lang-const c-modifier-kwds))) (c-lang-defconst c-block-stmt-2-kwds systemtap '("else" "for" "foreach" "if" "while")) (c-lang-defconst c-simple-stmt-kwds systemtap '("break" "continue" "delete" "next" "return")) (c-lang-defconst c-identifier-syntax-modifications systemtap '((?. . "_") (?' . "."))) (defcustom systemtap-font-lock-extra-types nil "Font-lock extra types for SystemTap mode." :group 'systemtap-mode) (defconst systemtap-font-lock-keywords-1 (c-lang-const c-matchers-1 systemtap) "Minimal highlighting for SystemTap mode.") (defconst systemtap-font-lock-keywords-2 (c-lang-const c-matchers-2 systemtap) "Fast normal highlighting for SystemTap mode.") (defconst systemtap-font-lock-keywords-3 (c-lang-const c-matchers-3 systemtap) "Accurate normal highlighting for SystemTap mode.") (defvar systemtap-font-lock-keywords systemtap-font-lock-keywords-3 "Default expressions to highlight in SystemTap mode.") (defvar systemtap-mode-syntax-table nil "Syntax table used in systemtap-mode buffers.") (unless systemtap-mode-syntax-table (setq systemtap-mode-syntax-table (funcall (c-lang-const c-make-mode-syntax-table systemtap)))) (defvar systemtap-mode-abbrev-table nil "Abbreviation table used in systemtap-mode buffers.") (defvar systemtap-mode-map (let ((map (c-make-inherited-keymap))) (define-key map "\C-ce" 'systemtap-execute-script) (define-key map "\C-cc" 'systemtap-interrupt-script) map) "Keymap used in systemtap-mode buffers.") (easy-menu-define systemtap-menu systemtap-mode-map "SystemTap Mode Commands" (cons "SystemTap" (append '(["Execute This Script" systemtap-execute-script t] ["Interrupt Execution of Script" systemtap-interrupt-script (get-process "systemtap-script")] "----") (c-lang-const c-mode-menu systemtap)))) ;; Execution function of Current Script (defvar systemtap-buffer-name "*SystemTap*" "Name of the SystemTap execution buffer.") (defcustom systemtap-stap-program "stap" "SystemTap's stap program to execute scripts." :type 'file :group 'systemtap-mode) (defcustom systemtap-stap-options '("-v") "A list of options to give to stap." :type '(repeat string) :group 'systemtap-mode) (defun systemtap-execute-script () "Execute current SystemTap script." (interactive) (when (get-buffer systemtap-buffer-name) (kill-buffer systemtap-buffer-name)) (get-buffer-create systemtap-buffer-name) (display-buffer systemtap-buffer-name) (let* ((file-name (buffer-file-name)) (options (append systemtap-stap-options (list file-name)))) (apply #'start-process "systemtap-script" systemtap-buffer-name systemtap-stap-program options)) (message "Execution of SystemTap script started.")) (defun systemtap-interrupt-script () "Interrupt running SystemTap script." (interactive) (interrupt-process "systemtap-script") (message "SystemTap script is interrupted.")) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.stp\\'" . systemtap-mode)) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.stpm\\'" . systemtap-mode)) (require 'simple) ;;;###autoload ; prog-mode is newer than emacs 23 (define-derived-mode systemtap-mode fundamental-mode "SystemTap" "Major mode for editing SystemTap scripts. Key bindings: \\{systemtap-mode-map}" :group 'systemtap :syntax-table systemtap-mode-syntax-table :abbrev-table systemtap-mode-abbrev-table (c-initialize-cc-mode t) (use-local-map systemtap-mode-map) (c-init-language-vars systemtap-mode) (c-common-init 'systemtap-mode) (easy-menu-add systemtap-menu) (c-run-mode-hooks 'c-mode-common-hook) (c-update-modeline)) (provide 'systemtap-mode) ;;; systemtap-mode.el ends here systemtap-4.2/git_version.sh000077500000000000000000000270231356460210500163050ustar00rootroot00000000000000#!/bin/sh # # Generate some basic versioning information which can be piped to a header. # # Copyright (c) 2006-2007 Luc Verhaegen # Copyright (C) 2007 Hans Ulrich Niedermann # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # # This script is based on the one written for xf86-video-unichrome by # Luc Verhaegen, but was rewritten almost completely by Hans Ulrich # Niedermann. The script contains a few bug fixes from Egbert Eich, # Matthias Hopf, Joerg Sonnenberger, and possibly others. # # The author thanks the nice people on #git for the assistance. # # Simple testing of this script: # /sbin/busybox sh git_version.sh --example > moo.c \ # && gcc -Wall -Wextra -Wno-unused -o moo moo.c \ # && ./moo # (bash should also do) # # For how to hook this up to your automake- and/or imake-based build # system, best take a look at how the RadeonHD.am and/or RadeonHD.tmpl # work in the xf86-video-radeonhd build system. For non-recursive make, # you can probably make things a little bit simpler. # # KNOWN BUGS: # * Uses hyphenated ("git-foo-bar") program names, which git upstream # have declared deprecated. # # Help messages USAGE="[